]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- backport #3093 to 0.8, fixes #3093
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 16 Jul 2014 17:42:23 +0000 (13:42 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 16 Jul 2014 17:42:23 +0000 (13:42 -0400)
doc/build/changelog/changelog_08.rst
lib/sqlalchemy/ext/mutable.py
test/ext/test_mutable.py

index 2352d33cb15864fc1daca9709594e064e39012bf..6aa2148832eb60dfdd871e10ab9d053339380eb3 100644 (file)
         Fixed bug in mutable extension where :class:`.MutableDict` did not
         report change events for the ``setdefault()`` dictionary operation.
 
+        .. seealso::
+
+            :ticket:`3093`
+
+    .. change::
+        :tags: bug, ext
+        :versions: 0.9.5, 1.0.0
+        :pullreq: bitbucket:24
+        :tickets: 3093, 3051
+
+        Fixed bug where :meth:`.MutableDict.setdefault` didn't return the
+        existing or new value (this bug was not released in any 0.8 version).
+        Pull request courtesy Thomas HervĂ©.
+
     .. change::
         :tags: bug, mysql
         :versions: 0.9.5, 1.0.0
index 220b8d81a9fa2ccbcacc1cd51e33b89ad1e15ed0..411dcc922726bff2dac6f5f4e8ce306c0e3f60db 100644 (file)
@@ -610,10 +610,10 @@ class MutableDict(Mutable, dict):
         dict.__setitem__(self, key, value)
         self.changed()
 
-
     def setdefault(self, key, value):
-        dict.setdefault(self, key, value)
+        result = dict.setdefault(self, key, value)
         self.changed()
+        return result
 
     def __delitem__(self, key):
         """Detect dictionary del events and emit change events."""
index 40553a8c970e5c3c78cd50efb8fda8533906dc28..88ab56be8604dfa33780485b9cb032071f7efda3 100644 (file)
@@ -93,12 +93,12 @@ class _MutableDictTestBase(object):
         sess.add(f1)
         sess.commit()
 
-        f1.data.setdefault('c', 'd')
+        eq_(f1.data.setdefault('c', 'd'), 'd')
         sess.commit()
 
         eq_(f1.data, {'a': 'b', 'c': 'd'})
 
-        f1.data.setdefault('c', 'q')
+        eq_(f1.data.setdefault('c', 'q'), 'd')
         sess.commit()
 
         eq_(f1.data, {'a': 'b', 'c': 'd'})