From c9a4d5301c55e05c1bbcc6ed9bca8bbf610f2942 Mon Sep 17 00:00:00 2001 From: Erik Wrede Date: Sun, 27 Oct 2024 19:02:55 +0100 Subject: [PATCH 1/7] fix: use dateutil-parse for < 3.11 support --- graphene/types/datetime.py | 4 +++- graphene/types/tests/test_datetime.py | 17 +++++++++++++++++ setup.py | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/graphene/types/datetime.py b/graphene/types/datetime.py index 7bfd9bd2..d8388f8d 100644 --- a/graphene/types/datetime.py +++ b/graphene/types/datetime.py @@ -1,5 +1,7 @@ import datetime +from dateutil.parser import isoparse + from graphql.error import GraphQLError from graphql.language import StringValueNode, print_ast @@ -71,7 +73,7 @@ def parse_value(value): f"DateTime cannot represent non-string value: {repr(value)}" ) try: - return datetime.datetime.fromisoformat(value) + return isoparse(value) except ValueError: raise GraphQLError(f"DateTime cannot represent value: {repr(value)}") diff --git a/graphene/types/tests/test_datetime.py b/graphene/types/tests/test_datetime.py index 12927617..5d4cb604 100644 --- a/graphene/types/tests/test_datetime.py +++ b/graphene/types/tests/test_datetime.py @@ -226,6 +226,23 @@ def test_time_query_variable(sample_time): assert not result.errors assert result.data == {"time": isoformat} +def test_support_isoformat(): + isoformat = 20111104 + + # test time variable provided as Python time + result = schema.execute( + """query Test($time: Time){ time(at: $time) }""", + variables={"time": sample_time}, + ) + assert not result.errors + assert result.data == {"time": isoformat} + + # test time variable in string representation + result = schema.execute( + """query Test($time: Time){ time(at: $time) }""", variables={"time": isoformat} + ) + assert not result.errors + assert result.data == {"time": isoformat} def test_bad_variables(sample_date, sample_datetime, sample_time): def _test_bad_variables(type_, input_): diff --git a/setup.py b/setup.py index 33ceba50..b8db0e0c 100644 --- a/setup.py +++ b/setup.py @@ -84,6 +84,7 @@ def run_tests(self): "graphql-core>=3.1,<3.3", "graphql-relay>=3.1,<3.3", "typing-extensions>=4.7.1,<5", + "python-dateutil>=2.7.0,<3" ], tests_require=tests_require, extras_require={"test": tests_require, "dev": dev_requires}, From 3787d224a76bd0566294e968091b90d2d1c7e502 Mon Sep 17 00:00:00 2001 From: Erik Wrede Date: Sun, 27 Oct 2024 19:11:32 +0100 Subject: [PATCH 2/7] chore: lint --- graphene/types/tests/test_datetime.py | 2 ++ setup.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/graphene/types/tests/test_datetime.py b/graphene/types/tests/test_datetime.py index 5d4cb604..90f7a676 100644 --- a/graphene/types/tests/test_datetime.py +++ b/graphene/types/tests/test_datetime.py @@ -226,6 +226,7 @@ def test_time_query_variable(sample_time): assert not result.errors assert result.data == {"time": isoformat} + def test_support_isoformat(): isoformat = 20111104 @@ -244,6 +245,7 @@ def test_support_isoformat(): assert not result.errors assert result.data == {"time": isoformat} + def test_bad_variables(sample_date, sample_datetime, sample_time): def _test_bad_variables(type_, input_): result = schema.execute( diff --git a/setup.py b/setup.py index b8db0e0c..1b0762bb 100644 --- a/setup.py +++ b/setup.py @@ -83,8 +83,8 @@ def run_tests(self): install_requires=[ "graphql-core>=3.1,<3.3", "graphql-relay>=3.1,<3.3", + "python-dateutil>=2.7.0,<3", "typing-extensions>=4.7.1,<5", - "python-dateutil>=2.7.0,<3" ], tests_require=tests_require, extras_require={"test": tests_require, "dev": dev_requires}, From c97748e0aadc1247f2e1897abfd4e19f70ae5bbb Mon Sep 17 00:00:00 2001 From: Erik Wrede Date: Sun, 27 Oct 2024 19:13:41 +0100 Subject: [PATCH 3/7] chore: lint --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 1b0762bb..bddc76b3 100644 --- a/setup.py +++ b/setup.py @@ -51,6 +51,7 @@ def run_tests(self): "pytest-mock>=3,<4", "pytest-asyncio>=0.16,<2", "coveralls>=3.3,<5", + "types-python-dateutil>=2.8.1,<3", ] dev_requires = ["ruff==0.5.0"] + tests_require From b16374dacacd58877e22a4559c746afdcc8b98ef Mon Sep 17 00:00:00 2001 From: Erik Wrede Date: Sun, 27 Oct 2024 20:35:37 +0100 Subject: [PATCH 4/7] fix mypy deps --- setup.py | 3 +-- tox.ini | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index bddc76b3..329438ef 100644 --- a/setup.py +++ b/setup.py @@ -51,10 +51,9 @@ def run_tests(self): "pytest-mock>=3,<4", "pytest-asyncio>=0.16,<2", "coveralls>=3.3,<5", - "types-python-dateutil>=2.8.1,<3", ] -dev_requires = ["ruff==0.5.0"] + tests_require +dev_requires = ["ruff==0.5.0", "types-python-dateutil>=2.8.1,<3"] + tests_require setup( name="graphene", diff --git a/tox.ini b/tox.ini index 52a7e552..327bdb37 100644 --- a/tox.ini +++ b/tox.ini @@ -20,7 +20,7 @@ commands = [testenv:mypy] basepython = python3.10 deps = - mypy>=1.10,<2 + mypy>=1.10,<2, .[dev] commands = mypy graphene From ffd86e405c05fab67baeaf28f5200174033a4728 Mon Sep 17 00:00:00 2001 From: Erik Wrede Date: Sun, 27 Oct 2024 20:36:59 +0100 Subject: [PATCH 5/7] fix mypy deps --- setup.py | 2 +- tox.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 329438ef..52a5cdc5 100644 --- a/setup.py +++ b/setup.py @@ -53,7 +53,7 @@ def run_tests(self): "coveralls>=3.3,<5", ] -dev_requires = ["ruff==0.5.0", "types-python-dateutil>=2.8.1,<3"] + tests_require +dev_requires = ["ruff==0.5.0", "types-python-dateutil>=2.8.1,<3", "mypy>=1.10,<2"] + tests_require setup( name="graphene", diff --git a/tox.ini b/tox.ini index 327bdb37..a4a6b37e 100644 --- a/tox.ini +++ b/tox.ini @@ -20,7 +20,7 @@ commands = [testenv:mypy] basepython = python3.10 deps = - mypy>=1.10,<2, .[dev] + .[dev] commands = mypy graphene From 009bd8994f4cefbef309a5884aecc77435861725 Mon Sep 17 00:00:00 2001 From: Erik Wrede Date: Sun, 27 Oct 2024 20:38:06 +0100 Subject: [PATCH 6/7] chore: lint --- setup.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 52a5cdc5..61c99ea4 100644 --- a/setup.py +++ b/setup.py @@ -53,7 +53,11 @@ def run_tests(self): "coveralls>=3.3,<5", ] -dev_requires = ["ruff==0.5.0", "types-python-dateutil>=2.8.1,<3", "mypy>=1.10,<2"] + tests_require +dev_requires = [ + "ruff==0.5.0", + "types-python-dateutil>=2.8.1,<3", + "mypy>=1.10,<2", +] + tests_require setup( name="graphene", From b073e85ea337efc5473c5ef908592b76f15a2044 Mon Sep 17 00:00:00 2001 From: Erik Wrede Date: Sun, 27 Oct 2024 20:49:38 +0100 Subject: [PATCH 7/7] chore: fix test --- graphene/types/tests/test_datetime.py | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/graphene/types/tests/test_datetime.py b/graphene/types/tests/test_datetime.py index 90f7a676..bc992af5 100644 --- a/graphene/types/tests/test_datetime.py +++ b/graphene/types/tests/test_datetime.py @@ -228,22 +228,15 @@ def test_time_query_variable(sample_time): def test_support_isoformat(): - isoformat = 20111104 + isoformat = "2011-11-04T00:05:23Z" # test time variable provided as Python time result = schema.execute( - """query Test($time: Time){ time(at: $time) }""", - variables={"time": sample_time}, - ) - assert not result.errors - assert result.data == {"time": isoformat} - - # test time variable in string representation - result = schema.execute( - """query Test($time: Time){ time(at: $time) }""", variables={"time": isoformat} + """query DateTime($time: DateTime){ datetime(in: $time) }""", + variables={"time": isoformat}, ) assert not result.errors - assert result.data == {"time": isoformat} + assert result.data == {"datetime": "2011-11-04T00:05:23+00:00"} def test_bad_variables(sample_date, sample_datetime, sample_time):