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

graphql/core/validation/rules/overlapping_fields_can_be_merged.py

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

1616

1717
class OverlappingFieldsCanBeMerged(ValidationRule):
18+
__slots__ = 'compared_set',
19+
1820
def __init__(self, context):
1921
super(OverlappingFieldsCanBeMerged, self).__init__(context)
2022
self.compared_set = PairSet()

graphql/core/validation/rules/unique_argument_names.py

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

44

55
class UniqueArgumentNames(ValidationRule):
6+
__slots__ = 'known_arg_names',
7+
68
def __init__(self, context):
79
super(UniqueArgumentNames, self).__init__(context)
810
self.known_arg_names = {}

graphql/core/validation/rules/unique_fragment_names.py

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

44

55
class UniqueFragmentNames(ValidationRule):
6+
__slots__ = 'known_fragment_names',
7+
68
def __init__(self, context):
79
super(UniqueFragmentNames, self).__init__(context)
810
self.known_fragment_names = {}

graphql/core/validation/rules/unique_input_field_names.py

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

44

55
class UniqueInputFieldNames(ValidationRule):
6+
__slots__ = 'known_names',
7+
68
def __init__(self, context):
79
super(UniqueInputFieldNames, self).__init__(context)
810
self.known_names = {}

graphql/core/validation/rules/unique_operation_names.py

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

44

55
class UniqueOperationNames(ValidationRule):
6+
__slots__ = 'known_operation_names',
7+
68
def __init__(self, context):
79
super(UniqueOperationNames, self).__init__(context)
810
self.known_operation_names = {}

graphql/core/validation/rules/variables_in_allowed_position.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
class VariablesInAllowedPosition(ValidationRule):
1111
visit_spread_fragments = True
12+
__slots__ = 'var_def_map', 'visited_fragment_names'
1213

1314
def __init__(self, context):
1415
super(VariablesInAllowedPosition, self).__init__(context)

graphql/core/validation/visitor.py

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

55

66
class ValidationVisitor(Visitor):
7+
__slots__ = 'context', 'rules', 'total_rules', 'type_info', 'errors', 'ignore_children'
8+
79
def __init__(self, rules, context, type_info, errors):
810
self.context = context
911
self.rules = rules

0 commit comments

Comments
 (0)