Skip to content

Commit 45ac9e9

Browse files
authored
Merge pull request #86 from cobalt-robotics/support-subclass-types
Support subclasses of datetime, date, time
2 parents a7e0617 + c3e0d5c commit 45ac9e9

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

graphene_pydantic/converters.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,12 @@ def find_graphene_type(
236236
return Enum.from_enum(type_)
237237
elif issubclass(type_, str):
238238
return String
239+
elif issubclass(type_, datetime.datetime):
240+
return DateTime
241+
elif issubclass(type_, datetime.date):
242+
return Date
243+
elif issubclass(type_, datetime.time):
244+
return Time
239245
else:
240246
raise ConversionError(
241247
f"Don't know how to convert the Pydantic field {field!r} ({field.type_})"

tests/test_converters.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,15 @@ def test_default_values():
4848
assert field.type == graphene.String
4949
assert field.default_value == "hi"
5050

51+
class DatetimeSubclass(datetime.datetime):
52+
pass
53+
54+
class TimeSubclass(datetime.time):
55+
pass
56+
57+
class DateSubclass(datetime.date):
58+
pass
59+
5160

5261
@pytest.mark.parametrize(
5362
"input, expected",
@@ -60,6 +69,10 @@ def test_default_values():
6069
((datetime.date, datetime.date(2019, 1, 1)), graphene.Date),
6170
((datetime.time, datetime.time(15, 29)), graphene.Time),
6271
((datetime.datetime, datetime.datetime(2019, 1, 1, 1, 37)), graphene.DateTime),
72+
# Tests support for datetime mocking libraries like Freezegun
73+
((DatetimeSubclass, DatetimeSubclass(2019, 1, 1, 1, 37)), graphene.DateTime),
74+
((DateSubclass, DateSubclass(2019, 1, 1)), graphene.Date),
75+
((TimeSubclass, TimeSubclass(15, 29)), graphene.Time),
6376
],
6477
)
6578
def test_builtin_scalars(input, expected):

0 commit comments

Comments
 (0)