diff options
| author | Barry Warsaw | 2016-04-18 20:15:41 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2016-04-18 20:15:41 -0400 |
| commit | 10c13959b44db7046abf73c7eee54c2a4ecfa5a0 (patch) | |
| tree | ed3917e54537015e2bfe02f6d600930a298259a9 /src/mailman/model/subscriptions.py | |
| parent | 7559ce6dfdf2d569c91fea173968e46d6857d730 (diff) | |
| download | mailman-10c13959b44db7046abf73c7eee54c2a4ecfa5a0.tar.gz mailman-10c13959b44db7046abf73c7eee54c2a4ecfa5a0.tar.zst mailman-10c13959b44db7046abf73c7eee54c2a4ecfa5a0.zip | |
Diffstat (limited to 'src/mailman/model/subscriptions.py')
| -rw-r--r-- | src/mailman/model/subscriptions.py | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/mailman/model/subscriptions.py b/src/mailman/model/subscriptions.py index 301bfd7d9..443128edb 100644 --- a/src/mailman/model/subscriptions.py +++ b/src/mailman/model/subscriptions.py @@ -151,25 +151,26 @@ class SubscriptionService: @dbconnection def unsubscribe_members(self, store, list_id, emails): """See 'ISubscriptionService'.""" - successful = [] - unsuccessful = [] + success = set() + fail = set() mlist = getUtility(IListManager).get_by_list_id(list_id) if mlist is None: raise NoSuchListError(list_id) - q_mem = store.query(Member).filter( - Member.list_id == list_id, Member.role == MemberRole.member) + # Start with a query on the matching list-id and role. + q_member = store.query(Member).filter( + Member.list_id == list_id, + Member.role == MemberRole.member) for email in emails: unsubscribed = False - q_addr = q_mem.join(Member._address).filter( + # Join with a queries matching the email address and preferred + # address of any subscribed user. + q_address = q_member.join(Member._address).filter( Address.email == email) - q_user = q_mem.join(Member._user).join( + q_user = q_member.join(Member._user).join( User._preferred_address).filter(Address.email == email) - members = q_addr.union(q_user).all() + members = q_address.union(q_user).all() for member in members: member.unsubscribe() unsubscribed = True - if unsubscribed: - successful.append(email) - else: - unsuccessful.append(email) - return successful, unsuccessful + (success if unsubscribed else fail).add(email) + return success, fail |
