summaryrefslogtreecommitdiff
path: root/src/mailman/model/workflowstate.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/model/workflowstate.py')
-rw-r--r--src/mailman/model/workflowstate.py27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/mailman/model/workflowstate.py b/src/mailman/model/workflowstate.py
index 5e3301dcf..ee0226d61 100644
--- a/src/mailman/model/workflowstate.py
+++ b/src/mailman/model/workflowstate.py
@@ -19,11 +19,14 @@
__all__ = [
'WorkflowState',
+ 'WorkflowStateManager',
]
from mailman.database.model import Model
-from mailman.interfaces.workflowstate import IWorkflowState
+from mailman.database.transaction import dbconnection
+from mailman.interfaces.workflowstate import (
+ IWorkflowState, IWorkflowStateManager)
from sqlalchemy import Column, Unicode
from zope.interface import implementer
@@ -39,3 +42,25 @@ class WorkflowState(Model):
key = Column(Unicode, primary_key=True)
step = Column(Unicode, nullable=False)
data = Column(Unicode)
+
+
+
+@implementer(IWorkflowStateManager)
+class WorkflowStateManager:
+ """See `IWorkflowStateManager`."""
+
+ @dbconnection
+ def save(self, store, name, key, step, data=None):
+ """See `IWorkflowStateManager`."""
+ state = store.query(WorkflowState).get((name, key))
+ if state is None:
+ state = store.add(WorkflowState(
+ name=name, key=key, step=step, data=data))
+ else:
+ state.step = step
+ state.data = data
+
+ @dbconnection
+ def restore(self, store, name, key):
+ """See `IWorkflowStateManager`."""
+ return store.query(WorkflowState).get((name, key))