summaryrefslogtreecommitdiff
path: root/src/mailman/model/mailinglist.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/model/mailinglist.py')
-rw-r--r--src/mailman/model/mailinglist.py22
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):