Source code for coaster.docflow
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from flask import g
import docflow
from werkzeug.exceptions import Forbidden
__all__ = ['WorkflowStateException', 'WorkflowTransitionException',
'WorkflowPermissionException', 'WorkflowState', 'WorkflowStateGroup',
'InteractiveTransition', 'DocumentWorkflow']
class WorkflowStateException(docflow.WorkflowStateException, Forbidden):
pass
class WorkflowTransitionException(docflow.WorkflowTransitionException, Forbidden):
pass
class WorkflowPermissionException(docflow.WorkflowPermissionException, Forbidden):
pass
[docs]class WorkflowState(docflow.WorkflowState):
__doc__ = docflow.WorkflowState.__doc__
exception_state = WorkflowStateException
exception_transition = WorkflowTransitionException
exception_permission = WorkflowPermissionException
[docs]class WorkflowStateGroup(docflow.WorkflowStateGroup):
__doc__ = docflow.WorkflowStateGroup.__doc__
exception_state = WorkflowStateException
exception_transition = WorkflowTransitionException
exception_permission = WorkflowPermissionException
[docs]class InteractiveTransition(docflow.InteractiveTransition):
__doc__ = docflow.InteractiveTransition.__doc__
def __init__(self, workflow):
super(InteractiveTransition, self).__init__(workflow)
if hasattr(self, 'formclass'):
self.form = self.formclass(obj=self.document)
[docs] def validate(self):
"""Validate self.form, assuming Flask-WTF Form"""
return self.form.validate_on_submit()
[docs]class DocumentWorkflow(docflow.DocumentWorkflow):
__doc__ = docflow.DocumentWorkflow.__doc__
exception_state = WorkflowStateException
[docs] def permissions(self):
"""
Permissions for this workflow. Plays nice with
:meth:`coaster.views.load_models` and
:class:`coaster.sqlalchemy.PermissionMixin` to determine the available
permissions to the current user.
"""
perms = set(super(DocumentWorkflow, self).permissions())
if hasattr(g, 'permissions'):
perms.update(g.permissions or [])
if hasattr(self.document, 'permissions') and hasattr(g, 'user'):
perms = self.document.permissions(g.user, perms)
return perms