Language

GraphQL Language

The graphql.language package is responsible for parsing and operating on the GraphQL language.

graphql.language.get_location(source: Source, position: int) → graphql.language.location.SourceLocation

Get the line and column for a character position in the source.

Takes a Source and a UTF-8 character offset, and returns the corresponding line and column as a SourceLocation.

class graphql.language.SourceLocation

Bases: tuple

Represents a location in a Source.

__init__()

Initialize self. See help(type(self)) for accurate signature.

_asdict()

Return a new OrderedDict which maps field names to their values.

_field_defaults = {}
_field_types = {'column': <class 'int'>, 'line': <class 'int'>}
_fields = ('line', 'column')
_fields_defaults = {}
classmethod _make(iterable)

Make a new SourceLocation object from a sequence or iterable

_replace(**kwds)

Return a new SourceLocation object replacing specified fields with new values

property column

Alias for field number 1

count()

Return number of occurrences of value.

property formatted
index()

Return first index of value.

Raises ValueError if the value is not present.

property line

Alias for field number 0

graphql.language.print_location(location: graphql.language.ast.Location) → str

Render a helpful description of the location in the GraphQL Source document.

graphql.language.print_source_location(source: graphql.language.source.Source, source_location: graphql.language.location.SourceLocation) → str

Render a helpful description of the location in the GraphQL Source document.

class graphql.language.TokenKind

Bases: enum.Enum

The different kinds of tokens that the lexer emits

AMP = '&'
AT = '@'
BANG = '!'
BLOCK_STRING = 'BlockString'
BRACE_L = '{'
BRACE_R = '}'
BRACKET_L = '['
BRACKET_R = ']'
COLON = ':'
COMMENT = 'Comment'
DOLLAR = '$'
EOF = '<EOF>'
EQUALS = '='
FLOAT = 'Float'
INT = 'Int'
NAME = 'Name'
PAREN_L = '('
PAREN_R = ')'
PIPE = '|'
SOF = '<SOF>'
SPREAD = '...'
STRING = 'String'
class graphql.language.Lexer(source: graphql.language.source.Source)

Bases: object

GraphQL Lexer

A Lexer is a stateful stream generator in that every time it is advanced, it returns the next token in the Source. Assuming the source lexes, the final Token emitted by the lexer will be of kind EOF, after which the lexer will repeatedly return the same EOF token whenever called.

__init__(source: graphql.language.source.Source) → None

Given a Source object, this returns a Lexer for that source.

advance() → graphql.language.ast.Token
lookahead() → graphql.language.ast.Token
position_after_whitespace(body: str, start_position: int) → int

Go to next position after a whitespace.

Reads from body starting at start_position until it finds a non-whitespace character, then returns the position of that character for lexing.

read_block_string(start: int, line: int, col: int, prev: graphql.language.ast.Token) → graphql.language.ast.Token
read_comment(start: int, line: int, col: int, prev: graphql.language.ast.Token) → graphql.language.ast.Token

Read a comment token from the source file.

read_digits(start: int, char: str) → int

Return the new position in the source after reading digits.

read_name(start: int, line: int, col: int, prev: graphql.language.ast.Token) → graphql.language.ast.Token

Read an alphanumeric + underscore name from the source.

read_number(start: int, char: str, line: int, col: int, prev: graphql.language.ast.Token) → graphql.language.ast.Token

Reads a number token from the source file.

Either a float or an int depending on whether a decimal point appears.

read_string(start: int, line: int, col: int, prev: graphql.language.ast.Token) → graphql.language.ast.Token

Read a string token from the source file.

read_token(prev: graphql.language.ast.Token) → graphql.language.ast.Token

Get the next token from the source starting at the given position.

This skips over whitespace until it finds the next lexable token, then lexes punctuators immediately or calls the appropriate helper function for more complicated tokens.

graphql.language.parse(source: Union[graphql.language.source.Source, str], no_location=False, experimental_fragment_variables=False) → graphql.language.ast.DocumentNode

Given a GraphQL source, parse it into a Document.

Throws GraphQLError if a syntax error is encountered.

By default, the parser creates AST nodes that know the location in the source that they correspond to. The no_location option disables that behavior for performance or testing.

Experimental features:

If experimental_fragment_variables is set to True, the parser will understand and parse variable definitions contained in a fragment definition. They’ll be represented in the variable_definitions field of the FragmentDefinitionNode.

The syntax is identical to normal, query-defined variables. For example:

fragment A($var: Boolean = false) on T  {
  ...
}
graphql.language.parse_value(source: Union[graphql.language.source.Source, str], no_location=False, experimental_fragment_variables=False) → graphql.language.ast.ValueNode

Parse the AST for a given string containing a GraphQL value.

Throws GraphQLError if a syntax error is encountered.

This is useful within tools that operate upon GraphQL Values directly and in isolation of complete GraphQL documents.

Consider providing the results to the utility function: value_from_ast().

graphql.language.parse_type(source: Union[graphql.language.source.Source, str], no_location=False, experimental_fragment_variables=False) → graphql.language.ast.TypeNode

Parse the AST for a given string containing a GraphQL Type.

Throws GraphQLError if a syntax error is encountered.

