Skip to content

Commit

Permalink
Merge pull request #86 from cobalt-robotics/support-subclass-types
Browse files Browse the repository at this point in the history
Support subclasses of datetime, date, time
  • Loading branch information
necaris authored Jul 24, 2023
2 parents a7e0617 + c3e0d5c commit 45ac9e9
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 0 deletions.
6 changes: 6 additions & 0 deletions graphene_pydantic/converters.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,12 @@ def find_graphene_type(
return Enum.from_enum(type_)
elif issubclass(type_, str):
return String
elif issubclass(type_, datetime.datetime):
return DateTime
elif issubclass(type_, datetime.date):
return Date
elif issubclass(type_, datetime.time):
return Time
else:
raise ConversionError(
f"Don't know how to convert the Pydantic field {field!r} ({field.type_})"
Expand Down
13 changes: 13 additions & 0 deletions tests/test_converters.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,15 @@ def test_default_values():
assert field.type == graphene.String
assert field.default_value == "hi"

class DatetimeSubclass(datetime.datetime):
pass

class TimeSubclass(datetime.time):
pass

class DateSubclass(datetime.date):
pass


@pytest.mark.parametrize(
"input, expected",
Expand All @@ -60,6 +69,10 @@ def test_default_values():
((datetime.date, datetime.date(2019, 1, 1)), graphene.Date),
((datetime.time, datetime.time(15, 29)), graphene.Time),
((datetime.datetime, datetime.datetime(2019, 1, 1, 1, 37)), graphene.DateTime),
# Tests support for datetime mocking libraries like Freezegun
((DatetimeSubclass, DatetimeSubclass(2019, 1, 1, 1, 37)), graphene.DateTime),
((DateSubclass, DateSubclass(2019, 1, 1)), graphene.Date),
((TimeSubclass, TimeSubclass(15, 29)), graphene.Time),
],
)
def test_builtin_scalars(input, expected):
Expand Down

0 comments on commit 45ac9e9

Please sign in to comment.