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))
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 )
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, )
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
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)]))]))])
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
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()
def __init__(self, source, origin=None): self.source = Source(source) self.origin = origin
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, ), ], ), ) ], ), ) ], )
def lex_one(s): # type: (str) -> Token return Lexer(Source(s)).next_token()
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)
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))
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)
def validation_errors(query): source = Source(query, 'StarWars.graphql') ast = parse(source) return validate(StarWarsSchema, ast)
def lex_one(s): return Lexer(Source(s)).next_token()