9
9
FieldNode ,
10
10
GraphQLEnumType ,
11
11
GraphQLField ,
12
- GraphQLInputField ,
13
12
GraphQLInputObjectType ,
14
13
GraphQLInputType ,
15
14
GraphQLInterfaceType ,
@@ -330,16 +329,25 @@ def args(self, **kwargs) -> "DSLField":
330
329
return self
331
330
332
331
def _get_arg_serializer (self , arg_type : GraphQLInputType ) -> Serializer :
332
+ """Recursive function used to get a argument serializer function
333
+ for a specific GraphQL input type.
334
+
335
+ The only possible sort of types are:
336
+ GraphQLScalarType, GraphQLEnumType, GraphQLInputObjectType, GraphQLWrappingType
337
+ GraphQLWrappingType can be GraphQLList or GraphQLNonNull
338
+ """
339
+
340
+ log .debug (f"_get_arg_serializer({ arg_type !r} )" )
341
+
333
342
if isinstance (arg_type , GraphQLNonNull ):
334
343
return self ._get_arg_serializer (arg_type .of_type )
335
- elif isinstance (arg_type , GraphQLInputField ):
336
- return self ._get_arg_serializer (arg_type .type )
344
+
337
345
elif isinstance (arg_type , GraphQLInputObjectType ):
338
346
if arg_type in self .known_arg_serializers :
339
347
return cast (Serializer , self .known_arg_serializers [arg_type ])
340
348
self .known_arg_serializers [arg_type ] = None
341
349
serializers = {
342
- k : self ._get_arg_serializer (v ) for k , v in arg_type .fields .items ()
350
+ k : self ._get_arg_serializer (v . type ) for k , v in arg_type .fields .items ()
343
351
}
344
352
self .known_arg_serializers [arg_type ] = lambda value : ObjectValueNode (
345
353
fields = FrozenList (
@@ -348,18 +356,24 @@ def _get_arg_serializer(self, arg_type: GraphQLInputType) -> Serializer:
348
356
)
349
357
)
350
358
return cast (Serializer , self .known_arg_serializers [arg_type ])
359
+
351
360
elif isinstance (arg_type , GraphQLList ):
352
361
inner_serializer = self ._get_arg_serializer (arg_type .of_type )
353
362
return lambda list_values : ListValueNode (
354
363
values = FrozenList (inner_serializer (v ) for v in list_values )
355
364
)
365
+
356
366
elif isinstance (arg_type , GraphQLEnumType ):
357
367
return lambda value : EnumValueNode (
358
368
value = cast (GraphQLEnumType , arg_type ).serialize (value )
359
369
)
360
370
371
+ # Impossible to be another type here
372
+ assert isinstance (arg_type , GraphQLScalarType )
373
+
361
374
return lambda value : ast_from_value (
362
- cast (GraphQLScalarType , arg_type ).serialize (value ), arg_type
375
+ cast (GraphQLScalarType , arg_type ).serialize (value ),
376
+ cast (GraphQLScalarType , arg_type ),
363
377
)
364
378
365
379
@property
0 commit comments