diff options
| author | J08nY | 2017-06-30 00:50:57 +0200 |
|---|---|---|
| committer | J08nY | 2017-08-07 18:18:00 +0200 |
| commit | 31854e7fadc147ec0dd0c79347f632091cf41461 (patch) | |
| tree | 4202c9faeb5b0c3da6d166b76e8b7edb137e272b /src/mailman/workflows/common.py | |
| parent | c0a6d7dedfe7bb59c1837d924ed5c6c2b2796846 (diff) | |
| download | mailman-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.py | 28 |
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, |
