Skip to content

Commit 2b8f985

Browse files
committed
fix _get_arg_serializer typing
1 parent ec57e46 commit 2b8f985

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

gql/dsl.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
FieldNode,
1010
GraphQLEnumType,
1111
GraphQLField,
12-
GraphQLInputField,
1312
GraphQLInputObjectType,
1413
GraphQLInputType,
1514
GraphQLInterfaceType,
@@ -330,16 +329,25 @@ def args(self, **kwargs) -> "DSLField":
330329
return self
331330

332331
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+
333342
if isinstance(arg_type, GraphQLNonNull):
334343
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+
337345
elif isinstance(arg_type, GraphQLInputObjectType):
338346
if arg_type in self.known_arg_serializers:
339347
return cast(Serializer, self.known_arg_serializers[arg_type])
340348
self.known_arg_serializers[arg_type] = None
341349
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()
343351
}
344352
self.known_arg_serializers[arg_type] = lambda value: ObjectValueNode(
345353
fields=FrozenList(
@@ -348,18 +356,24 @@ def _get_arg_serializer(self, arg_type: GraphQLInputType) -> Serializer:
348356
)
349357
)
350358
return cast(Serializer, self.known_arg_serializers[arg_type])
359+
351360
elif isinstance(arg_type, GraphQLList):
352361
inner_serializer = self._get_arg_serializer(arg_type.of_type)
353362
return lambda list_values: ListValueNode(
354363
values=FrozenList(inner_serializer(v) for v in list_values)
355364
)
365+
356366
elif isinstance(arg_type, GraphQLEnumType):
357367
return lambda value: EnumValueNode(
358368
value=cast(GraphQLEnumType, arg_type).serialize(value)
359369
)
360370

371+
# Impossible to be another type here
372+
assert isinstance(arg_type, GraphQLScalarType)
373+
361374
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),
363377
)
364378

365379
@property

0 commit comments

Comments
 (0)