summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBarry Warsaw2009-12-06 17:13:45 -0500
committerBarry Warsaw2009-12-06 17:13:45 -0500
commit795fda3981208376c6e0a9b42f412f9a4c158da4 (patch)
tree5af64b01fc5a5c47a4c3a91aefd0b9cf5ff92fa3 /src
parent49d5cdcd25627d639ca580a8d821414ef0be2c1f (diff)
downloadmailman-795fda3981208376c6e0a9b42f412f9a4c158da4.tar.gz
mailman-795fda3981208376c6e0a9b42f412f9a4c158da4.tar.zst
mailman-795fda3981208376c6e0a9b42f412f9a4c158da4.zip
Diffstat (limited to 'src')
-rw-r--r--src/mailman/commands/docs/membership.txt29
-rw-r--r--src/mailman/commands/eml_membership.py12
-rw-r--r--src/mailman/interfaces/roster.py8
3 files changed, 44 insertions, 5 deletions
diff --git a/src/mailman/commands/docs/membership.txt b/src/mailman/commands/docs/membership.txt
index c381be4ee..671d5109f 100644
--- a/src/mailman/commands/docs/membership.txt
+++ b/src/mailman/commands/docs/membership.txt
@@ -202,3 +202,32 @@ Anne is no longer a member of the mailing list.
>>> print mlist_2.members.get_member('anne@example.com')
None
+
+Anne does not need to leave a mailing list with the same email address she's
+subscribe with. Any of her registered and linked email addresses will do.
+
+ >>> from datetime import datetime
+ >>> anne = getUtility(IUserManager).get_user('anne@example.com')
+ >>> address = anne.register('anne.person@example.org')
+ >>> address.verified_on = datetime.now()
+
+ >>> results = Results()
+ >>> print mlist.members.get_member('anne@example.com')
+ <Member: Anne Person <anne@example.com>
+ on alpha@example.com as MemberRole.member>
+
+ >>> msg = message_from_string("""\
+ ... To: alpha-leave@example.com
+ ... From: anne.person@example.org
+ ...
+ ... """)
+ >>> print command.process(mlist, msg, {}, (), results)
+ ContinueProcessing.yes
+
+ >>> print unicode(results)
+ The results of your email command are provided below.
+ <BLANKLINE>
+ Anne Person <anne.person@example.org> left alpha@example.com
+ <BLANKLINE>
+ >>> print mlist.members.get_member('anne@example.com')
+ None
diff --git a/src/mailman/commands/eml_membership.py b/src/mailman/commands/eml_membership.py
index 7f61a4cb2..5b43276a8 100644
--- a/src/mailman/commands/eml_membership.py
+++ b/src/mailman/commands/eml_membership.py
@@ -153,8 +153,16 @@ class Leave:
print >> results, _(
'$self.name: No valid address found to unsubscribe')
return ContinueProcessing.no
- member = mlist.members.get_member(address)
- if member is None:
+ user = getUtility(IUserManager).get_user(address)
+ if user is None:
+ print >> results, _('No registered user for address: $address')
+ return ContinueProcessing.no
+ for user_address in user.addresses:
+ member = mlist.members.get_member(user_address.address)
+ if member is not None:
+ break
+ else:
+ # None of the user's addresses are subscribed to this mailing list.
print >> results, _(
'$self.name: $address is not a member of $mlist.fqdn_listname')
return ContinueProcessing.no
diff --git a/src/mailman/interfaces/roster.py b/src/mailman/interfaces/roster.py
index 9fb648be1..d729f232b 100644
--- a/src/mailman/interfaces/roster.py
+++ b/src/mailman/interfaces/roster.py
@@ -54,8 +54,10 @@ class IRoster(Interface):
""")
def get_member(address):
- """Return the IMember for the given address.
+ """Get the member for the given address.
- 'address' is a text email address. If no matching member is found,
- None is returned.
+ :param address: The email address to search for.
+ :type address: text
+ :return: The member if found, otherwise None
+ :rtype: `IMember` or None
"""