]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Added support for the ``dict.pop()`` and ``dict.popitem()`` methods
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 11 Dec 2015 16:21:46 +0000 (11:21 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 11 Dec 2015 16:21:46 +0000 (11:21 -0500)
to the :class:`.mutable.MutableDict` class.
fixes #3605

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

index f271832774e9a0a9cf50623d54242604ec83c32c..723e8b29094d0e855603c39c5f2789942004034a 100644 (file)
 .. changelog::
     :version: 1.0.10
 
+    .. change::
+        :tags: bug, ext
+        :tickets: 3605
+        :versions: 1.1.0b1
+
+        Added support for the ``dict.pop()`` and ``dict.popitem()`` methods
+        to the :class:`.mutable.MutableDict` class.
+
     .. change::
         :tags: change, tests
         :versions: 1.1.0b1
index 501b18f39903abf70d9ece947d77c4f848030a1e..88b653f60229f1888c48fb8e7322e5097b9fb8ac 100644 (file)
@@ -658,6 +658,16 @@ class MutableDict(Mutable, dict):
         dict.update(self, *a, **kw)
         self.changed()
 
+    def pop(self, key):
+        result = dict.pop(self, key)
+        self.changed()
+        return result
+
+    def popitem(self):
+        result = dict.popitem(self)
+        self.changed()
+        return result
+
     def clear(self):
         dict.clear(self)
         self.changed()
index a6bcdc47f025383b1616a09925cee8b189d2fe1e..ed97a0d92b73a8d79721e2bb7d9091155b69836c 100644 (file)
@@ -136,6 +136,38 @@ class _MutableDictTestBase(_MutableDictTestFixture):
 
         eq_(f1.data, {'a': 'z'})
 
+    def test_pop(self):
+        sess = Session()
+
+        f1 = Foo(data={'a': 'b', 'c': 'd'})
+        sess.add(f1)
+        sess.commit()
+
+        eq_(f1.data.pop('a'), 'b')
+        sess.commit()
+
+        eq_(f1.data, {'c': 'd'})
+
+    def test_popitem(self):
+        sess = Session()
+
+        orig = {'a': 'b', 'c': 'd'}
+
+        # the orig dict remains unchanged when we assign,
+        # but just making this future-proof
+        data = dict(orig)
+        f1 = Foo(data=data)
+        sess.add(f1)
+        sess.commit()
+
+        k, v = f1.data.popitem()
+        assert k in ('a', 'c')
+        orig.pop(k)
+
+        sess.commit()
+
+        eq_(f1.data, orig)
+
     def test_setdefault(self):
         sess = Session()