Skip to content

Commit ee84825

Browse files
committed
GraphQLSchema: Remove unneeded recursion during type collection
Replicates graphql/graphql-js@cd9fc8e
1 parent e024793 commit ee84825

File tree

1 file changed

+17
-19
lines changed

1 file changed

+17
-19
lines changed

src/graphql/type/schema.py

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,13 @@
1212
GraphQLObjectType,
1313
GraphQLUnionType,
1414
GraphQLInputObjectType,
15-
GraphQLWrappingType,
15+
get_named_type,
1616
is_abstract_type,
1717
is_input_object_type,
1818
is_interface_type,
1919
is_named_type,
2020
is_object_type,
2121
is_union_type,
22-
is_wrapping_type,
2322
)
2423
from .directives import GraphQLDirective, specified_directives, is_directive
2524
from .introspection import introspection_types
@@ -257,36 +256,35 @@ def type_map_reducer(
257256
"""Reducer function for creating the type map from given types."""
258257
if not type_:
259258
return map_
260-
if is_wrapping_type(type_):
261-
return self.type_map_reducer(
262-
map_, cast(GraphQLWrappingType[GraphQLNamedType], type_).of_type
263-
)
264-
name = type_.name
259+
260+
named_type = get_named_type(type_)
261+
name = named_type.name
262+
265263
if name in map_:
266-
if map_[name] is not type_:
264+
if map_[name] is not named_type:
267265
raise TypeError(
268266
"Schema must contain uniquely named types but contains multiple"
269267
f" types named {name!r}."
270268
)
271269
return map_
272-
map_[name] = type_
270+
map_[name] = named_type
273271

274-
if is_union_type(type_):
275-
type_ = cast(GraphQLUnionType, type_)
276-
map_ = reduce(self.type_map_reducer, type_.types, map_)
272+
if is_union_type(named_type):
273+
named_type = cast(GraphQLUnionType, named_type)
274+
map_ = reduce(self.type_map_reducer, named_type.types, map_)
277275

278-
if is_object_type(type_):
279-
type_ = cast(GraphQLObjectType, type_)
280-
map_ = reduce(self.type_map_reducer, type_.interfaces, map_)
276+
if is_object_type(named_type):
277+
named_type = cast(GraphQLObjectType, named_type)
278+
map_ = reduce(self.type_map_reducer, named_type.interfaces, map_)
281279

282-
if is_object_type(type_) or is_interface_type(type_):
283-
for field in cast(GraphQLInterfaceType, type_).fields.values():
280+
if is_object_type(named_type) or is_interface_type(named_type):
281+
for field in cast(GraphQLInterfaceType, named_type).fields.values():
284282
types = [arg.type for arg in field.args.values()]
285283
map_ = reduce(self.type_map_reducer, types, map_)
286284
map_ = self.type_map_reducer(map_, field.type)
287285

288-
if is_input_object_type(type_):
289-
for field in cast(GraphQLInputObjectType, type_).fields.values():
286+
if is_input_object_type(named_type):
287+
for field in cast(GraphQLInputObjectType, named_type).fields.values():
290288
map_ = self.type_map_reducer(map_, field.type)
291289

292290
return map_

0 commit comments

Comments
 (0)