diff options
Diffstat (limited to 'src/mailman/model/mailinglist.py')
| -rw-r--r-- | src/mailman/model/mailinglist.py | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/mailman/model/mailinglist.py b/src/mailman/model/mailinglist.py index 488b6da3d..895ff1f0e 100644 --- a/src/mailman/model/mailinglist.py +++ b/src/mailman/model/mailinglist.py @@ -42,11 +42,13 @@ 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 MemberRole +from mailman.interfaces.member import AlreadySubscribedError, MemberRole from mailman.interfaces.mime import FilterType from mailman.model import roster from mailman.model.digests import OneLastDigest +from mailman.model.member import Member from mailman.model.mime import ContentFilter +from mailman.model.preferences import Preferences from mailman.utilities.filesystem import makedirs from mailman.utilities.string import expand @@ -441,6 +443,24 @@ class MailingList(Model): raise TypeError( 'Undefined MemberRole: {0}'.format(role)) + def subscribe(self, address, role=MemberRole.member): + """See `IMailingList`.""" + store = Store.of(self) + member = store.find( + Member, + Member.role == role, + Member.mailing_list == self.fqdn_listname, + Member.address == address).one() + if member: + raise AlreadySubscribedError( + self.fqdn_listname, address.email, role) + member = Member(role=role, + mailing_list=self.fqdn_listname, + address=address) + member.preferences = Preferences() + store.add(member) + return member + class AcceptableAlias(Model): |
