예제 #1
0
def gql(request_string):
    if isinstance(request_string, six.string_types):
        source = Source(request_string, 'GraphQL request')
        return parse(source)
    else:
        raise Exception(
            'Received incompatible request "{}".'.format(request_string))
예제 #2
0
def test_parse_provides_useful_error_when_using_source():
    # type: () -> None
    with raises(GraphQLSyntaxError) as excinfo:
        parse(Source("query", "MyQuery.graphql"))
    assert "Syntax Error MyQuery.graphql (1:6) Expected {, found EOF" in str(
        excinfo.value
    )
예제 #3
0
def graphql(schema,
            request_string='',
            root_value=None,
            context_value=None,
            variable_values=None,
            operation_name=None,
            executor=None,
            return_promise=False,
            middleware=None):
    try:
        source = Source(request_string, 'GraphQL request')
        ast = parse(source)
        validation_errors = validate(schema, ast)
        if validation_errors:
            return ExecutionResult(
                errors=validation_errors,
                invalid=True,
            )
        return execute(
            schema,
            ast,
            root_value,
            context_value,
            operation_name=operation_name,
            variable_values=variable_values or {},
            executor=executor,
            return_promise=return_promise,
            middleware=middleware,
        )
    except Exception as e:
        return ExecutionResult(
            errors=[e],
            invalid=True,
        )
예제 #4
0
def test_lex_reports_useful_information_for_dashes_in_names():
    q = u'a-b'
    lexer = Lexer(Source(q))
    first_token = lexer.next_token()
    assert first_token == Token(TokenKind.NAME, 0, 1, 'a')
    with raises(GraphQLSyntaxError) as excinfo:
        lexer.next_token()

    assert u'Syntax Error GraphQL (1:3) Invalid number, expected digit but got: "b".' in excinfo.value.message
예제 #5
0
def test_parse_creates_ast():
    source = Source("""{
  node(id: 4) {
    id,
    name
  }
}
""")
    result = parse(source)

    assert result == \
        ast.Document(
            loc=Loc(start=0, end=41, source=source),
            definitions=[ast.OperationDefinition(
                loc=Loc(start=0, end=40, source=source),
                operation='query',
                name=None,
                variable_definitions=None,
                directives=[],
                selection_set=ast.SelectionSet(
                    loc=Loc(start=0, end=40, source=source),
                    selections=[ast.Field(
                        loc=Loc(start=4, end=38, source=source),
                        alias=None,
                        name=ast.Name(
                            loc=Loc(start=4, end=8, source=source),
                            value='node'),
                        arguments=[ast.Argument(
                            name=ast.Name(loc=Loc(start=9, end=11, source=source),
                                          value='id'),
                            value=ast.IntValue(
                                   loc=Loc(start=13, end=14, source=source),
                                   value='4'),
                            loc=Loc(start=9, end=14, source=source))],
                        directives=[],
                        selection_set=ast.SelectionSet(
                            loc=Loc(start=16, end=38, source=source),
                            selections=[ast.Field(
                                loc=Loc(start=22, end=24, source=source),
                                alias=None,
                                name=ast.Name(
                                    loc=Loc(start=22, end=24, source=source),
                                    value='id'),
                                arguments=[],
                                directives=[],
                                selection_set=None),
                                ast.Field(
                                loc=Loc(start=30, end=34, source=source),
                                alias=None,
                                name=ast.Name(
                                    loc=Loc(start=30, end=34, source=source),
                                    value='name'),
                                arguments=[],
                                directives=[],
                                selection_set=None)]))]))])
예제 #6
0
 def parse(cls, node):
     """ Parse graphql-code AST into a Context tree.
     """
     doc_ast = parse(Source(node))
     if doc_ast.definitions:
         op_def = doc_ast.definitions[0]
         if op_def.operation != 'query':
             raise InvalidOperation(op_def.name.value)
         root = cls._build_node(op_def)
         return root
     return None
