summaryrefslogtreecommitdiff
path: root/src/mailman/workflows/common.py
diff options
context:
space:
mode:
authorJ08nY2017-06-30 00:50:57 +0200
committerJ08nY2017-08-07 18:18:00 +0200
commit31854e7fadc147ec0dd0c79347f632091cf41461 (patch)
tree4202c9faeb5b0c3da6d166b76e8b7edb137e272b /src/mailman/workflows/common.py
parentc0a6d7dedfe7bb59c1837d924ed5c6c2b2796846 (diff)
downloadmailman-31854e7fadc147ec0dd0c79347f632091cf41461.tar.gz
mailman-31854e7fadc147ec0dd0c79347f632091cf41461.tar.zst
mailman-31854e7fadc147ec0dd0c79347f632091cf41461.zip
Diffstat (limited to 'src/mailman/workflows/common.py')
-rw-r--r--src/mailman/workflows/common.py28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/mailman/workflows/common.py b/src/mailman/workflows/common.py
index 940152272..c57ce374d 100644
--- a/src/mailman/workflows/common.py
+++ b/src/mailman/workflows/common.py
@@ -22,13 +22,17 @@ import uuid
from datetime import timedelta
from enum import Enum
from mailman.interfaces.address import IAddress
-from mailman.interfaces.pending import IPendings
+from mailman.interfaces.pending import IPendable, IPendings
from mailman.interfaces.subscriptions import TokenOwner
from mailman.interfaces.user import IUser
from mailman.interfaces.usermanager import IUserManager
+from mailman.interfaces.workflows import (ISubscriptionWorkflow,
+ IUnsubscriptionWorkflow, IWorkflow)
from mailman.utilities.datetime import now
from mailman.workflows.base import Workflow
from zope.component import getUtility
+from zope.interface import implementer
+from zope.interface.exceptions import DoesNotImplement
class WhichSubscriber(Enum):
@@ -36,11 +40,19 @@ class WhichSubscriber(Enum):
user = 2
+@implementer(IPendable)
+class PendableSubscription(dict):
+ PEND_TYPE = 'subscription'
+
+
+@implementer(IPendable)
+class PendableUnsubscription(dict):
+ PEND_TYPE = 'unsubscription'
+
+
class SubscriptionWorkflowCommon(Workflow):
"""Common support between subscription and unsubscription."""
- PENDABLE_CLASS = None
-
def __init__(self, mlist, subscriber):
super().__init__()
self.mlist = mlist
@@ -113,7 +125,15 @@ class SubscriptionWorkflowCommon(Workflow):
if token_owner is TokenOwner.no_one:
self.token = None
return
- pendable = self.PENDABLE_CLASS(
+
+ if ISubscriptionWorkflow.implementedBy(self.__class__):
+ pendable_class = PendableSubscription
+ elif IUnsubscriptionWorkflow.implementedBy(self.__class__):
+ pendable_class = PendableUnsubscription
+ else:
+ raise DoesNotImplement(IWorkflow)
+
+ pendable = pendable_class(
list_id=self.mlist.list_id,
email=self.address.email,
display_name=self.address.display_name,