diff --git a/gql/utilities/serialize_variable_values.py b/gql/utilities/serialize_variable_values.py index 833df8bd..38ad1995 100644 --- a/gql/utilities/serialize_variable_values.py +++ b/gql/utilities/serialize_variable_values.py @@ -85,6 +85,7 @@ def serialize_value(type_: GraphQLType, value: Any) -> Any: return { field_name: serialize_value(field.type, value[field_name]) for field_name, field in type_.fields.items() + if field_name in value } raise GraphQLError(f"Impossible to serialize value with type: {inspect(type_)}.") diff --git a/tests/custom_scalars/test_datetime.py b/tests/custom_scalars/test_datetime.py index 169ce076..b3e717c5 100644 --- a/tests/custom_scalars/test_datetime.py +++ b/tests/custom_scalars/test_datetime.py @@ -75,7 +75,10 @@ def resolve_seconds(root, _info, interval): IntervalInputType = GraphQLInputObjectType( "IntervalInput", fields={ - "start": GraphQLInputField(DatetimeScalar), + "start": GraphQLInputField( + DatetimeScalar, + default_value=datetime(2021, 11, 12, 11, 58, 13, 461161), + ), "end": GraphQLInputField(DatetimeScalar), }, ) @@ -216,3 +219,26 @@ def test_seconds(): print(result) assert result["seconds"] == 432000 + + +@pytest.mark.skipif( + not hasattr(datetime, "fromisoformat"), reason="fromisoformat is new in Python 3.7+" +) +def test_seconds_omit_optional_start_argument(): + client = Client(schema=schema) + + in_five_days = datetime.fromisoformat("2021-11-17T11:58:13.461161") + + query = gql( + "query seconds($interval: IntervalInput) {seconds(interval: $interval)}" + ) + + variable_values = {"interval": {"end": in_five_days}} + + result = client.execute( + query, variable_values=variable_values, serialize_variables=True + ) + + print(result) + + assert result["seconds"] == 432000