diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-12-06 13:22:59 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-12-06 13:22:59 -0500 |
commit | a8dc787ff02490da17e8704ca564bf0c6b46c04d (patch) | |
tree | 0dcecf3d0622813824398c29b3bf44518adb131a | |
parent | b53349a40389b65066fdcdd9572dd8ee052da8ff (diff) | |
download | sqlalchemy-a8dc787ff02490da17e8704ca564bf0c6b46c04d.tar.gz |
- [feature] IdentitySet supports the - operator
as the same as difference(), handy when dealing
with Session.dirty etc. [ticket:2301]
-rw-r--r-- | CHANGES | 4 | ||||
-rw-r--r-- | lib/sqlalchemy/util/_collections.py | 3 | ||||
-rw-r--r-- | test/base/test_utils.py | 13 |
3 files changed, 20 insertions, 0 deletions
@@ -108,6 +108,10 @@ CHANGES this might be better as an exception but it's not critical either way. [ticket:2325] + - [feature] IdentitySet supports the - operator + as the same as difference(), handy when dealing + with Session.dirty etc. [ticket:2301] + - sql - [bug] related to [ticket:2316], made some adjustments to the change from [ticket:2261] diff --git a/lib/sqlalchemy/util/_collections.py b/lib/sqlalchemy/util/_collections.py index 3adbf9913..1a965e30d 100644 --- a/lib/sqlalchemy/util/_collections.py +++ b/lib/sqlalchemy/util/_collections.py @@ -376,6 +376,9 @@ class IdentitySet(object): def clear(self): self._members.clear() + def __sub__(self, other): + return self.difference(other) + def __cmp__(self, other): raise TypeError('cannot compare sets using cmp()') diff --git a/test/base/test_utils.py b/test/base/test_utils.py index 61c7ad9d6..3a7ce07f2 100644 --- a/test/base/test_utils.py +++ b/test/base/test_utils.py @@ -290,6 +290,19 @@ class IdentitySetTest(fixtures.TestBase): ids.add(data[i]) self.assert_eq(ids, data) + def test_dunder_sub(self): + IdentitySet = util.IdentitySet + o1, o2, o3 = object(), object(), object() + ids1 = IdentitySet([o1]) + ids2 = IdentitySet([o1, o2, o3]) + eq_( + ids2 - ids1, + IdentitySet([o2, o3]) + ) + + ids2 -= ids1 + eq_(ids2, IdentitySet([o2, o3])) + def test_basic_sanity(self): IdentitySet = util.IdentitySet |