summaryrefslogtreecommitdiff
path: root/src/mailman/model/subscriptions.py
diff options
context:
space:
mode:
authorBarry Warsaw2016-04-18 20:15:41 -0400
committerBarry Warsaw2016-04-18 20:15:41 -0400
commit10c13959b44db7046abf73c7eee54c2a4ecfa5a0 (patch)
treeed3917e54537015e2bfe02f6d600930a298259a9 /src/mailman/model/subscriptions.py
parent7559ce6dfdf2d569c91fea173968e46d6857d730 (diff)
downloadmailman-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.py25
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