From 38703acc299740ea52a73cca3e222bc050754223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastien=20G=C3=A9rard?= Date: Thu, 23 Jan 2020 23:33:23 +0100 Subject: [PATCH 1/2] fix complex datetime field invalid string set --- mongoengine/fields.py | 5 ++++- tests/fields/test_complex_datetime_field.py | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 7ec8c0f3..3eff0325 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -684,7 +684,10 @@ class ComplexDateTimeField(StringField): super(ComplexDateTimeField, self).__set__(instance, value) value = instance._data[self.name] if value is not None: - instance._data[self.name] = self._convert_from_datetime(value) + if isinstance(value, datetime.datetime): + instance._data[self.name] = self._convert_from_datetime(value) + else: + instance._data[self.name] = value def validate(self, value): value = self.to_python(value) diff --git a/tests/fields/test_complex_datetime_field.py b/tests/fields/test_complex_datetime_field.py index f0a6b96e..699032cc 100644 --- a/tests/fields/test_complex_datetime_field.py +++ b/tests/fields/test_complex_datetime_field.py @@ -4,6 +4,8 @@ import itertools import math import re +import pytest + from mongoengine import * from tests.utils import MongoDBTestCase @@ -191,3 +193,18 @@ class ComplexDateTimeFieldTest(MongoDBTestCase): fetched_log = Log.objects.with_id(log.id) assert fetched_log.timestamp >= NOW + + def test_setting_bad_value_does_not_raise_unless_validate_is_called(self): + # test regression of #2253 + + class Log(Document): + timestamp = ComplexDateTimeField() + + Log.drop_collection() + + log = Log(timestamp="garbage") + with pytest.raises(ValidationError): + log.validate() + + with pytest.raises(ValidationError): + log.save() From 2d6a4c4b9043d5cf4fe029870fceb9ecd47ce9af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastien=20G=C3=A9rard?= Date: Thu, 23 Jan 2020 23:36:03 +0100 Subject: [PATCH 2/2] update changelog --- docs/changelog.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index d924a2c1..11e6c063 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -7,6 +7,7 @@ Development =========== - (Fill this out as you fix issues and develop your features). - Add Mongo 4.0 to Travis +- Fix error when setting a string as a ComplexDateTimeField #2253 Changes in 0.19.1 =================