refactored datetime to_mongo, separating parsing from str + added test

This commit is contained in:
Bastien Gérard 2019-03-02 23:44:33 +01:00
parent 7ed5829b2c
commit 27ea01ee05
2 changed files with 12 additions and 10 deletions

View File

@ -497,15 +497,18 @@ class DateTimeField(BaseField):
if not isinstance(value, six.string_types):
return None
return self._parse_datetime(value)
def _parse_datetime(self, value):
# Attempt to parse a datetime from a string
value = value.strip()
if not value:
return None
# Attempt to parse a datetime:
if dateutil:
try:
return dateutil.parser.parse(value)
except (TypeError, ValueError):
except (TypeError, ValueError, OverflowError):
return None
# split usecs, because they are not recognized by strptime.

View File

@ -190,25 +190,24 @@ class TestDateTimeField(MongoDBTestCase):
log.time = '2019-05-16 21:42:57.123.456'
self.assertRaises(ValidationError, log.validate)
def test_parse_valid_datetime_str(self):
def test_parse_datetime_as_str(self):
class DTDoc(Document):
date = DateTimeField()
date_str = '2019-03-02 22:26:01'
# make sure that passing a parsable datetime works
dtd = DTDoc()
now = dt.datetime.utcnow()
dtd.date = str(now)
dtd.date = date_str
self.assertIsInstance(dtd.date, six.string_types)
dtd.save()
dtd.reload()
self.assertIsInstance(dtd.date, dt.datetime)
self.assertEqual(str(dtd.date), date_str)
self.assertNotEqual(dtd.date, now) # microseconds differ as its not stored in mongo
self.assertEqual(
dtd.date.strftime('%Y-%m-%d %H:%M:%S'),
now.strftime('%Y-%m-%d %H:%M:%S')
)
dtd.date = 'January 1st, 9999999999'
self.assertRaises(ValidationError, dtd.validate)
class TestDateTimeTzAware(MongoDBTestCase):