]> 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:51 +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 2925a03b57352890cf6b6db434228decf511ef24..743c2e8878d73de31b4804e69133c83e48c93121 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 d5acb18710e21e6e494b065842912668786e573a..220b8d81a9fa2ccbcacc1cd51e33b89ad1e15ed0 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 268af6e49bbd2a28887805cf1a6f5bf5ef8b9c6d..40553a8c970e5c3c78cd50efb8fda8533906dc28 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'})