summaryrefslogtreecommitdiff
path: root/src/mailman/interfaces
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/interfaces')
-rw-r--r--src/mailman/interfaces/subscriptions.py33
-rw-r--r--src/mailman/interfaces/workflows.py (renamed from src/mailman/interfaces/workflow.py)71
2 files changed, 68 insertions, 36 deletions
diff --git a/src/mailman/interfaces/subscriptions.py b/src/mailman/interfaces/subscriptions.py
index 8de517c09..4a82da096 100644
--- a/src/mailman/interfaces/subscriptions.py
+++ b/src/mailman/interfaces/subscriptions.py
@@ -78,33 +78,6 @@ class TokenOwner(Enum):
@public
-class SubscriptionConfirmationNeededEvent:
- """Triggered when a subscription needs confirmation.
-
- Addresses must be verified before they can receive messages or post
- to mailing list. The confirmation message is sent to the user when
- this event is triggered.
- """
- def __init__(self, mlist, token, email):
- self.mlist = mlist
- self.token = token
- self.email = email
-
-
-@public
-class UnsubscriptionConfirmationNeededEvent:
- """Triggered when an unsubscription request needs confirmation.
-
- The confirmation message is sent to the user when this event is
- triggered.
- """
- def __init__(self, mlist, token, email):
- self.mlist = mlist
- self.token = token
- self.email = email
-
-
-@public
class ISubscriptionService(Interface):
"""General subscription services."""
@@ -218,8 +191,7 @@ class ISubscriptionManager(Interface):
To use this, adapt an ``IMailingList`` to this interface.
"""
- def register(subscriber=None, *,
- pre_verified=False, pre_confirmed=False, pre_approved=False):
+ def register(subscriber=None, **kwargs):
"""Subscribe an address or user according to subscription policies.
The mailing list's subscription policy is used to subscribe
@@ -270,8 +242,7 @@ class ISubscriptionManager(Interface):
appears in the global or list-centric bans.
"""
- def unregister(subscriber=None, *,
- pre_confirmed=False, pre_approved=False):
+ def unregister(subscriber=None, **kwargs):
"""Unsubscribe an address or user according to subscription policies.
The mailing list's unsubscription policy is used to unsubscribe
diff --git a/src/mailman/interfaces/workflow.py b/src/mailman/interfaces/workflows.py
index 5b3582b58..0fad52cca 100644
--- a/src/mailman/interfaces/workflow.py
+++ b/src/mailman/interfaces/workflows.py
@@ -15,7 +15,7 @@
# You should have received a copy of the GNU General Public License along with
# GNU Mailman. If not, see <http://www.gnu.org/licenses/>.
-"""Interfaces describing the state of a workflow."""
+"""Interfaces describing the a workflow, it's state and it's state manager."""
from public import public
from zope.interface import Attribute, Interface
@@ -27,7 +27,7 @@ class IWorkflowState(Interface):
token = Attribute('A unique key identifying the workflow instance.')
- step = Attribute("This workflow's next step.")
+ steps = Attribute("This workflow's next steps.")
data = Attribute('Additional data (may be JSON-encoded).')
@@ -36,13 +36,13 @@ class IWorkflowState(Interface):
class IWorkflowStateManager(Interface):
"""The workflow states manager."""
- def save(token, step, data=None):
+ def save(token, steps, data=None):
"""Save the state of a workflow.
:param token: A unique token identifying this workflow instance.
:type token: str
- :param step: The next step for this workflow.
- :type step: str
+ :param steps: The next steps for this workflow.
+ :type steps: str
:param data: Additional data (workflow-specific).
:type data: str
"""
@@ -65,3 +65,64 @@ class IWorkflowStateManager(Interface):
"""
count = Attribute('The number of saved workflows in the database.')
+
+
+@public
+class IWorkflow(Interface):
+ """A workflow."""
+
+ name = Attribute('The name of the workflow, must be unique.')
+ description = Attribute('A brief description of the workflow.')
+ initial_state = Attribute('The state in which the workflow starts.')
+ save_attributes = Attribute('The sequence of attributes of the workflow, '
+ 'which are saved.')
+
+ def __iter__():
+ """Return an iterator over the steps."""
+
+ def __next__():
+ """Run the next step from the queue.
+
+ :return: The result of the step run.
+ """
+
+ def push(step):
+ """Push a step to this workflows queue."""
+
+ def run_thru(stop_after):
+ """Run the state machine through and including the given step.
+
+ :param stop_after: Name of method, sans prefix to run the
+ state machine through. In other words, the state machine runs
+ until the named method completes.
+ """
+
+ def run_until(stop_before):
+ """Run the state machine until (not including) the given step.
+
+ :param stop_before: Name of method, sans prefix that the
+ state machine is run until the method is reached. Unlike
+ `run_thru()` the named method is not run.
+ """
+
+ def save():
+ """Save the workflow in it's current state.
+
+ Needs to have the `token` attribute set.
+ """
+
+ def restore():
+ """Restore the workflow from the database.
+
+ Needs to have the `token` attribute set.
+ """
+
+
+@public
+class ISubscriptionWorkflow(IWorkflow):
+ """A workflow used for subscription."""
+
+
+@public
+class IUnsubscriptionWorkflow(IWorkflow):
+ """A workflow used for unsubscription."""