Parsing
Definition for parsing functions for queries.
Queries that are acceptable by this library should follow some rules:
- They should be named.
 - Their names should not contain symbols that could not
    be used in Python identifier(except for 
-symbol since it would be converted into_) - They can have special symbols after their names that will change how
    this queries will be executed:
*: query will be executed as script with using.executemethod from driver.+: query will return a single object orNoneand executed with.query_singlemethod from driver.!: query will always return a single object and executed with.query_required_singlemethod from driver.- empty: common query that will return a set of objects and will be executed with
    
.querymethod from driver. 
 
An example query that can be successfuly parsed:
    # name: select-user-by-username!
    # Find user by username and return it.
    SELECT User {
        username,
        bio,
        is_active
    }
    FILTER .username = <str>$username
    LIMIT 1
get_query_name_and_operation(name)
¶
    Return query name and operation from query headers.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
name | 
        str | 
        raw query name with operator from which final name and operation should be extracted.  | 
        required | 
Returns:
| Type | Description | 
|---|---|
Tuple[str, edgeql_queries.models.EdgeQLOperationType] | 
      Query name and operation type  | 
    
Exceptions:
| Type | Description | 
|---|---|
EdgeQLParsingError | 
        if header is in wrong format or name could not be converted into Python identificator.  | 
      
Source code in edgeql_queries/parsing.py
          def get_query_name_and_operation(name: str) -> Tuple[str, EdgeQLOperationType]:
    """Return query name and operation from query headers.
    Arguments:
        name: raw query name with operator from which
            final name and operation should be extracted.
    Returns:
        Query name and [operation type][edgeql_queries.models.EdgeQLOperationType]
    Raises:
        EdgeQLParsingError: if header is in wrong format or name could not be
            converted into Python identificator.
    """
    name = name.replace("-", "_")
    operation_suffix = ""
    for suffix in _OPERATION_SUFFFIXES_TO_TYPES:  # pragma: no branch
        if name.endswith(suffix):
            operation_suffix = suffix
            break
    if operation_suffix:
        query_name = name[: -len(operation_suffix)]
    else:
        query_name = name
    if not VALID_QUERY_NAME_PATTERN.match(query_name):
        raise EdgeQLParsingError(
            'name must be convertable to valid python variable, got "{0}"'.format(
                query_name,
            ),
        )
    return (
        query_name,
        _OPERATION_SUFFFIXES_TO_TYPES[operation_suffix],
    )
parse_query_from_string(raw_name, query_body)
¶
    Parse EdgeQL query string into [edgeql_queries.models.Query].
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
raw_name | 
        str | 
        query name with operation.  | 
        required | 
query_body | 
        str | 
        EdgeQL query.  | 
        required | 
Returns:
| Type | Description | 
|---|---|
Query | 
      [edgeql_queries.models.Query] that will be later added for creating executors.  | 
    
Source code in edgeql_queries/parsing.py
          def parse_query_from_string(raw_name: str, query_body: str) -> Query:
    """Parse EdgeQL query string into [edgeql_queries.models.Query].
    Arguments:
        raw_name: query name with operation.
        query_body: EdgeQL query.
    Returns:
        [edgeql_queries.models.Query] that will be later added for creating executors.
    """
    query_name, operation_type = get_query_name_and_operation(raw_name)
    return Query(query_name, operation_type, query_body)