Skip to content

Commit ddabb22

Browse files
authored
Allow omitting optional arguments with serialize_variables=True (#338)
1 parent 5912f8f commit ddabb22

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

gql/utilities/serialize_variable_values.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ def serialize_value(type_: GraphQLType, value: Any) -> Any:
8585
return {
8686
field_name: serialize_value(field.type, value[field_name])
8787
for field_name, field in type_.fields.items()
88+
if field_name in value
8889
}
8990

9091
raise GraphQLError(f"Impossible to serialize value with type: {inspect(type_)}.")

tests/custom_scalars/test_datetime.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,10 @@ def resolve_seconds(root, _info, interval):
7575
IntervalInputType = GraphQLInputObjectType(
7676
"IntervalInput",
7777
fields={
78-
"start": GraphQLInputField(DatetimeScalar),
78+
"start": GraphQLInputField(
79+
DatetimeScalar,
80+
default_value=datetime(2021, 11, 12, 11, 58, 13, 461161),
81+
),
7982
"end": GraphQLInputField(DatetimeScalar),
8083
},
8184
)
@@ -216,3 +219,26 @@ def test_seconds():
216219
print(result)
217220

218221
assert result["seconds"] == 432000
222+
223+
224+
@pytest.mark.skipif(
225+
not hasattr(datetime, "fromisoformat"), reason="fromisoformat is new in Python 3.7+"
226+
)
227+
def test_seconds_omit_optional_start_argument():
228+
client = Client(schema=schema)
229+
230+
in_five_days = datetime.fromisoformat("2021-11-17T11:58:13.461161")
231+
232+
query = gql(
233+
"query seconds($interval: IntervalInput) {seconds(interval: $interval)}"
234+
)
235+
236+
variable_values = {"interval": {"end": in_five_days}}
237+
238+
result = client.execute(
239+
query, variable_values=variable_values, serialize_variables=True
240+
)
241+
242+
print(result)
243+
244+
assert result["seconds"] == 432000

0 commit comments

Comments
 (0)