This is useful within tools that operate upon GraphQL Types directly and in isolation of complete GraphQL documents.

Consider providing the results to the utility function: type_from_ast().

graphql.language.print_ast(ast: graphql.language.ast.Node) → str

Convert an AST into a string.

The conversion is done using a set of reasonable formatting rules.

class graphql.language.Source(body: str, name: str = None, location_offset: graphql.language.location.SourceLocation = None)

Bases: object

A representation of source input to GraphQL.

__init__(body: str, name: str = None, location_offset: graphql.language.location.SourceLocation = None) → None

Initialize source input.

name and location_offset are optional. They are useful for clients who store GraphQL documents in source files; for example, if the GraphQL input starts at line 40 in a file named Foo.graphql, it might be useful for name to be “Foo.graphql” and location to be (40, 0).

line and column in location_offset are 1-indexed

body
get_location(position: int) → graphql.language.location.SourceLocation
location_offset
name
graphql.language.visit(root: graphql.language.ast.Node, visitor: graphql.language.visitor.Visitor, visitor_keys=None) → Any

Visit each node in an AST.

visit() will walk through an AST using a depth first traversal, calling the visitor’s enter methods at each node in the traversal, and calling the leave methods after visiting that node and all of its child nodes.

By returning different values from the enter and leave methods, the behavior of the visitor can be altered, including skipping over a sub-tree of the AST (by returning False), editing the AST by returning a value or None to remove the value, or to stop the whole traversal by returning BREAK.

When using visit() to edit an AST, the original AST will not be modified, and a new version of the AST with the changes applied will be returned from the visit function.

To customize the node attributes to be used for traversal, you can provide a dictionary visitor_keys mapping node kinds to node attributes.

class graphql.language.Visitor

Bases: object

Visitor that walks through an AST.

Visitors can define two generic methods “enter” and “leave”. The former will be called when a node is entered in the traversal, the latter is called after visiting the node and its child nodes. These methods have the following signature:

def enter(self, node, key, parent, path, ancestors):
    # The return value has the following meaning:
    # IDLE (None): no action
    # SKIP: skip visiting this node
    # BREAK: stop visiting altogether
    # REMOVE: delete this node
    # any other value: replace this node with the returned value
    return

def enter(self, node, key, parent, path, ancestors):
    # The return value has the following meaning:
    # IDLE (None) or SKIP: no action
    # BREAK: stop visiting altogether
    # REMOVE: delete this node
    # any other value: replace this node with the returned value
    return

The parameters have the following meaning:

Parameters
  • node – The current node being visiting.

  • key – The index or key to this node from the parent node or Array.

  • parent – the parent immediately above this node, which may be an Array.

  • path – The key path to get to this node from the root node.

  • ancestors – All nodes and Arrays visited before reaching parent of this node. These correspond to array indices in path. Note: ancestors includes arrays which contain the parent of visited node.

You can also define node kind specific methods by suffixing them with an underscore followed by the kind of the node to be visited. For instance, to visit field nodes, you would defined the methods enter_field() and/or leave_field(), with the same signature as above. If no kind specific method has been defined for a given node, the generic method is called.

BREAK = True
IDLE = None
REMOVE = Ellipsis
SKIP = False
__init__()

Initialize self. See help(type(self)) for accurate signature.

classmethod get_visit_fn(kind, is_leaving=False) → Callable

Get the visit function for the given node kind and direction.

class graphql.language.ParallelVisitor(visitors: Sequence[graphql.language.visitor.Visitor])

Bases: graphql.language.visitor.Visitor

A Visitor which delegates to many visitors to run in parallel.

Each visitor will be visited for each node before moving on.

If a prior visitor edits a node, no following visitors will see that node.

BREAK = True
IDLE = None
REMOVE = Ellipsis
SKIP = False
__init__(visitors: Sequence[graphql.language.visitor.Visitor]) → None

Create a new visitor from the given list of parallel visitors.

enter(node, *args)
classmethod get_visit_fn(kind, is_leaving=False) → Callable

Get the visit function for the given node kind and direction.

leave(node, *args)
class graphql.language.TypeInfoVisitor(type_info: TypeInfo, visitor: graphql.language.visitor.Visitor)

Bases: graphql.language.visitor.Visitor

A visitor which maintains a provided TypeInfo.

BREAK = True
IDLE = None
REMOVE = Ellipsis
SKIP = False
__init__(type_info: TypeInfo, visitor: graphql.language.visitor.Visitor) → None

Initialize self. See help(type(self)) for accurate signature.

enter(node, *args)
classmethod get_visit_fn(kind, is_leaving=False) → Callable

Get the visit function for the given node kind and direction.

leave(node, *args)
class graphql.language.Location

Bases: tuple

AST Location

Contains a range of UTF-8 character offsets and token references that identify the region of the source from which the AST derived.

__init__()

Initialize self. See help(type(self)) for accurate signature.

_asdict()

Return a new OrderedDict which maps field names to their values.

_field_defaults = {}
_field_types = {'end': <class 'int'>, 'end_token': <class 'graphql.language.ast.Token'>, 'source': <class 'graphql.language.source.Source'>, 'start': <class 'int'>, 'start_token': <class 'graphql.language.ast.Token'>}
_fields = ('start', 'end', 'start_token', 'end_token', 'source')
_fields_defaults = {}
classmethod _make(iterable)

