Skip to content

Commit 53e6bc8

Browse files
committed
use __slots__ in more places to lower memory footprint by a bit.
1 parent 37ce0e4 commit 53e6bc8

17 files changed

+40
-10
lines changed

graphql/core/language/visitor.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ def visit(root, visitor, key_map=None):
152152

153153
@six.add_metaclass(VisitorMeta)
154154
class Visitor(object):
155+
__slots__ = ()
156+
155157
def enter(self, node, key, parent, path, ancestors):
156158
method = self._get_enter_handler(type(node))
157159
if method:

graphql/core/utils/type_info.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ def pop(lst):
2121
# noinspection PyPep8Naming
2222
@six.add_metaclass(visitor_meta.VisitorMeta)
2323
class TypeInfo(object):
24+
__slots__ = '_schema', '_type_stack', '_parent_type_stack', '_input_type_stack', '_field_def_stack', '_directive', \
25+
'_argument'
26+
2427
def __init__(self, schema):
2528
self._schema = schema
2629
self._type_stack = []

graphql/core/validation/__init__.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@
66
from .visitor import ValidationVisitor
77

88

9-
def validate(schema, ast, rules=None):
9+
def validate(schema, ast, rules=specified_rules):
1010
assert schema, 'Must provide schema'
1111
assert ast, 'Must provide document'
1212
assert isinstance(schema, GraphQLSchema)
13-
if rules is None:
14-
rules = specified_rules
1513
return visit_using_rules(schema, ast, rules)
1614

1715

graphql/core/validation/context.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33

44
class ValidationContext(object):
5+
__slots__ = '_schema', '_ast', '_type_info', '_fragments'
6+
57
def __init__(self, schema, ast, type_info):
68
self._schema = schema
79
self._ast = ast

graphql/core/validation/rules/base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,7 @@
22

33

44
class ValidationRule(Visitor):
5+
__slots__ = 'context',
6+
57
def __init__(self, context):
68
self.context = context

graphql/core/validation/rules/lone_anonymous_operation.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44

55

66
class LoneAnonymousOperation(ValidationRule):
7-
operation_count = 0
7+
__slots__ = 'operation_count',
88

99
def __init__(self, context):
10+
self.operation_count = 0
1011
super(LoneAnonymousOperation, self).__init__(context)
1112

1213
def enter_Document(self, node, key, parent, path, ancestors):

graphql/core/validation/rules/no_fragment_cycles.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66

77
class NoFragmentCycles(ValidationRule):
8+
__slots__ = 'spreads_in_fragment', 'known_to_lead_to_cycle'
9+
810
def __init__(self, context):
911
super(NoFragmentCycles, self).__init__(context)
1012
self.spreads_in_fragment = {
@@ -59,6 +61,8 @@ def gather_spreads(cls, node):
5961
return visitor.collect_fragment_spread_nodes()
6062

6163
class CollectFragmentSpreadNodesVisitor(Visitor):
64+
__slots__ = 'spread_nodes',
65+
6266
def __init__(self):
6367
self.spread_nodes = []
6468

graphql/core/validation/rules/no_undefined_variables.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44

55

66
class NoUndefinedVariables(ValidationRule):
7+
__slots__ = 'visited_fragment_names', 'defined_variable_names', 'operation',
78
visit_spread_fragments = True
8-
operation = None
99

1010
def __init__(self, context):
1111
self.visited_fragment_names = set()
1212
self.defined_variable_names = set()
13+
self.operation = None
14+
1315
super(NoUndefinedVariables, self).__init__(context)
1416

1517
@staticmethod

graphql/core/validation/rules/no_unused_fragments.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44

55
class NoUnusedFragments(ValidationRule):
6+
__slots__ = 'fragment_definitions', 'spreads_within_operation', 'fragment_adjacencies', 'spread_names'
7+
68
def __init__(self, context):
79
super(NoUnusedFragments, self).__init__(context)
810
self.fragment_definitions = []

graphql/core/validation/rules/no_unused_variables.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33

44

55
class NoUnusedVariables(ValidationRule):
6-
visited_fragment_names = None
7-
variable_definitions = None
8-
variable_name_used = None
9-
visit_spread_fragments = True
6+
__slots__ = 'visited_fragment_names', 'variable_definitions', 'variable_name_used', 'visit_spread_fragments'
107

118
def __init__(self, context):
9+
self.visited_fragment_names = None
10+
self.variable_definitions = None
11+
self.variable_name_used = None
12+
self.visit_spread_fragments = True
1213
super(NoUnusedVariables, self).__init__(context)
1314

1415
def enter_OperationDefinition(self, node, key, parent, path, ancestors):
@@ -24,7 +25,7 @@ def leave_OperationDefinition(self, node, key, parent, path, ancestors):
2425
)
2526
for variable_definition in self.variable_definitions
2627
if variable_definition.variable.name.value not in self.variable_name_used
27-
]
28+
]
2829

2930
if errors:
3031
return errors

0 commit comments

Comments
 (0)