From: Mike Bayer Date: Mon, 3 Jun 2013 22:23:23 +0000 (-0400) Subject: Fixed bug where :class:`.MutableDict` didn't report a change event X-Git-Tag: rel_0_8_2~59 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c2bbdf7770337c8b2cfb4e7340d06c895b171b0b;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Fixed bug where :class:`.MutableDict` didn't report a change event when ``clear()`` was called. [ticket:2730] Conflicts: doc/build/changelog/changelog_09.rst --- diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst index ec0027e736..94ada9ac59 100644 --- a/doc/build/changelog/changelog_08.rst +++ b/doc/build/changelog/changelog_08.rst @@ -6,6 +6,13 @@ .. changelog:: :version: 0.8.2 + .. change:: + :tags: bug, ext, orm + :tickets: 2730 + + Fixed bug where :class:`.MutableDict` didn't report a change event + when ``clear()`` was called. + .. change:: :tags: bug, sql :tickets: 2738 diff --git a/lib/sqlalchemy/ext/mutable.py b/lib/sqlalchemy/ext/mutable.py index b1b851f723..ca27f172f3 100644 --- a/lib/sqlalchemy/ext/mutable.py +++ b/lib/sqlalchemy/ext/mutable.py @@ -616,6 +616,10 @@ class MutableDict(Mutable, dict): dict.__delitem__(self, key) self.changed() + def clear(self): + dict.clear(self) + self.changed() + @classmethod def coerce(cls, key, value): """Convert plain dictionary to MutableDict.""" diff --git a/test/ext/test_mutable.py b/test/ext/test_mutable.py index 4516e3ac2f..bda9e5382e 100644 --- a/test/ext/test_mutable.py +++ b/test/ext/test_mutable.py @@ -74,6 +74,18 @@ class _MutableDictTestBase(object): eq_(f1.data, {'a': 'c'}) + def test_clear(self): + sess = Session() + + f1 = Foo(data={'a': 'b'}) + sess.add(f1) + sess.commit() + + f1.data.clear() + sess.commit() + + eq_(f1.data, {}) + def test_replace(self): sess = Session() f1 = Foo(data={'a': 'b'})