Make a new Location object from a sequence or iterable

_replace(**kwds)

Return a new Location object replacing specified fields with new values

count()

Return number of occurrences of value.

property end

Alias for field number 1

property end_token

Alias for field number 3

index()

Return first index of value.

Raises ValueError if the value is not present.

property source

Alias for field number 4

property start

Alias for field number 0

property start_token

Alias for field number 2

class graphql.language.Token(kind: graphql.language.token_kind.TokenKind, start: int, end: int, line: int, column: int, prev: Optional[graphql.language.ast.Token] = None, value: str = None)

Bases: object

__init__(kind: graphql.language.token_kind.TokenKind, start: int, end: int, line: int, column: int, prev: Optional[graphql.language.ast.Token] = None, value: str = None) → None

Initialize self. See help(type(self)) for accurate signature.

column
property desc

A helper property to describe a token as a string for debugging

end
kind
line
next
prev
start
value
class graphql.language.DirectiveLocation

Bases: enum.Enum

The enum type representing the directive location values.

ARGUMENT_DEFINITION = 'argument definition'
ENUM = 'enum'
ENUM_VALUE = 'enum value'
FIELD = 'field'
FIELD_DEFINITION = 'field definition'
FRAGMENT_DEFINITION = 'fragment definition'
FRAGMENT_SPREAD = 'fragment spread'
INLINE_FRAGMENT = 'inline fragment'
INPUT_FIELD_DEFINITION = 'input field definition'
INPUT_OBJECT = 'input object'
INTERFACE = 'interface'
MUTATION = 'mutation'
OBJECT = 'object'
QUERY = 'query'
SCALAR = 'scalar'
SCHEMA = 'schema'
SUBSCRIPTION = 'subscription'
UNION = 'union'
VARIABLE_DEFINITION = 'variable definition'
class graphql.language.Node(**kwargs)

Bases: object

AST nodes

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc']
kind = 'ast'
loc
class graphql.language.NameNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'value']
kind = 'name'
loc
value
class graphql.language.DocumentNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

definitions
keys = ['loc', 'definitions']
kind = 'document'
loc
class graphql.language.DefinitionNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc']
kind = 'definition'
loc
class graphql.language.ExecutableDefinitionNode(**kwargs)

Bases: graphql.language.ast.DefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'name', 'directives', 'variable_definitions', 'selection_set']
kind = 'executable_definition'
loc
name
selection_set
variable_definitions
class graphql.language.OperationDefinitionNode(**kwargs)

Bases: graphql.language.ast.ExecutableDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'name', 'directives', 'variable_definitions', 'selection_set', 'operation']
kind = 'operation_definition'
loc
name
operation
selection_set
variable_definitions
class graphql.language.OperationType

Bases: enum.Enum

An enumeration.

MUTATION = 'mutation'
QUERY = 'query'
SUBSCRIPTION = 'subscription'
class graphql.language.VariableDefinitionNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

default_value
directives
keys = ['loc', 'variable', 'type', 'default_value', 'directives']
kind = 'variable_definition'
loc
type
variable
class graphql.language.VariableNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'name']
kind = 'variable'
loc
name
class graphql.language.SelectionSetNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'selections']
kind = 'selection_set'
loc
selections
class graphql.language.SelectionNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'directives']
kind = 'selection'
loc
class graphql.language.FieldNode(**kwargs)

Bases: graphql.language.ast.SelectionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

alias
arguments
directives
keys = ['loc', 'directives', 'alias', 'name', 'arguments', 'selection_set']
kind = 'field'
loc
name
selection_set
class graphql.language.ArgumentNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'name', 'value']
kind = 'argument'
loc
name
value
class graphql.language.FragmentSpreadNode(**kwargs)

Bases: graphql.language.ast.SelectionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'directives', 'name']
kind = 'fragment_spread'
loc
name
class graphql.language.InlineFragmentNode(**kwargs)

Bases: graphql.language.ast.SelectionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'directives', 'type_condition', 'selection_set']
kind = 'inline_fragment'
loc
selection_set
type_condition
class graphql.language.FragmentDefinitionNode(**kwargs)

Bases: graphql.language.ast.ExecutableDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'name', 'directives', 'variable_definitions', 'selection_set', 'type_condition']
kind = 'fragment_definition'
loc
name
selection_set
type_condition
variable_definitions
class graphql.language.ValueNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc']
kind = 'value'
loc
class graphql.language.IntValueNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'value']
kind = 'int_value'
loc
value
class graphql.language.FloatValueNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'value']
kind = 'float_value'
loc
value
class graphql.language.StringValueNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

block
keys = ['loc', 'value', 'block']
kind = 'string_value'
loc
value
class graphql.language.BooleanValueNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'value']
kind = 'boolean_value'
loc
value
class graphql.language.NullValueNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc']
kind = 'null_value'
loc
class graphql.language.EnumValueNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'value']
kind = 'enum_value'
loc
value
class graphql.language.ListValueNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'values']
kind = 'list_value'
loc
values
class graphql.language.ObjectValueNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

