From: Jason Kirtland Date: Mon, 5 May 2008 17:08:00 +0000 (+0000) Subject: Fixed duplicate append event emission on repeated instrumented set.add() operations. X-Git-Tag: rel_0_5beta1~149 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=71e266f77e75a72281ccae4557af172595546f88;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Fixed duplicate append event emission on repeated instrumented set.add() operations. --- diff --git a/CHANGES b/CHANGES index dc7ff6a8ca..9fe24ca815 100644 --- a/CHANGES +++ b/CHANGES @@ -53,10 +53,13 @@ CHANGES - same as [ticket:1019] but repaired the non-labeled use case [ticket:1022] - - Adjusted class-member inspection durint attribute and + - Adjusted class-member inspection during attribute and collection instrumentation that could be problematic when integrating with other frameworks. + - Fixed duplicate append event emission on repeated + instrumented set.add() operations. + - declarative extension - Joined table inheritance mappers use a slightly relaxed function to create the "inherit condition" to the parent diff --git a/lib/sqlalchemy/orm/collections.py b/lib/sqlalchemy/orm/collections.py index ae4cb65cde..8067a030f7 100644 --- a/lib/sqlalchemy/orm/collections.py +++ b/lib/sqlalchemy/orm/collections.py @@ -1148,7 +1148,8 @@ def _set_decorators(): def add(fn): def add(self, value, _sa_initiator=None): - __set(self, value, _sa_initiator) + if value not in self: + __set(self, value, _sa_initiator) # testlib.pragma exempt:__hash__ fn(self, value) _tidy(add) @@ -1201,8 +1202,7 @@ def _set_decorators(): def update(fn): def update(self, value): for item in value: - if item not in self: - self.add(item) + self.add(item) _tidy(update) return update @@ -1211,8 +1211,7 @@ def _set_decorators(): if sautil.duck_type_collection(value) is not Set: return NotImplemented for item in value: - if item not in self: - self.add(item) + self.add(item) return self _tidy(__ior__) return __ior__ diff --git a/test/orm/collection.py b/test/orm/collection.py index 17c15876dd..708ba9c744 100644 --- a/test/orm/collection.py +++ b/test/orm/collection.py @@ -415,9 +415,12 @@ class CollectionsTest(TestBase): direct.remove(item) control.clear() - # assume add() is available for list tests addall(creator()) + e = creator() + addall(e) + addall(e) + if hasattr(direct, 'pop'): direct.pop() control.pop()