21
21
GraphQLAbstractType ,
22
22
GraphQLCompositeType ,
23
23
GraphQLField ,
24
+ GraphQLInputType ,
24
25
GraphQLInterfaceType ,
25
26
GraphQLNamedType ,
26
27
GraphQLObjectType ,
@@ -293,6 +294,8 @@ def __deepcopy__(self, memo_: dict) -> GraphQLSchema:
293
294
directive if is_specified_directive (directive ) else copy (directive )
294
295
for directive in self .directives
295
296
]
297
+ for directive in directives :
298
+ remap_directive (directive , type_map )
296
299
return self .__class__ (
297
300
self .query_type and cast (GraphQLObjectType , type_map [self .query_type .name ]),
298
301
self .mutation_type
@@ -458,11 +461,7 @@ def remapped_type(type_: GraphQLType, type_map: TypeMap) -> GraphQLType:
458
461
459
462
def remap_named_type (type_ : GraphQLNamedType , type_map : TypeMap ) -> None :
460
463
"""Change all references in the given named type to use this type map."""
461
- if is_union_type (type_ ):
462
- type_ .types = [
463
- type_map .get (member_type .name , member_type ) for member_type in type_ .types
464
- ]
465
- elif is_object_type (type_ ) or is_interface_type (type_ ):
464
+ if is_object_type (type_ ) or is_interface_type (type_ ):
466
465
type_ .interfaces = [
467
466
type_map .get (interface_type .name , interface_type )
468
467
for interface_type in type_ .interfaces
@@ -477,9 +476,22 @@ def remap_named_type(type_: GraphQLNamedType, type_map: TypeMap) -> None:
477
476
arg .type = remapped_type (arg .type , type_map )
478
477
args [arg_name ] = arg
479
478
fields [field_name ] = field
479
+ elif is_union_type (type_ ):
480
+ type_ .types = [
481
+ type_map .get (member_type .name , member_type ) for member_type in type_ .types
482
+ ]
480
483
elif is_input_object_type (type_ ):
481
484
fields = type_ .fields
482
485
for field_name , field in fields .items ():
483
486
field = copy (field ) # noqa: PLW2901
484
487
field .type = remapped_type (field .type , type_map )
485
488
fields [field_name ] = field
489
+
490
+
491
+ def remap_directive (directive : GraphQLDirective , type_map : TypeMap ) -> None :
492
+ """Change all references in the given directive to use this type map."""
493
+ args = directive .args
494
+ for arg_name , arg in args .items ():
495
+ arg = copy (arg ) # noqa: PLW2901
496
+ arg .type = cast (GraphQLInputType , remapped_type (arg .type , type_map ))
497
+ args [arg_name ] = arg
0 commit comments