fields
keys = ['loc', 'fields']
kind = 'object_value'
loc
class graphql.language.ObjectFieldNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'name', 'value']
kind = 'object_field'
loc
name
value
class graphql.language.DirectiveNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

arguments
keys = ['loc', 'name', 'arguments']
kind = 'directive'
loc
name
class graphql.language.TypeNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc']
kind = 'type'
loc
class graphql.language.NamedTypeNode(**kwargs)

Bases: graphql.language.ast.TypeNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'name']
kind = 'named_type'
loc
name
class graphql.language.ListTypeNode(**kwargs)

Bases: graphql.language.ast.TypeNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'type']
kind = 'list_type'
loc
type
class graphql.language.NonNullTypeNode(**kwargs)

Bases: graphql.language.ast.TypeNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'type']
kind = 'non_null_type'
loc
type
class graphql.language.TypeSystemDefinitionNode(**kwargs)

Bases: graphql.language.ast.DefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc']
kind = 'type_system_definition'
loc
class graphql.language.SchemaDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeSystemDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'directives', 'operation_types']
kind = 'schema_definition'
loc
operation_types
class graphql.language.OperationTypeDefinitionNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'operation', 'type']
kind = 'operation_type_definition'
loc
operation
type
class graphql.language.TypeDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeSystemDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

description
directives
keys = ['loc', 'description', 'name', 'directives']
kind = 'type_definition'
loc
name
class graphql.language.ScalarTypeDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

description
directives
keys = ['loc', 'description', 'name', 'directives']
kind = 'scalar_type_definition'
loc
name
class graphql.language.ObjectTypeDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

description
directives
fields
interfaces
keys = ['loc', 'description', 'name', 'directives', 'interfaces', 'fields']
kind = 'object_type_definition'
loc
name
class graphql.language.FieldDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

arguments
description
directives
keys = ['loc', 'description', 'name', 'directives', 'arguments', 'type']
kind = 'field_definition'
loc
name
type
class graphql.language.InputValueDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

default_value
description
directives
keys = ['loc', 'description', 'name', 'directives', 'type', 'default_value']
kind = 'input_value_definition'
loc
name
type
class graphql.language.InterfaceTypeDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

description
directives
fields
keys = ['loc', 'description', 'name', 'directives', 'fields']
kind = 'interface_type_definition'
loc
name
class graphql.language.UnionTypeDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

description
directives
keys = ['loc', 'description', 'name', 'directives', 'types']
kind = 'union_type_definition'
loc
name
types
class graphql.language.EnumTypeDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

description
directives
keys = ['loc', 'description', 'name', 'directives', 'values']
kind = 'enum_type_definition'
loc
name
values
class graphql.language.EnumValueDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

description
directives
keys = ['loc', 'description', 'name', 'directives']
kind = 'enum_value_definition'
loc
name
class graphql.language.InputObjectTypeDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

description
directives
fields
keys = ['loc', 'description', 'name', 'directives', 'fields']
kind = 'input_object_type_definition'
loc
name
class graphql.language.DirectiveDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeSystemDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

arguments
description
keys = ['loc', 'description', 'name', 'arguments', 'repeatable', 'locations']
kind = 'directive_definition'
loc
locations
name
repeatable
class graphql.language.SchemaExtensionNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'directives', 'operation_types']
kind = 'schema_extension'
loc
operation_types
class graphql.language.TypeExtensionNode(**kwargs)

Bases: graphql.language.ast.TypeSystemDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'name', 'directives']
kind = 'type_extension'
loc
name
class graphql.language.ScalarTypeExtensionNode(**kwargs)

Bases: graphql.language.ast.TypeExtensionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'name', 'directives']
kind = 'scalar_type_extension'
loc
name
class graphql.language.ObjectTypeExtensionNode(**kwargs)

Bases: graphql.language.ast.TypeExtensionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
fields
interfaces
keys = ['loc', 'name', 'directives', 'interfaces', 'fields']
kind = 'object_type_extension'
loc
name
class graphql.language.InterfaceTypeExtensionNode(**kwargs)

Bases: graphql.language.ast.TypeExtensionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
fields
keys = ['loc', 'name', 'directives', 'fields']
kind = 'interface_type_extension'
loc
name
class graphql.language.UnionTypeExtensionNode(**kwargs)

Bases: graphql.language.ast.TypeExtensionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'name', 'directives', 'types']
kind = 'union_type_extension'
loc
name
types
class graphql.language.EnumTypeExtensionNode(**kwargs)

Bases: graphql.language.ast.TypeExtensionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'name', 'directives', 'values']
kind = 'enum_type_extension'
loc
name
values
class graphql.language.InputObjectTypeExtensionNode(**kwargs)

