summaryrefslogtreecommitdiff
path: root/src/mailman/model/mailinglist.py
diff options
context:
space:
mode:
authorAbhilash Raj2016-07-30 21:06:57 -0700
committerBarry Warsaw2016-09-01 06:55:09 -0400
commit88f349900ea9afea30186c3c9f0f399ff69f6c4a (patch)
tree984a31ab8be58871bacf4a5821ddc611ac4586fe /src/mailman/model/mailinglist.py
parentc23519b5262fd264ed0f9e5bc23b901ed7eee632 (diff)
downloadmailman-88f349900ea9afea30186c3c9f0f399ff69f6c4a.tar.gz
mailman-88f349900ea9afea30186c3c9f0f399ff69f6c4a.tar.zst
mailman-88f349900ea9afea30186c3c9f0f399ff69f6c4a.zip
Diffstat (limited to 'src/mailman/model/mailinglist.py')
-rw-r--r--src/mailman/model/mailinglist.py31
1 files changed, 20 insertions, 11 deletions
diff --git a/src/mailman/model/mailinglist.py b/src/mailman/model/mailinglist.py
index 933384797..396b8ed3d 100644
--- a/src/mailman/model/mailinglist.py
+++ b/src/mailman/model/mailinglist.py
@@ -178,6 +178,7 @@ class MailingList(Model):
topics = Column(PickleType)
topics_bodylines_limit = Column(Integer)
topics_enabled = Column(Boolean)
+ unsubscription_policy = Column(Enum(SubscriptionPolicy))
# ORM relationships.
header_matches = relationship(
'HeaderMatch', backref='mailing_list',
@@ -441,16 +442,14 @@ class MailingList(Model):
raise ValueError('Undefined MemberRole: {}'.format(role))
@dbconnection
- def subscribe(self, store, subscriber, role=MemberRole.member):
- """See `IMailingList`."""
+ def is_subscribed(self, store, subscriber, role=MemberRole.member):
+ """Check if a user/address is subscribed to this list."""
+ member = None
if IAddress.providedBy(subscriber):
member = store.query(Member).filter(
Member.role == role,
Member.list_id == self._list_id,
Member._address == subscriber).first()
- if member:
- raise AlreadySubscribedError(
- self.fqdn_listname, subscriber.email, role)
elif IUser.providedBy(subscriber):
if subscriber.preferred_address is None:
raise MissingPreferredAddressError(subscriber)
@@ -458,13 +457,23 @@ class MailingList(Model):
Member.role == role,
Member.list_id == self._list_id,
Member._user == subscriber).first()
- if member:
- raise AlreadySubscribedError(
- self.fqdn_listname,
- subscriber.preferred_address.email,
- role)
+
+ if member:
+ return True
else:
- raise ValueError('subscriber must be an address or user')
+ return False
+
+ @dbconnection
+ def subscribe(self, store, subscriber, role=MemberRole.member):
+ """See `IMailingList`."""
+ if IAddress.providedBy(subscriber):
+ email = subscriber.email
+ elif IUser.providedBy(subscriber):
+ email = subscriber.preferred_address.email
+
+ if self.is_subscribed(subscriber, role):
+ raise AlreadySubscribedError(self.fqdn_listname, email, role)
+
member = Member(role=role,
list_id=self._list_id,
subscriber=subscriber)