summaryrefslogtreecommitdiff
path: root/src/mailman/model
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
parentc23519b5262fd264ed0f9e5bc23b901ed7eee632 (diff)
downloadmailman-88f349900ea9afea30186c3c9f0f399ff69f6c4a.tar.gz
mailman-88f349900ea9afea30186c3c9f0f399ff69f6c4a.tar.zst
mailman-88f349900ea9afea30186c3c9f0f399ff69f6c4a.zip
Intermediate Commit
Diffstat (limited to 'src/mailman/model')
-rw-r--r--src/mailman/model/mailinglist.py31
-rw-r--r--src/mailman/model/tests/test_mailinglist.py13
-rw-r--r--src/mailman/model/tests/test_workflow.py2
3 files changed, 34 insertions, 12 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)
diff --git a/src/mailman/model/tests/test_mailinglist.py b/src/mailman/model/tests/test_mailinglist.py
index c9aecc93b..3e3c5814c 100644
--- a/src/mailman/model/tests/test_mailinglist.py
+++ b/src/mailman/model/tests/test_mailinglist.py
@@ -17,6 +17,7 @@
"""Test MailingLists and related model objects.."""
+import pdb
import unittest
from mailman.app.lifecycle import create_list
@@ -92,6 +93,18 @@ class TestMailingList(unittest.TestCase):
self.assertIn('Anne Person <aperson@example.com>',
items[0].msg.get_payload())
+ def test_is_subscribed(self):
+ manager = getUtility(IUserManager)
+ user = manager.create_user('anne@example.com', 'Anne Person')
+ set_preferred(user)
+ self.assertEqual(False, self._mlist.is_subscribed(user))
+ self._mlist.subscribe(user)
+ self.assertEqual(True, self._mlist.is_subscribed(user))
+ address = manager.create_address('anne2@example.com', 'Anne Person')
+ address.verfied_on = now()
+ self.assertEqual(False, self._mlist.is_subscribed(address))
+ self._mlist.subscribe(address)
+ self.assertEqual(True, self._mlist.is_subscribed(address))
class TestListArchiver(unittest.TestCase):
layer = ConfigLayer
diff --git a/src/mailman/model/tests/test_workflow.py b/src/mailman/model/tests/test_workflow.py
index 4c8c6776f..afcba613b 100644
--- a/src/mailman/model/tests/test_workflow.py
+++ b/src/mailman/model/tests/test_workflow.py
@@ -124,7 +124,7 @@ class TestWorkflow(unittest.TestCase):
self.assertEqual(self._manager.count, 1)
def test_discard(self):
- # Discard some workflow state. This is use by IRegistrar.discard().
+ # Discard some workflow state. This is use by IWorkflowManager.discard().
self._manager.save('ant', 'token', 'one')
self._manager.save('bee', 'token', 'two')
self._manager.save('ant', 'nekot', 'three')