Bases: graphql.language.ast.TypeExtensionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
fields
keys = ['loc', 'name', 'directives', 'fields']
kind = 'input_object_type_extension'
loc
name
graphql.language.is_definition_node(node: graphql.language.ast.Node) → bool
graphql.language.is_executable_definition_node(node: graphql.language.ast.Node) → bool
graphql.language.is_selection_node(node: graphql.language.ast.Node) → bool
graphql.language.is_value_node(node: graphql.language.ast.Node) → bool
graphql.language.is_type_node(node: graphql.language.ast.Node) → bool
graphql.language.is_type_system_definition_node(node: graphql.language.ast.Node) → bool
graphql.language.is_type_definition_node(node: graphql.language.ast.Node) → bool
graphql.language.is_type_system_extension_node(node: graphql.language.ast.Node) → bool
graphql.language.is_type_extension_node(node: graphql.language.ast.Node) → bool

AST

class graphql.language.Location

Bases: tuple

AST Location

Contains a range of UTF-8 character offsets and token references that identify the region of the source from which the AST derived.

__init__()

Initialize self. See help(type(self)) for accurate signature.

_asdict()

Return a new OrderedDict which maps field names to their values.

_field_defaults = {}
_field_types = {'end': <class 'int'>, 'end_token': <class 'graphql.language.ast.Token'>, 'source': <class 'graphql.language.source.Source'>, 'start': <class 'int'>, 'start_token': <class 'graphql.language.ast.Token'>}
_fields = ('start', 'end', 'start_token', 'end_token', 'source')
_fields_defaults = {}
classmethod _make(iterable)

Make a new Location object from a sequence or iterable

_replace(**kwds)

Return a new Location object replacing specified fields with new values

count()

Return number of occurrences of value.

property end

Alias for field number 1

property end_token

Alias for field number 3

index()

Return first index of value.

Raises ValueError if the value is not present.

property source

Alias for field number 4

property start

Alias for field number 0

property start_token

Alias for field number 2

class graphql.language.Node(**kwargs)

Bases: object

AST nodes

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc']
kind = 'ast'
loc

Each kind of AST node has its own class:

class graphql.language.ArgumentNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'name', 'value']
kind = 'argument'
loc
name
value
class graphql.language.BooleanValueNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'value']
kind = 'boolean_value'
loc
value
class graphql.language.DefinitionNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc']
kind = 'definition'
loc
class graphql.language.DirectiveDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeSystemDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

arguments
description
keys = ['loc', 'description', 'name', 'arguments', 'repeatable', 'locations']
kind = 'directive_definition'
loc
locations
name
repeatable
class graphql.language.DirectiveNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

arguments
keys = ['loc', 'name', 'arguments']
kind = 'directive'
loc
name
class graphql.language.DocumentNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

definitions
keys = ['loc', 'definitions']
kind = 'document'
loc
class graphql.language.EnumTypeDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

description
directives
keys = ['loc', 'description', 'name', 'directives', 'values']
kind = 'enum_type_definition'
loc
name
values
class graphql.language.EnumTypeExtensionNode(**kwargs)

Bases: graphql.language.ast.TypeExtensionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'name', 'directives', 'values']
kind = 'enum_type_extension'
loc
name
values
class graphql.language.EnumValueDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

description
directives
keys = ['loc', 'description', 'name', 'directives']
kind = 'enum_value_definition'
loc
name
class graphql.language.EnumValueNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'value']
kind = 'enum_value'
loc
value
class graphql.language.ExecutableDefinitionNode(**kwargs)

Bases: graphql.language.ast.DefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'name', 'directives', 'variable_definitions', 'selection_set']
kind = 'executable_definition'
loc
name
selection_set
variable_definitions
class graphql.language.FieldDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

arguments
description
directives
keys = ['loc', 'description', 'name', 'directives', 'arguments', 'type']
kind = 'field_definition'
loc
name
type
class graphql.language.FieldNode(**kwargs)

Bases: graphql.language.ast.SelectionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

alias
arguments
directives
keys = ['loc', 'directives', 'alias', 'name', 'arguments', 'selection_set']
kind = 'field'
loc
name
selection_set
class graphql.language.FloatValueNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'value']
kind = 'float_value'
loc
value
class graphql.language.FragmentDefinitionNode(**kwargs)

Bases: graphql.language.ast.ExecutableDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'name', 'directives', 'variable_definitions', 'selection_set', 'type_condition']
kind = 'fragment_definition'
loc
name
selection_set
type_condition
variable_definitions
class graphql.language.FragmentSpreadNode(**kwargs)

Bases: graphql.language.ast.SelectionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'directives', 'name']
kind = 'fragment_spread'
loc
name
class graphql.language.InlineFragmentNode(**kwargs)

Bases: graphql.language.ast.SelectionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'directives', 'type_condition', 'selection_set']
kind = 'inline_fragment'
loc
selection_set
type_condition
class graphql.language.InputObjectTypeDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

description
directives
fields
keys = ['loc', 'description', 'name', 'directives', 'fields']
kind = 'input_object_type_definition'
loc
name
class graphql.language.InputObjectTypeExtensionNode(**kwargs)

Bases: graphql.language.ast.TypeExtensionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
fields
keys = ['loc', 'name', 'directives', 'fields']
kind = 'input_object_type_extension'
loc
name
class graphql.language.InputValueDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

default_value
description
directives
keys = ['loc', 'description', 'name', 'directives', 'type', 'default_value']
kind = 'input_value_definition'
loc
name
type
class graphql.language.IntValueNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'value']
kind = 'int_value'
loc
value
class graphql.language.InterfaceTypeDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

