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.py36
1 files changed, 33 insertions, 3 deletions
diff --git a/src/mailman/model/mailinglist.py b/src/mailman/model/mailinglist.py
index 2e50575d5..0764be0bb 100644
--- a/src/mailman/model/mailinglist.py
+++ b/src/mailman/model/mailinglist.py
@@ -34,13 +34,15 @@ from mailman.interfaces.languages import ILanguageManager
from mailman.interfaces.mailinglist import (
DMARCMitigateAction, IAcceptableAlias, IAcceptableAliasSet,
IHeaderMatch, IHeaderMatchList, IListArchiver, IListArchiverSet,
- IMailingList, Personalization, ReplyToMunging, SubscriptionPolicy)
+ IMailingList, Personalization, ReplyToMunging)
from mailman.interfaces.member import (
AlreadySubscribedError, MemberRole, MissingPreferredAddressError,
SubscriptionEvent)
from mailman.interfaces.mime import FilterType
from mailman.interfaces.nntp import NewsgroupModeration
from mailman.interfaces.user import IUser
+from mailman.interfaces.workflows import (ISubscriptionWorkflow,
+ IUnsubscriptionWorkflow)
from mailman.model import roster
from mailman.model.digests import OneLastDigest
from mailman.model.member import Member
@@ -179,11 +181,11 @@ class MailingList(Model):
send_goodbye_message = Column(Boolean)
send_welcome_message = Column(Boolean)
subject_prefix = Column(SAUnicode)
- subscription_policy = Column(Enum(SubscriptionPolicy))
+ _subscription_policy = Column('subscription_policy', SAUnicode)
topics = Column(PickleType)
topics_bodylines_limit = Column(Integer)
topics_enabled = Column(Boolean)
- unsubscription_policy = Column(Enum(SubscriptionPolicy))
+ _unsubscription_policy = Column('unsubscription_policy', SAUnicode)
# ORM relationships.
header_matches = relationship(
'HeaderMatch', backref='mailing_list',
@@ -494,6 +496,34 @@ class MailingList(Model):
notify(SubscriptionEvent(self, member))
return member
+ @property
+ def subscription_policy(self):
+ return config.workflows[self._subscription_policy]
+
+ @subscription_policy.setter
+ def subscription_policy(self, value):
+ if isinstance(value, str):
+ cls = config.workflows.get(value, None)
+ else:
+ cls = value
+ if (cls is None or not ISubscriptionWorkflow.implementedBy(cls)):
+ raise ValueError('Invalid subscription policy: {}'.format(value))
+ self._subscription_policy = cls.name
+
+ @property
+ def unsubscription_policy(self):
+ return config.workflows[self._unsubscription_policy]
+
+ @unsubscription_policy.setter
+ def unsubscription_policy(self, value):
+ if isinstance(value, str):
+ cls = config.workflows.get(value, None)
+ else:
+ cls = value
+ if (cls is None or not IUnsubscriptionWorkflow.implementedBy(cls)):
+ raise ValueError('Invalid unsubscription policy: {}'.format(value))
+ self._unsubscription_policy = cls.name
+
@public
@implementer(IAcceptableAlias)