]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Fixed bug in mutable extension where :class:`.MutableDict` did not
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 14 May 2014 14:03:24 +0000 (10:03 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 14 May 2014 14:03:24 +0000 (10:03 -0400)
report change events for the ``setdefault()`` dictionary operation.
fixes #3051

doc/build/changelog/changelog_08.rst
lib/sqlalchemy/ext/mutable.py
test/ext/test_mutable.py

index 428d2b5760470e0bb89932472762e924f957482f..61ef96aff4ca66180ebf8544c8f60cf6d46549dd 100644 (file)
 .. 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
index 7869e888cc11c177234b5889c95597e790fd08eb..d2c686048e2891ca64dfe58a6571ae44ff09c5e9 100644 (file)
@@ -610,6 +610,11 @@ class MutableDict(Mutable, dict):
         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)
index 39cfa7ac518868643dd273fbe17225518079f111..9a030a4e998e6afcf762b46c946c2b1674ceccb2 100644 (file)
@@ -86,6 +86,23 @@ class _MutableDictTestBase(object):
 
         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'})