refactored datetime to_mongo, separating parsing from str + added test
This commit is contained in:
parent
7ed5829b2c
commit
27ea01ee05
@ -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.
|
||||
|
@ -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):
|
||||
|
Loading…
x
Reference in New Issue
Block a user