diff options
| author | J08nY | 2017-06-30 00:50:57 +0200 |
|---|---|---|
| committer | J08nY | 2017-08-30 13:18:10 +0200 |
| commit | ba231b99748270b4065b660d883404278041fbe6 (patch) | |
| tree | b30c138ba6f477be2f09884d55f321df9e2b6b44 /src/mailman/workflows/common.py | |
| parent | 6a2de987622aad67ea3929d9a1b6a347a748b30d (diff) | |
| download | mailman-ba231b99748270b4065b660d883404278041fbe6.tar.gz mailman-ba231b99748270b4065b660d883404278041fbe6.tar.zst mailman-ba231b99748270b4065b660d883404278041fbe6.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, |
