diff options
| author | Barry Warsaw | 2011-04-22 19:58:07 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2011-04-22 19:58:07 -0400 |
| commit | 989267f6edbf55a1109d24c2b5e20051ea6a24a8 (patch) | |
| tree | 8b290e5760cbb28d43a24a3e1460bdf7043c78a4 /src/mailman/model | |
| parent | ea77dd42093f453c4f3f3aad22d33952b3e3ec5a (diff) | |
| download | mailman-989267f6edbf55a1109d24c2b5e20051ea6a24a8.tar.gz mailman-989267f6edbf55a1109d24c2b5e20051ea6a24a8.tar.zst mailman-989267f6edbf55a1109d24c2b5e20051ea6a24a8.zip | |
Users subscribed to a mailing list via their preferred address show up
correctly in the REST API's list of members. This even correctly tracks
changes in their preferred address.
Diffstat (limited to 'src/mailman/model')
| -rw-r--r-- | src/mailman/model/docs/mailinglist.txt | 11 | ||||
| -rw-r--r-- | src/mailman/model/mailinglist.py | 5 |
2 files changed, 15 insertions, 1 deletions
diff --git a/src/mailman/model/docs/mailinglist.txt b/src/mailman/model/docs/mailinglist.txt index ec9e37ee0..4d3250e76 100644 --- a/src/mailman/model/docs/mailinglist.txt +++ b/src/mailman/model/docs/mailinglist.txt @@ -152,3 +152,14 @@ this address is their preferred address. >>> mlist.subscribe(user.preferred_address) <Member: dave.person@example.com on aardvark@example.com as MemberRole.member> + +A user cannot subscribe to a mailing list without a preferred address. + + >>> user = user_manager.create_user('eperson@example.com', 'Elly Person') + >>> address = list(user.addresses)[0] + >>> address.verified_on = now() + >>> mlist.subscribe(user) + Traceback (most recent call last): + ... + MissingPreferredAddressError: User must have a preferred address: + <User "Elly Person" (2) at ...> diff --git a/src/mailman/model/mailinglist.py b/src/mailman/model/mailinglist.py index 2b205775e..9294fe7cc 100644 --- a/src/mailman/model/mailinglist.py +++ b/src/mailman/model/mailinglist.py @@ -43,7 +43,8 @@ from mailman.interfaces.domain import IDomainManager from mailman.interfaces.languages import ILanguageManager from mailman.interfaces.mailinglist import ( IAcceptableAlias, IAcceptableAliasSet, IMailingList, Personalization) -from mailman.interfaces.member import AlreadySubscribedError, MemberRole +from mailman.interfaces.member import ( + AlreadySubscribedError, MemberRole, MissingPreferredAddressError) from mailman.interfaces.mime import FilterType from mailman.interfaces.user import IUser from mailman.model import roster @@ -458,6 +459,8 @@ class MailingList(Model): raise AlreadySubscribedError( self.fqdn_listname, subscriber.email, role) elif IUser.providedBy(subscriber): + if subscriber.preferred_address is None: + raise MissingPreferredAddressError(subscriber) member = store.find( Member, Member.role == role, |
