summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-07-16 13:42:23 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2014-07-16 13:42:23 -0400
commita7ed17e714377ec7e5a3da6d31c6ac92672d32bb (patch)
tree1e7d9a371d962ca912c0b3c05879f17a93f2ea08
parentf024ce3b2940cb5af8a4573d769952a4111d8c2e (diff)
downloadsqlalchemy-a7ed17e714377ec7e5a3da6d31c6ac92672d32bb.tar.gz
- backport #3093 to 0.8, fixes #3093
-rw-r--r--doc/build/changelog/changelog_08.rst14
-rw-r--r--lib/sqlalchemy/ext/mutable.py4
-rw-r--r--test/ext/test_mutable.py4
3 files changed, 18 insertions, 4 deletions
diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst
index 2352d33cb..6aa214883 100644
--- a/doc/build/changelog/changelog_08.rst
+++ b/doc/build/changelog/changelog_08.rst
@@ -123,6 +123,20 @@
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
diff --git a/lib/sqlalchemy/ext/mutable.py b/lib/sqlalchemy/ext/mutable.py
index 220b8d81a..411dcc922 100644
--- a/lib/sqlalchemy/ext/mutable.py
+++ b/lib/sqlalchemy/ext/mutable.py
@@ -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."""
diff --git a/test/ext/test_mutable.py b/test/ext/test_mutable.py
index 40553a8c9..88ab56be8 100644
--- a/test/ext/test_mutable.py
+++ b/test/ext/test_mutable.py
@@ -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'})