summaryrefslogtreecommitdiff
path: root/src/mailman/interfaces/workflows.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/mailman/interfaces/workflows.py (renamed from src/mailman/interfaces/workflow.py)71
1 files changed, 66 insertions, 5 deletions
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."""