summaryrefslogtreecommitdiff
path: root/src/mailman/model/mailinglist.py
diff options
context:
space:
mode:
authorBarry Warsaw2011-04-17 11:35:06 -0400
committerBarry Warsaw2011-04-17 11:35:06 -0400
commit16514efac09eab51a30b479359d973d40c6bd442 (patch)
treef020d0d8034f0e21bc3f00787e5d3b7f447954e5 /src/mailman/model/mailinglist.py
parentb2b32e2599ba4f4618de38a3eafaf6604d305aa3 (diff)
downloadmailman-16514efac09eab51a30b479359d973d40c6bd442.tar.gz
mailman-16514efac09eab51a30b479359d973d40c6bd442.tar.zst
mailman-16514efac09eab51a30b479359d973d40c6bd442.zip
Diffstat (limited to 'src/mailman/model/mailinglist.py')
-rw-r--r--src/mailman/model/mailinglist.py34
1 files changed, 24 insertions, 10 deletions
diff --git a/src/mailman/model/mailinglist.py b/src/mailman/model/mailinglist.py
index 895ff1f0e..2b205775e 100644
--- a/src/mailman/model/mailinglist.py
+++ b/src/mailman/model/mailinglist.py
@@ -38,12 +38,14 @@ from zope.interface import implements
from mailman.config import config
from mailman.database.model import Model
from mailman.database.types import Enum
+from mailman.interfaces.address import IAddress
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.mime import FilterType
+from mailman.interfaces.user import IUser
from mailman.model import roster
from mailman.model.digests import OneLastDigest
from mailman.model.member import Member
@@ -443,20 +445,32 @@ class MailingList(Model):
raise TypeError(
'Undefined MemberRole: {0}'.format(role))
- def subscribe(self, address, role=MemberRole.member):
+ def subscribe(self, subscriber, 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)
+ if IAddress.providedBy(subscriber):
+ member = store.find(
+ Member,
+ Member.role == role,
+ Member.mailing_list == self.fqdn_listname,
+ Member._address == subscriber).one()
+ if member:
+ raise AlreadySubscribedError(
+ self.fqdn_listname, subscriber.email, role)
+ elif IUser.providedBy(subscriber):
+ member = store.find(
+ Member,
+ Member.role == role,
+ Member.mailing_list == self.fqdn_listname,
+ Member._user == subscriber).one()
+ if member:
+ raise AlreadySubscribedError(
+ self.fqdn_listname, subscriber, role)
+ else:
+ raise ValueError('subscriber must be an address or user')
member = Member(role=role,
mailing_list=self.fqdn_listname,
- address=address)
+ subscriber=subscriber)
member.preferences = Preferences()
store.add(member)
return member