description
directives
fields
keys = ['loc', 'description', 'name', 'directives', 'fields']
kind = 'interface_type_definition'
loc
name
class graphql.language.InterfaceTypeExtensionNode(**kwargs)

Bases: graphql.language.ast.TypeExtensionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
fields
keys = ['loc', 'name', 'directives', 'fields']
kind = 'interface_type_extension'
loc
name
class graphql.language.ListTypeNode(**kwargs)

Bases: graphql.language.ast.TypeNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'type']
kind = 'list_type'
loc
type
class graphql.language.ListValueNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'values']
kind = 'list_value'
loc
values
class graphql.language.NameNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'value']
kind = 'name'
loc
value
class graphql.language.NamedTypeNode(**kwargs)

Bases: graphql.language.ast.TypeNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'name']
kind = 'named_type'
loc
name
class graphql.language.NonNullTypeNode(**kwargs)

Bases: graphql.language.ast.TypeNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'type']
kind = 'non_null_type'
loc
type
class graphql.language.NullValueNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc']
kind = 'null_value'
loc
class graphql.language.ObjectFieldNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'name', 'value']
kind = 'object_field'
loc
name
value
class graphql.language.ObjectTypeDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

description
directives
fields
interfaces
keys = ['loc', 'description', 'name', 'directives', 'interfaces', 'fields']
kind = 'object_type_definition'
loc
name
class graphql.language.ObjectTypeExtensionNode(**kwargs)

Bases: graphql.language.ast.TypeExtensionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
fields
interfaces
keys = ['loc', 'name', 'directives', 'interfaces', 'fields']
kind = 'object_type_extension'
loc
name
class graphql.language.ObjectValueNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

fields
keys = ['loc', 'fields']
kind = 'object_value'
loc
class graphql.language.OperationDefinitionNode(**kwargs)

Bases: graphql.language.ast.ExecutableDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'name', 'directives', 'variable_definitions', 'selection_set', 'operation']
kind = 'operation_definition'
loc
name
operation
selection_set
variable_definitions
class graphql.language.OperationType

Bases: enum.Enum

An enumeration.

MUTATION = 'mutation'
QUERY = 'query'
SUBSCRIPTION = 'subscription'
class graphql.language.OperationTypeDefinitionNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'operation', 'type']
kind = 'operation_type_definition'
loc
operation
type
class graphql.language.ScalarTypeDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

description
directives
keys = ['loc', 'description', 'name', 'directives']
kind = 'scalar_type_definition'
loc
name
class graphql.language.ScalarTypeExtensionNode(**kwargs)

Bases: graphql.language.ast.TypeExtensionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'name', 'directives']
kind = 'scalar_type_extension'
loc
name
class graphql.language.SchemaDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeSystemDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'directives', 'operation_types']
kind = 'schema_definition'
loc
operation_types
class graphql.language.SchemaExtensionNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'directives', 'operation_types']
kind = 'schema_extension'
loc
operation_types
class graphql.language.SelectionNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'directives']
kind = 'selection'
loc
class graphql.language.SelectionSetNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'selections']
kind = 'selection_set'
loc
selections
class graphql.language.StringValueNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

block
keys = ['loc', 'value', 'block']
kind = 'string_value'
loc
value
class graphql.language.TypeDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeSystemDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

description
directives
keys = ['loc', 'description', 'name', 'directives']
kind = 'type_definition'
loc
name
class graphql.language.TypeExtensionNode(**kwargs)

Bases: graphql.language.ast.TypeSystemDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'name', 'directives']
kind = 'type_extension'
loc
name
class graphql.language.TypeNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc']
kind = 'type'
loc
class graphql.language.TypeSystemDefinitionNode(**kwargs)

Bases: graphql.language.ast.DefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc']
kind = 'type_system_definition'
loc
graphql.language.TypeSystemExtensionNode
class graphql.language.UnionTypeDefinitionNode(**kwargs)

Bases: graphql.language.ast.TypeDefinitionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

description
directives
keys = ['loc', 'description', 'name', 'directives', 'types']
kind = 'union_type_definition'
loc
name
types
class graphql.language.UnionTypeExtensionNode(**kwargs)

Bases: graphql.language.ast.TypeExtensionNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

directives
keys = ['loc', 'name', 'directives', 'types']
kind = 'union_type_extension'
loc
name
types
class graphql.language.ValueNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc']
kind = 'value'
loc
class graphql.language.VariableDefinitionNode(**kwargs)

Bases: graphql.language.ast.Node

__init__(**kwargs)

Initialize the node with the given keyword arguments.

default_value
directives
keys = ['loc', 'variable', 'type', 'default_value', 'directives']
kind = 'variable_definition'
loc
type
variable
class graphql.language.VariableNode(**kwargs)

Bases: graphql.language.ast.ValueNode

__init__(**kwargs)

Initialize the node with the given keyword arguments.

keys = ['loc', 'name']
kind = 'variable'
loc
name

Lexer

class graphql.language.Lexer(source: graphql.language.source.Source)

Bases: object

GraphQL Lexer

A Lexer is a stateful stream generator in that every time it is advanced, it returns the next token in the Source. Assuming the source lexes, the final Token emitted by the lexer will be of kind EOF, after which the lexer will repeatedly return the same EOF token whenever called.

