Skip to content

Commit 5062860

Browse files
author
Chris ter Beke
authored
Merge pull request #16 from Ultimaker/CS-453_add_bson_support_to_datetime
CS-453 add bson support to datetime
2 parents c2dca8e + f288d99 commit 5062860

2 files changed

Lines changed: 26 additions & 0 deletions

File tree

jsonmodels/fields.py

100644100755
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,14 @@ def to_struct(self, value):
648648
return value.strftime(self.str_format)
649649
return value.isoformat()
650650

651+
def toBsonEncodable(self, value: datetime) -> datetime:
652+
"""
653+
Keep datetime object a datetime object, since pymongo supports that.
654+
"""
655+
if not isinstance(value, self.types):
656+
raise BadTypeError(value, self.types, is_list=False)
657+
return value
658+
651659
def parse_value(self, value):
652660
"""Parse string into instance of `datetime`."""
653661
if isinstance(value, datetime.datetime):

tests/test_fields.py

100644100755
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
from collections import OrderedDict
2+
import datetime
3+
from datetime import timezone
24

35
import pytest
46
from jsonmodels import models, fields, validators, errors
@@ -41,6 +43,22 @@ class Person(models.Base):
4143
assert field.parse_value([]) is False
4244

4345

46+
def test_datetime_field():
47+
field = fields.DateTimeField()
48+
49+
class Event(models.Base):
50+
when = field
51+
52+
event = Event()
53+
assert event.when is None
54+
event.when = datetime.datetime(2019, 10, 30, 1, 2, 3)
55+
assert field.toBsonEncodable(event.when) == \
56+
datetime.datetime(2019, 10, 30, 1, 2, 3)
57+
assert event.when == datetime.datetime(2019, 10, 30, 1, 2, 3)
58+
assert field.parse_value("2019-10-30T01:02:03.000000Z") == \
59+
datetime.datetime(2019, 10, 30, 1, 2, 3, tzinfo=timezone.utc)
60+
61+
4462
def test_custom_field():
4563
class NameField(fields.StringField):
4664
def __init__(self):

0 commit comments

Comments
 (0)