orjson icon indicating copy to clipboard operation
orjson copied to clipboard

Support freezegun fake types

Open nhairs opened this issue 9 months ago • 0 comments

freezegun is a utility library commonly used in testing to control the time. In doing so it causes the datetime library to produce fake types.

Although these types correctly identify themselves as instances of their relevant type, orjson does not identify them as such leading to errors.

Although it would be possible to use the default argument, this may not always be feasible for the calling library. It would be great if orjson could natively support these.

>>> import datetime
>>> import freezegun.api
>>> isinstance(freezegun.api.FakeDate(2024,5,5), datetime.date)
True
>>> isinstance(freezegun.api.FakeDatetime(2024, 5, 5), datetime.datetime)
True
>>> import datetime
>>> import freezegun.api
>>> import orjson
>>> now = datetime.datetime.now()
>>> orjson.dumps(now)
b'"2023-08-21T11:29:54.532301"'
>>> orjson.dumps(freezegun.api.datetime_to_fakedatetime(now))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Type is not JSON serializable: FakeDatetime

nhairs avatar May 05 '24 05:05 nhairs