__init__(source: graphql.language.source.Source) → None

Given a Source object, this returns a Lexer for that source.

advance() → graphql.language.ast.Token
lookahead() → graphql.language.ast.Token
position_after_whitespace(body: str, start_position: int) → int

Go to next position after a whitespace.

Reads from body starting at start_position until it finds a non-whitespace character, then returns the position of that character for lexing.

read_block_string(start: int, line: int, col: int, prev: graphql.language.ast.Token) → graphql.language.ast.Token
read_comment(start: int, line: int, col: int, prev: graphql.language.ast.Token) → graphql.language.ast.Token

Read a comment token from the source file.

read_digits(start: int, char: str) → int

Return the new position in the source after reading digits.

read_name(start: int, line: int, col: int, prev: graphql.language.ast.Token) → graphql.language.ast.Token

Read an alphanumeric + underscore name from the source.

read_number(start: int, char: str, line: int, col: int, prev: graphql.language.ast.Token) → graphql.language.ast.Token

Reads a number token from the source file.

Either a float or an int depending on whether a decimal point appears.

read_string(start: int, line: int, col: int, prev: graphql.language.ast.Token) → graphql.language.ast.Token

Read a string token from the source file.

read_token(prev: graphql.language.ast.Token) → graphql.language.ast.Token

Get the next token from the source starting at the given position.

This skips over whitespace until it finds the next lexable token, then lexes punctuators immediately or calls the appropriate helper function for more complicated tokens.

class graphql.language.TokenKind

Bases: enum.Enum

The different kinds of tokens that the lexer emits

AMP = '&'
AT = '@'
BANG = '!'
BLOCK_STRING = 'BlockString'
BRACE_L = '{'
BRACE_R = '}'
BRACKET_L = '['
BRACKET_R = ']'
COLON = ':'
COMMENT = 'Comment'
DOLLAR = '$'
EOF = '<EOF>'
EQUALS = '='
FLOAT = 'Float'
INT = 'Int'
NAME = 'Name'
PAREN_L = '('
PAREN_R = ')'
PIPE = '|'
SOF = '<SOF>'
SPREAD = '...'
STRING = 'String'
class graphql.language.Token(kind: graphql.language.token_kind.TokenKind, start: int, end: int, line: int, column: int, prev: Optional[graphql.language.ast.Token] = None, value: str = None)

Bases: object

__init__(kind: graphql.language.token_kind.TokenKind, start: int, end: int, line: int, column: int, prev: Optional[graphql.language.ast.Token] = None, value: str = None) → None

Initialize self. See help(type(self)) for accurate signature.

column
property desc

A helper property to describe a token as a string for debugging

end
kind
line
next
prev
start
value

Location

graphql.language.get_location(source: Source, position: int) → graphql.language.location.SourceLocation

Get the line and column for a character position in the source.

Takes a Source and a UTF-8 character offset, and returns the corresponding line and column as a SourceLocation.

class graphql.language.SourceLocation

Bases: tuple

Represents a location in a Source.

__init__()

Initialize self. See help(type(self)) for accurate signature.

_asdict()

Return a new OrderedDict which maps field names to their values.

_field_defaults = {}
_field_types = {'column': <class 'int'>, 'line': <class 'int'>}
_fields = ('line', 'column')
_fields_defaults = {}
classmethod _make(iterable)

Make a new SourceLocation object from a sequence or iterable

_replace(**kwds)

Return a new SourceLocation object replacing specified fields with new values

property column

Alias for field number 1

count()

Return number of occurrences of value.

property formatted
index()

Return first index of value.

Raises ValueError if the value is not present.

property line

Alias for field number 0

graphql.language.print_location(location: graphql.language.ast.Location) → str

Render a helpful description of the location in the GraphQL Source document.

Parser

graphql.language.parse(source: Union[graphql.language.source.Source, str], no_location=False, experimental_fragment_variables=False) → graphql.language.ast.DocumentNode

Given a GraphQL source, parse it into a Document.

Throws GraphQLError if a syntax error is encountered.

By default, the parser creates AST nodes that know the location in the source that they correspond to. The no_location option disables that behavior for performance or testing.

Experimental features:

If experimental_fragment_variables is set to True, the parser will understand and parse variable definitions contained in a fragment definition. They’ll be represented in the variable_definitions field of the FragmentDefinitionNode.

The syntax is identical to normal, query-defined variables. For example:

fragment A($var: Boolean = false) on T  {
  ...
}
graphql.language.parse_type(source: Union[graphql.language.source.Source, str], no_location=False, experimental_fragment_variables=False) → graphql.language.ast.TypeNode

Parse the AST for a given string containing a GraphQL Type.

Throws GraphQLError if a syntax error is encountered.

This is useful within tools that operate upon GraphQL Types directly and in isolation of complete GraphQL documents.

Consider providing the results to the utility function: type_from_ast().

graphql.language.parse_value(source: Union[graphql.language.source.Source, str], no_location=False, experimental_fragment_variables=False) → graphql.language.ast.ValueNode

Parse the AST for a given string containing a GraphQL value.

