From 295a4238470267b8c82282c44327005fe148340a Mon Sep 17 00:00:00 2001 From: Hanusz Leszek Date: Sun, 3 Jul 2022 20:30:56 +0200 Subject: [PATCH 1/2] DSL allow omitting optional arguments --- gql/utilities/serialize_variable_values.py | 1 + tests/custom_scalars/test_datetime.py | 28 +++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) 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..015d3c61 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.fromisoformat("2021-11-12T11: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 From 6be9fa8ba473afeee8c972b542a435349d7db807 Mon Sep 17 00:00:00 2001 From: Hanusz Leszek Date: Sun, 3 Jul 2022 20:39:11 +0200 Subject: [PATCH 2/2] fix fromisoformat for Python 3.6 --- tests/custom_scalars/test_datetime.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/custom_scalars/test_datetime.py b/tests/custom_scalars/test_datetime.py index 015d3c61..b3e717c5 100644 --- a/tests/custom_scalars/test_datetime.py +++ b/tests/custom_scalars/test_datetime.py @@ -77,7 +77,7 @@ def resolve_seconds(root, _info, interval): fields={ "start": GraphQLInputField( DatetimeScalar, - default_value=datetime.fromisoformat("2021-11-12T11:58:13.461161"), + default_value=datetime(2021, 11, 12, 11, 58, 13, 461161), ), "end": GraphQLInputField(DatetimeScalar), },