Skip to content

Commit ecbb566

Browse files
committed
Move default visitor key map from visit to ast module
Replicates graphql/graphql-js@a05dcfc
1 parent 386e66a commit ecbb566

File tree

2 files changed

+75
-75
lines changed

2 files changed

+75
-75
lines changed

src/graphql/language/ast.py

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from copy import copy, deepcopy
22
from enum import Enum
3-
from typing import Any, Dict, List, Optional, Union
3+
from typing import Any, Dict, List, Tuple, Optional, Union
44

55
from .source import Source
66
from .token_kind import TokenKind
@@ -69,6 +69,7 @@
6969
"UnionTypeExtensionNode",
7070
"EnumTypeExtensionNode",
7171
"InputObjectTypeExtensionNode",
72+
"QUERY_DOCUMENT_KEYS",
7273
]
7374

7475

@@ -219,6 +220,78 @@ class OperationType(Enum):
219220
SUBSCRIPTION = "subscription"
220221

221222

223+
# Default map from node kinds to their node attributes (internal)
224+
QUERY_DOCUMENT_KEYS: Dict[str, Tuple[str, ...]] = {
225+
"name": (),
226+
"document": ("definitions",),
227+
"operation_definition": (
228+
"name",
229+
"variable_definitions",
230+
"directives",
231+
"selection_set",
232+
),
233+
"variable_definition": ("variable", "type", "default_value", "directives"),
234+
"variable": ("name",),
235+
"selection_set": ("selections",),
236+
"field": ("alias", "name", "arguments", "directives", "selection_set"),
237+
"argument": ("name", "value"),
238+
"fragment_spread": ("name", "directives"),
239+
"inline_fragment": ("type_condition", "directives", "selection_set"),
240+
"fragment_definition": (
241+
# Note: fragment variable definitions are deprecated and will be removed in v3.3
242+
"name",
243+
"variable_definitions",
244+
"type_condition",
245+
"directives",
246+
"selection_set",
247+
),
248+
"list_value": ("values",),
249+
"object_value": ("fields",),
250+
"object_field": ("name", "value"),
251+
"directive": ("name", "arguments"),
252+
"named_type": ("name",),
253+
"list_type": ("type",),
254+
"non_null_type": ("type",),
255+
"schema_definition": ("description", "directives", "operation_types"),
256+
"operation_type_definition": ("type",),
257+
"scalar_type_definition": ("description", "name", "directives"),
258+
"object_type_definition": (
259+
"description",
260+
"name",
261+
"interfaces",
262+
"directives",
263+
"fields",
264+
),
265+
"field_definition": ("description", "name", "arguments", "type", "directives"),
266+
"input_value_definition": (
267+
"description",
268+
"name",
269+
"type",
270+
"default_value",
271+
"directives",
272+
),
273+
"interface_type_definition": (
274+
"description",
275+
"name",
276+
"interfaces",
277+
"directives",
278+
"fields",
279+
),
280+
"union_type_definition": ("description", "name", "directives", "types"),
281+
"enum_type_definition": ("description", "name", "directives", "values"),
282+
"enum_value_definition": ("description", "name", "directives"),
283+
"input_object_type_definition": ("description", "name", "directives", "fields"),
284+
"directive_definition": ("description", "name", "arguments", "locations"),
285+
"schema_extension": ("directives", "operation_types"),
286+
"scalar_type_extension": ("name", "directives"),
287+
"object_type_extension": ("name", "interfaces", "directives", "fields"),
288+
"interface_type_extension": ("name", "interfaces", "directives", "fields"),
289+
"union_type_extension": ("name", "directives", "types"),
290+
"enum_type_extension": ("name", "directives", "values"),
291+
"input_object_type_extension": ("name", "directives", "fields"),
292+
}
293+
294+
222295
# Base AST Node
223296

224297

src/graphql/language/visitor.py

Lines changed: 1 addition & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,17 @@
1515
from ..pyutils import inspect, snake_to_camel
1616
from . import ast
1717

18-
from .ast import Node
18+
from .ast import Node, QUERY_DOCUMENT_KEYS
1919

2020
__all__ = [
2121
"Visitor",
2222
"ParallelVisitor",
2323
"VisitorAction",
24-
"VisitorKeyMap",
2524
"visit",
2625
"BREAK",
2726
"SKIP",
2827
"REMOVE",
2928
"IDLE",
30-
"QUERY_DOCUMENT_KEYS",
3129
]
3230

3331

@@ -54,77 +52,6 @@ class VisitorActionEnum(Enum):
5452

5553
VisitorKeyMap = Dict[str, Tuple[str, ...]]
5654

57-
# Default map from visitor kinds to their traversable node attributes:
58-
QUERY_DOCUMENT_KEYS: VisitorKeyMap = {
59-
"name": (),
60-
"document": ("definitions",),
61-
"operation_definition": (
62-
"name",
63-
"variable_definitions",
64-
"directives",
65-
"selection_set",
66-
),
67-
"variable_definition": ("variable", "type", "default_value", "directives"),
68-
"variable": ("name",),
69-
"selection_set": ("selections",),
70-
"field": ("alias", "name", "arguments", "directives", "selection_set"),
71-
"argument": ("name", "value"),
72-
"fragment_spread": ("name", "directives"),
73-
"inline_fragment": ("type_condition", "directives", "selection_set"),
74-
"fragment_definition": (
75-
# Note: fragment variable definitions are deprecated and will be removed in v3.3
76-
"name",
77-
"variable_definitions",
78-
"type_condition",
79-
"directives",
80-
"selection_set",
81-
),
82-
"list_value": ("values",),
83-
"object_value": ("fields",),
84-
"object_field": ("name", "value"),
85-
"directive": ("name", "arguments"),
86-
"named_type": ("name",),
87-
"list_type": ("type",),
88-
"non_null_type": ("type",),
89-
"schema_definition": ("description", "directives", "operation_types"),
90-
"operation_type_definition": ("type",),
91-
"scalar_type_definition": ("description", "name", "directives"),
92-
"object_type_definition": (
93-
"description",
94-
"name",
95-
"interfaces",
96-
"directives",
97-
"fields",
98-
),
99-
"field_definition": ("description", "name", "arguments", "type", "directives"),
100-
"input_value_definition": (
101-
"description",
102-
"name",
103-
"type",
104-
"default_value",
105-
"directives",
106-
),
107-
"interface_type_definition": (
108-
"description",
109-
"name",
110-
"interfaces",
111-
"directives",
112-
"fields",
113-
),
114-
"union_type_definition": ("description", "name", "directives", "types"),
115-
"enum_type_definition": ("description", "name", "directives", "values"),
116-
"enum_value_definition": ("description", "name", "directives"),
117-
"input_object_type_definition": ("description", "name", "directives", "fields"),
118-
"directive_definition": ("description", "name", "arguments", "locations"),
119-
"schema_extension": ("directives", "operation_types"),
120-
"scalar_type_extension": ("name", "directives"),
121-
"object_type_extension": ("name", "interfaces", "directives", "fields"),
122-
"interface_type_extension": ("name", "interfaces", "directives", "fields"),
123-
"union_type_extension": ("name", "directives", "types"),
124-
"enum_type_extension": ("name", "directives", "values"),
125-
"input_object_type_extension": ("name", "directives", "fields"),
126-
}
127-
12855

12956
class EnterLeaveVisitor(NamedTuple):
13057
"""Visitor with functions for entering and leaving."""

0 commit comments

Comments
 (0)