summaryrefslogtreecommitdiff
path: root/src/mailman/workflows/common.py
diff options
context:
space:
mode:
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,