If values cant be compared mark as changed (#287)
This commit is contained in:
parent
5d7444c115
commit
85b81fb12a
@ -4,6 +4,7 @@ Changelog
|
|||||||
|
|
||||||
Changes in 0.8.X
|
Changes in 0.8.X
|
||||||
================
|
================
|
||||||
|
- If values cant be compared mark as changed (#287)
|
||||||
- Ensure as_pymongo() and to_json honour only() and exclude() (#293)
|
- Ensure as_pymongo() and to_json honour only() and exclude() (#293)
|
||||||
- Document serialization uses field order to ensure a strict order is set (#296)
|
- Document serialization uses field order to ensure a strict order is set (#296)
|
||||||
- DecimalField now stores as float not string (#289)
|
- DecimalField now stores as float not string (#289)
|
||||||
|
@ -81,13 +81,16 @@ class BaseField(object):
|
|||||||
def __set__(self, instance, value):
|
def __set__(self, instance, value):
|
||||||
"""Descriptor for assigning a value to a field in a document.
|
"""Descriptor for assigning a value to a field in a document.
|
||||||
"""
|
"""
|
||||||
changed = False
|
if instance._initialised:
|
||||||
if (self.name not in instance._data or
|
try:
|
||||||
instance._data[self.name] != value):
|
if (self.name not in instance._data or
|
||||||
changed = True
|
instance._data[self.name] != value):
|
||||||
instance._data[self.name] = value
|
instance._mark_as_changed(self.name)
|
||||||
if changed and instance._initialised:
|
except:
|
||||||
instance._mark_as_changed(self.name)
|
# Values cant be compared eg: naive and tz datetimes
|
||||||
|
# So mark it as changed
|
||||||
|
instance._mark_as_changed(self.name)
|
||||||
|
instance._data[self.name] = value
|
||||||
|
|
||||||
def error(self, message="", errors=None, field_name=None):
|
def error(self, message="", errors=None, field_name=None):
|
||||||
"""Raises a ValidationError.
|
"""Raises a ValidationError.
|
||||||
|
@ -409,6 +409,27 @@ class FieldTest(unittest.TestCase):
|
|||||||
log.time = '1pm'
|
log.time = '1pm'
|
||||||
self.assertRaises(ValidationError, log.validate)
|
self.assertRaises(ValidationError, log.validate)
|
||||||
|
|
||||||
|
def test_datetime_tz_aware_mark_as_changed(self):
|
||||||
|
from mongoengine import connection
|
||||||
|
|
||||||
|
# Reset the connections
|
||||||
|
connection._connection_settings = {}
|
||||||
|
connection._connections = {}
|
||||||
|
connection._dbs = {}
|
||||||
|
|
||||||
|
connect(db='mongoenginetest', tz_aware=True)
|
||||||
|
|
||||||
|
class LogEntry(Document):
|
||||||
|
time = DateTimeField()
|
||||||
|
|
||||||
|
LogEntry.drop_collection()
|
||||||
|
|
||||||
|
LogEntry(time=datetime.datetime(2013, 1, 1, 0, 0, 0)).save()
|
||||||
|
|
||||||
|
log = LogEntry.objects.first()
|
||||||
|
log.time = datetime.datetime(2013, 1, 1, 0, 0, 0)
|
||||||
|
self.assertEqual(['time'], log._changed_fields)
|
||||||
|
|
||||||
def test_datetime(self):
|
def test_datetime(self):
|
||||||
"""Tests showing pymongo datetime fields handling of microseconds.
|
"""Tests showing pymongo datetime fields handling of microseconds.
|
||||||
Microseconds are rounded to the nearest millisecond and pre UTC
|
Microseconds are rounded to the nearest millisecond and pre UTC
|
||||||
|
Loading…
x
Reference in New Issue
Block a user