From 2f1fe5468edaa0922e67ce659e4cf75b2cf35df5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Enrique=20Carrillo=20Pino?= Date: Fri, 12 May 2017 11:59:14 -0500 Subject: [PATCH] Fix empty string casted to datetime today in DateTimeField (#1533) --- mongoengine/fields.py | 4 ++++ tests/fields/fields.py | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/mongoengine/fields.py b/mongoengine/fields.py index c34fe1b1..0d402712 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -483,6 +483,10 @@ class DateTimeField(BaseField): if not isinstance(value, six.string_types): return None + value = value.strip() + if not value: + return None + # Attempt to parse a datetime: if dateutil: try: diff --git a/tests/fields/fields.py b/tests/fields/fields.py index 60c8370a..7a0ccc25 100644 --- a/tests/fields/fields.py +++ b/tests/fields/fields.py @@ -35,6 +35,28 @@ __all__ = ("FieldTest", "EmbeddedDocumentListFieldTestCase") class FieldTest(MongoDBTestCase): + def test_datetime_from_empty_string(self): + """ + Ensure an exception is raised when trying to + cast an empty string to datetime. + """ + class MyDoc(Document): + dt = DateTimeField() + + md = MyDoc(dt='') + self.assertRaises(ValidationError, md.save) + + def test_datetime_from_whitespace_string(self): + """ + Ensure an exception is raised when trying to + cast a whitespace-only string to datetime. + """ + class MyDoc(Document): + dt = DateTimeField() + + md = MyDoc(dt=' ') + self.assertRaises(ValidationError, md.save) + def test_default_values_nothing_set(self): """Ensure that default field values are used when creating a document.