Item: Do not reset the mtime in __setitem__ unless the value actually changes

Unbreaks the remaining edit plugin tests.
This commit is contained in:
wordofglass 2017-08-22 18:21:47 +02:00
parent b903b44a0c
commit c4fb2d1955
2 changed files with 15 additions and 6 deletions

View file

@ -242,8 +242,9 @@ class Model(object):
else:
raise KeyError(key)
def __setitem__(self, key, value):
"""Assign the value for a field.
def _setitem(self, key, value):
"""Assign the value for a field, return whether new and old value
differ.
"""
# Choose where to place the value.
if key in self._fields:
@ -257,9 +258,17 @@ class Model(object):
# Assign value and possibly mark as dirty.
old_value = source.get(key)
source[key] = value
if self._always_dirty or old_value != value:
changed = old_value != value
if self._always_dirty or changed:
self._dirty.add(key)
return changed
def __setitem__(self, key, value):
"""Assign the value for a field.
"""
self._setitem(key, value)
def __delitem__(self, key):
"""Remove a flexible attribute from the model.
"""

View file

@ -547,10 +547,10 @@ class Item(LibModel):
elif isinstance(value, BLOB_TYPE):
value = bytes(value)
if key in MediaFile.fields():
self.mtime = 0 # Reset mtime on dirty.
changed = super(Item, self)._setitem(key, value)
super(Item, self).__setitem__(key, value)
if changed and key in MediaFile.fields():
self.mtime = 0 # Reset mtime on dirty.
def update(self, values):
"""Set all key/value pairs in the mapping. If mtime is