Skip to content

Commit dbfc221

Browse files
committed
The _get_arg_serializer method is not needed...
1 parent 49eecd3 commit dbfc221

File tree

1 file changed

+25
-68
lines changed

1 file changed

+25
-68
lines changed

gql/dsl.py

Lines changed: 25 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,21 @@
11
import logging
22
from collections.abc import Iterable
3-
from typing import Any, Callable, List, Optional, Union, cast
3+
from typing import List, Optional, Union
44

55
from graphql import (
66
ArgumentNode,
77
DocumentNode,
8-
EnumValueNode,
98
FieldNode,
10-
GraphQLEnumType,
9+
GraphQLArgument,
1110
GraphQLField,
12-
GraphQLInputObjectType,
13-
GraphQLInputType,
1411
GraphQLInterfaceType,
15-
GraphQLList,
1612
GraphQLNamedType,
17-
GraphQLNonNull,
1813
GraphQLObjectType,
19-
GraphQLScalarType,
2014
GraphQLSchema,
21-
ListValueNode,
2215
NameNode,
23-
ObjectFieldNode,
24-
ObjectValueNode,
2516
OperationDefinitionNode,
2617
OperationType,
2718
SelectionSetNode,
28-
ValueNode,
2919
ast_from_value,
3020
print_ast,
3121
)
@@ -35,8 +25,6 @@
3525

3626
log = logging.getLogger(__name__)
3727

38-
Serializer = Callable[[Any], Optional[ValueNode]]
39-
4028

4129
def dsl_gql(*fields: "DSLField") -> DocumentNode:
4230
"""Given arguments of type :class:`DSLField` containing GraphQL requests,
@@ -311,67 +299,36 @@ def args(self, **kwargs) -> "DSLField":
311299
for this field.
312300
"""
313301

314-
added_args = []
315-
for name, value in kwargs.items():
316-
arg = self.field.args.get(name)
317-
if not arg:
318-
raise KeyError(f"Argument {name} does not exist in {self.field}.")
319-
arg_type_serializer = self._get_arg_serializer(arg.type)
320-
serialized_value = arg_type_serializer(value)
321-
added_args.append(
322-
ArgumentNode(name=NameNode(value=name), value=serialized_value)
323-
)
324-
self.ast_field.arguments = FrozenList(self.ast_field.arguments + added_args)
325-
log.debug(f"Added arguments {kwargs} in field {self!r})")
326-
return self
302+
assert self.ast_field.arguments is not None
327303

328-
def _get_arg_serializer(self, arg_type: GraphQLInputType) -> Serializer:
329-
"""Recursive function used to get a argument serializer function
330-
for a specific GraphQL input type.
304+
self.ast_field.arguments = FrozenList(
305+
self.ast_field.arguments
306+
+ [
307+
ArgumentNode(
308+
name=NameNode(value=name),
309+
value=ast_from_value(value, self._get_argument(name).type),
310+
)
311+
for name, value in kwargs.items()
312+
]
313+
)
331314

332-
The only possible sort of types are:
333-
GraphQLScalarType, GraphQLEnumType, GraphQLInputObjectType, GraphQLWrappingType
334-
GraphQLWrappingType can be GraphQLList or GraphQLNonNull
335-
"""
315+
log.debug(f"Added arguments {kwargs} in field {self!r})")
336316

337-
log.debug(f"_get_arg_serializer({arg_type!r})")
338-
339-
if isinstance(arg_type, GraphQLNonNull):
340-
return self._get_arg_serializer(arg_type.of_type)
341-
342-
elif isinstance(arg_type, GraphQLInputObjectType):
343-
return lambda value: ObjectValueNode(
344-
fields=FrozenList(
345-
ObjectFieldNode(
346-
name=NameNode(value=k),
347-
value=(
348-
self._get_arg_serializer(
349-
cast(GraphQLInputObjectType, arg_type).fields[k].type
350-
)
351-
)(v),
352-
)
353-
for k, v in value.items()
354-
)
355-
)
317+
return self
356318

357-
elif isinstance(arg_type, GraphQLList):
358-
inner_serializer = self._get_arg_serializer(arg_type.of_type)
359-
return lambda list_values: ListValueNode(
360-
values=FrozenList(inner_serializer(v) for v in list_values)
361-
)
319+
def _get_argument(self, name: str) -> GraphQLArgument:
320+
"""Method used to return the GraphQLArgument definition
321+
of an argument from its name.
362322
363-
elif isinstance(arg_type, GraphQLEnumType):
364-
return lambda value: EnumValueNode(
365-
value=cast(GraphQLEnumType, arg_type).serialize(value)
366-
)
323+
:raises KeyError: if the provided argument does not exist
324+
for this field.
325+
"""
326+
arg = self.field.args.get(name)
367327

368-
# Impossible to be another type here
369-
assert isinstance(arg_type, GraphQLScalarType)
328+
if arg is None:
329+
raise KeyError(f"Argument {name} does not exist in {self.field}.")
370330

371-
return lambda value: ast_from_value(
372-
cast(GraphQLScalarType, arg_type).serialize(value),
373-
cast(GraphQLScalarType, arg_type),
374-
)
331+
return arg
375332

376333
@property
377334
def type_name(self):

0 commit comments

Comments
 (0)