Skip to content

Commit 49eecd3

Browse files
committed
Really Fix nested input arguments this time
1 parent 2b8f985 commit 49eecd3

File tree

3 files changed

+33
-19
lines changed

3 files changed

+33
-19
lines changed

gql/dsl.py

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

55
from graphql import (
66
ArgumentNode,
@@ -212,9 +212,6 @@ def __init__(
212212
self.ast_field: FieldNode = FieldNode(
213213
name=NameNode(value=name), arguments=FrozenList()
214214
)
215-
self.known_arg_serializers: Dict[
216-
GraphQLInputType, Optional[Serializer]
217-
] = dict()
218215
log.debug(f"Creating {self!r}")
219216

220217
@staticmethod
@@ -343,19 +340,19 @@ def _get_arg_serializer(self, arg_type: GraphQLInputType) -> Serializer:
343340
return self._get_arg_serializer(arg_type.of_type)
344341

345342
elif isinstance(arg_type, GraphQLInputObjectType):
346-
if arg_type in self.known_arg_serializers:
347-
return cast(Serializer, self.known_arg_serializers[arg_type])
348-
self.known_arg_serializers[arg_type] = None
349-
serializers = {
350-
k: self._get_arg_serializer(v.type) for k, v in arg_type.fields.items()
351-
}
352-
self.known_arg_serializers[arg_type] = lambda value: ObjectValueNode(
343+
return lambda value: ObjectValueNode(
353344
fields=FrozenList(
354-
ObjectFieldNode(name=NameNode(value=k), value=serializers[k](v))
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+
)
355353
for k, v in value.items()
356354
)
357355
)
358-
return cast(Serializer, self.known_arg_serializers[arg_type])
359356

360357
elif isinstance(arg_type, GraphQLList):
361358
inner_serializer = self._get_arg_serializer(arg_type.of_type)

tests/nested_input/schema.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import json
2+
13
from graphql import (
24
GraphQLArgument,
35
GraphQLField,
@@ -6,6 +8,7 @@
68
GraphQLInt,
79
GraphQLObjectType,
810
GraphQLSchema,
11+
GraphQLString,
912
)
1013

1114
nestedInput = GraphQLInputObjectType(
@@ -19,10 +22,10 @@
1922
queryType = GraphQLObjectType(
2023
"Query",
2124
fields=lambda: {
22-
"foo": GraphQLField(
25+
"echo": GraphQLField(
2326
args={"nested": GraphQLArgument(type_=nestedInput)},
24-
resolve=lambda *args, **kwargs: 1,
25-
type_=GraphQLInt,
27+
resolve=lambda *args, **kwargs: json.dumps(kwargs["nested"]),
28+
type_=GraphQLString,
2629
),
2730
},
2831
)

tests/nested_input/test_nested_input.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,20 @@ def client():
1515
return Client(schema=NestedInputSchema)
1616

1717

18-
def test_nested_input_with_new_get_arg_serializer(ds, client):
19-
query = dsl_gql(ds.Query.foo.args(nested={"foo": 1}))
20-
assert client.execute(query) == {"foo": 1}
18+
def test_nested_input(ds, client):
19+
query = dsl_gql(ds.Query.echo.args(nested={"foo": 1}))
20+
assert client.execute(query) == {"echo": '{"foo": 1}'}
21+
22+
23+
def test_nested_input_2(ds, client):
24+
query = dsl_gql(ds.Query.echo.args(nested={"foo": 1, "child": {"foo": 2}}))
25+
assert client.execute(query) == {"echo": '{"foo": 1, "child": {"foo": 2}}'}
26+
27+
28+
def test_nested_input_3(ds, client):
29+
query = dsl_gql(
30+
ds.Query.echo.args(nested={"foo": 1, "child": {"foo": 2, "child": {"foo": 3}}})
31+
)
32+
assert client.execute(query) == {
33+
"echo": '{"foo": 1, "child": {"foo": 2, "child": {"foo": 3}}}'
34+
}

0 commit comments

Comments
 (0)