diff options
| author | Harshit Bansal | 2016-04-12 02:58:25 +0530 |
|---|---|---|
| committer | Barry Warsaw | 2016-04-18 17:13:01 -0400 |
| commit | 7559ce6dfdf2d569c91fea173968e46d6857d730 (patch) | |
| tree | 6443ba6deedf2dc315e964e8c9f35bddbd3b2f4b /src/mailman/model/subscriptions.py | |
| parent | d95f5d501623896ab239a94bda0954424a9d3127 (diff) | |
| download | mailman-7559ce6dfdf2d569c91fea173968e46d6857d730.tar.gz mailman-7559ce6dfdf2d569c91fea173968e46d6857d730.tar.zst mailman-7559ce6dfdf2d569c91fea173968e46d6857d730.zip | |
Diffstat (limited to 'src/mailman/model/subscriptions.py')
| -rw-r--r-- | src/mailman/model/subscriptions.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/mailman/model/subscriptions.py b/src/mailman/model/subscriptions.py index 3d2bcbeb0..301bfd7d9 100644 --- a/src/mailman/model/subscriptions.py +++ b/src/mailman/model/subscriptions.py @@ -21,6 +21,7 @@ from mailman import public from mailman.app.membership import delete_member from mailman.database.transaction import dbconnection from mailman.interfaces.listmanager import IListManager, NoSuchListError +from mailman.interfaces.member import MemberRole from mailman.interfaces.subscriptions import ( ISubscriptionService, TooManyMembersError) from mailman.interfaces.usermanager import IUserManager @@ -146,3 +147,29 @@ class SubscriptionService: raise NoSuchListError(list_id) # XXX for now, no notification or user acknowledgment. delete_member(mlist, email, False, False) + + @dbconnection + def unsubscribe_members(self, store, list_id, emails): + """See 'ISubscriptionService'.""" + successful = [] + unsuccessful = [] + 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) + for email in emails: + unsubscribed = False + q_addr = q_mem.join(Member._address).filter( + Address.email == email) + q_user = q_mem.join(Member._user).join( + User._preferred_address).filter(Address.email == email) + members = q_addr.union(q_user).all() + for member in members: + member.unsubscribe() + unsubscribed = True + if unsubscribed: + successful.append(email) + else: + unsuccessful.append(email) + return successful, unsuccessful |
