report change events for the ``setdefault()`` dictionary operation.
fixes #3051
.. changelog::
:version: 0.8.7
+ .. change::
+ :tags: bug, ext
+ :versions: 0.9.5
+ :tickets: 3051
+
+ Fixed bug in mutable extension where :class:`.MutableDict` did not
+ report change events for the ``setdefault()`` dictionary operation.
+
.. change::
:tags: bug, mysql
:versions: 0.9.5
dict.__setitem__(self, key, value)
self.changed()
+
+ def setdefault(self, key, value):
+ dict.setdefault(self, key, value)
+ self.changed()
+
def __delitem__(self, key):
"""Detect dictionary del events and emit change events."""
dict.__delitem__(self, key)
eq_(f1.data, {})
+ def test_setdefault(self):
+ sess = Session()
+
+ f1 = Foo(data={'a': 'b'})
+ sess.add(f1)
+ sess.commit()
+
+ f1.data.setdefault('c', 'd')
+ sess.commit()
+
+ eq_(f1.data, {'a': 'b', 'c': 'd'})
+
+ f1.data.setdefault('c', 'q')
+ sess.commit()
+
+ eq_(f1.data, {'a': 'b', 'c': 'd'})
+
def test_replace(self):
sess = Session()
f1 = Foo(data={'a': 'b'})