예제 #7
0
파일: operation.py 프로젝트: MyrikLD/sgqlc
def handle_command(parsed_args):
    args = vars(parsed_args)  # vars: operations.py and operation.gql
    schema = load_schema(args['schema'])
    schema_name = ParsedSchemaName.parse_schema_name(args['schema-name'])
    out_file = args['operations.py']
    in_files = args['operation.gql']
    short_names = args['short_names']

    operations_gql = [Source(f.read(), f.name) for f in in_files]

    gen = CodeGen(
        schema, schema_name, operations_gql,
        out_file.write, short_names,
    )
    gen.write()
    out_file.close()
예제 #8
0
 def __init__(self, source, origin=None):
     self.source = Source(source)
     self.origin = origin
예제 #9
0
def test_parse_creates_ast():
    # type: () -> None
    source = Source(
        """{
  node(id: 4) {
    id,
    name
  }
}
"""
    )
    result = parse(source)

    assert result == ast.Document(
        loc=Loc(start=0, end=41, source=source),
        definitions=[
            ast.OperationDefinition(
                loc=Loc(start=0, end=40, source=source),
                operation="query",
                name=None,
                variable_definitions=None,
                directives=[],
                selection_set=ast.SelectionSet(
                    loc=Loc(start=0, end=40, source=source),
                    selections=[
                        ast.Field(
                            loc=Loc(start=4, end=38, source=source),
                            alias=None,
                            name=ast.Name(
                                loc=Loc(start=4, end=8, source=source), value="node"
                            ),
                            arguments=[
                                ast.Argument(
                                    name=ast.Name(
                                        loc=Loc(start=9, end=11, source=source),
                                        value="id",
                                    ),
                                    value=ast.IntValue(
                                        loc=Loc(start=13, end=14, source=source),
                                        value="4",
                                    ),
                                    loc=Loc(start=9, end=14, source=source),
                                )
                            ],
                            directives=[],
                            selection_set=ast.SelectionSet(
                                loc=Loc(start=16, end=38, source=source),
                                selections=[
                                    ast.Field(
                                        loc=Loc(start=22, end=24, source=source),
                                        alias=None,
                                        name=ast.Name(
                                            loc=Loc(start=22, end=24, source=source),
                                            value="id",
                                        ),
                                        arguments=[],
                                        directives=[],
                                        selection_set=None,
                                    ),
                                    ast.Field(
                                        loc=Loc(start=30, end=34, source=source),
                                        alias=None,
                                        name=ast.Name(
                                            loc=Loc(start=30, end=34, source=source),
                                            value="name",
                                        ),
                                        arguments=[],
                                        directives=[],
                                        selection_set=None,
                                    ),
                                ],
                            ),
                        )
                    ],
                ),
            )
        ],
    )
예제 #10
0
def lex_one(s):
    # type: (str) -> Token
    return Lexer(Source(s)).next_token()
예제 #11
0
파일: parser.py 프로젝트: savil/graphscale
def parse_grapple(grapple_string: str) -> GrappleDocument:
    ast = parse(Source(grapple_string))
    grapple_types = []
    for type_node in ast.definitions:
        grapple_types.append(create_grapple_type_definition(type_node))
    return GrappleDocument(types=grapple_types)
예제 #12
0
파일: gql.py 프로젝트: stjordanis/magma-1
def gql(request_string: str) -> DocumentNode:
    if isinstance(request_string, str):
        source = Source(request_string, "GraphQL request")
        return parse(source)
    else:
        raise Exception('Received incompatible request "{}".'.format(request_string))
예제 #13
0
def test_parse_provides_useful_error_when_using_source():
    with raises(GraphQLSyntaxError) as excinfo:
        parse(Source('query', 'MyQuery.graphql'))
    assert 'Syntax Error MyQuery.graphql (1:6) Expected {, found EOF' in str(
        excinfo.value)
예제 #14
0
def validation_errors(query):
    source = Source(query, 'StarWars.graphql')
    ast = parse(source)
    return validate(StarWarsSchema, ast)
예제 #15
0
def lex_one(s):
    return Lexer(Source(s)).next_token()