Throws GraphQLError if a syntax error is encountered.

This is useful within tools that operate upon GraphQL Values directly and in isolation of complete GraphQL documents.

Consider providing the results to the utility function: value_from_ast().

Source

class graphql.language.Source(body: str, name: str = None, location_offset: graphql.language.location.SourceLocation = None)

Bases: object

A representation of source input to GraphQL.

__init__(body: str, name: str = None, location_offset: graphql.language.location.SourceLocation = None) → None

Initialize source input.

name and location_offset are optional. They are useful for clients who store GraphQL documents in source files; for example, if the GraphQL input starts at line 40 in a file named Foo.graphql, it might be useful for name to be “Foo.graphql” and location to be (40, 0).

line and column in location_offset are 1-indexed

body
get_location(position: int) → graphql.language.location.SourceLocation
location_offset
name
graphql.language.print_source_location(source: graphql.language.source.Source, source_location: graphql.language.location.SourceLocation) → str

Render a helpful description of the location in the GraphQL Source document.

Visitor

graphql.language.visit(root: graphql.language.ast.Node, visitor: graphql.language.visitor.Visitor, visitor_keys=None) → Any

Visit each node in an AST.

visit() will walk through an AST using a depth first traversal, calling the visitor’s enter methods at each node in the traversal, and calling the leave methods after visiting that node and all of its child nodes.

By returning different values from the enter and leave methods, the behavior of the visitor can be altered, including skipping over a sub-tree of the AST (by returning False), editing the AST by returning a value or None to remove the value, or to stop the whole traversal by returning BREAK.

When using visit() to edit an AST, the original AST will not be modified, and a new version of the AST with the changes applied will be returned from the visit function.

To customize the node attributes to be used for traversal, you can provide a dictionary visitor_keys mapping node kinds to node attributes.

class graphql.language.Visitor

Bases: object

Visitor that walks through an AST.

Visitors can define two generic methods “enter” and “leave”. The former will be called when a node is entered in the traversal, the latter is called after visiting the node and its child nodes. These methods have the following signature:

def enter(self, node, key, parent, path, ancestors):
    # The return value has the following meaning:
    # IDLE (None): no action
    # SKIP: skip visiting this node
    # BREAK: stop visiting altogether
    # REMOVE: delete this node
    # any other value: replace this node with the returned value
    return

def enter(self, node, key, parent, path, ancestors):
    # The return value has the following meaning:
    # IDLE (None) or SKIP: no action
    # BREAK: stop visiting altogether
    # REMOVE: delete this node
    # any other value: replace this node with the returned value
    return

The parameters have the following meaning:

Parameters
  • node – The current node being visiting.

  • key – The index or key to this node from the parent node or Array.

  • parent – the parent immediately above this node, which may be an Array.

  • path – The key path to get to this node from the root node.

  • ancestors – All nodes and Arrays visited before reaching parent of this node. These correspond to array indices in path. Note: ancestors includes arrays which contain the parent of visited node.

You can also define node kind specific methods by suffixing them with an underscore followed by the kind of the node to be visited. For instance, to visit field nodes, you would defined the methods enter_field() and/or leave_field(), with the same signature as above. If no kind specific method has been defined for a given node, the generic method is called.

BREAK = True
IDLE = None
REMOVE = Ellipsis
SKIP = False
__init__()

Initialize self. See help(type(self)) for accurate signature.

classmethod get_visit_fn(kind, is_leaving=False) → Callable

Get the visit function for the given node kind and direction.

class graphql.language.ParallelVisitor(visitors: Sequence[graphql.language.visitor.Visitor])

Bases: graphql.language.visitor.Visitor

A Visitor which delegates to many visitors to run in parallel.

Each visitor will be visited for each node before moving on.

If a prior visitor edits a node, no following visitors will see that node.

BREAK = True
IDLE = None
REMOVE = Ellipsis
SKIP = False
__init__(visitors: Sequence[graphql.language.visitor.Visitor]) → None

Create a new visitor from the given list of parallel visitors.

enter(node, *args)
classmethod get_visit_fn(kind, is_leaving=False) → Callable

Get the visit function for the given node kind and direction.

leave(node, *args)
class graphql.language.TypeInfoVisitor(type_info: TypeInfo, visitor: graphql.language.visitor.Visitor)

Bases: graphql.language.visitor.Visitor

A visitor which maintains a provided TypeInfo.

BREAK = True
IDLE = None
REMOVE = Ellipsis
SKIP = False
__init__(type_info: TypeInfo, visitor: graphql.language.visitor.Visitor) → None

Initialize self. See help(type(self)) for accurate signature.

enter(node, *args)
classmethod get_visit_fn(kind, is_leaving=False) → Callable

Get the visit function for the given node kind and direction.

leave(node, *args)

The module also exports the following special symbols which can be used as return values in the Visitor methods to signal particular actions:

graphql.language.BREAK = True

This return value signals that no further nodes shall be visited.

graphql.language.SKIP = False

This return value signals that the current node shall be skipped.

graphql.language.REMOVE = Ellipsis

This return value signals that the current node shall be deleted.

graphql.language.IDLE = None

This return value signals that no additional action shall take place.