跳转到主要内容

纯Python工作流/转换系统。

项目描述

此包允许定义由一组状态和状态之间转换组成的工作流。可以通过约束来保护激活转换的操作。

示例

from roughrider.predicate import ConstraintError, Validator, Or
from roughrider.workflow.components import Action, Transition, Transitions
from roughrider.workflow.workflow import (
    WorkflowItem, WorkflowState, Workflow)


class Document:
    state = None
    body = ""


class RoleValidator(Validator):

    def __init__(self, role):
        self.role = role

    def __call__(self, item, role=None, **namespace):
        if role != self.role:
            raise ConstraintError(
                message=f'Unauthorized. Missing the `{role}` role.')


class PublicationWorkflow(Workflow):

    class wrapper(WorkflowItem):

        @property
        def state(self):
            return self.workflow.get(self.item.state)

        @state.setter
        def state(self, state):
            self.item.state = state.name


    class states(WorkflowState):
        draft = 'Draft'
        published = 'Published'
        submitted = 'Submitted'


    transitions = Transitions((
        Transition(
            origin=states.draft,
            target=states.published,
            action=Action(
                'Publish',
                constraints=[RoleValidator('publisher')]
            )
        ),
        Transition(
            origin=states.published,
            target=states.draft,
            action=Action(
                'Retract',
                constraints=[
                    Or((RoleValidator('owner'),
                        RoleValidator('publisher')))
                ]
            )
        ),
        Transition(
            origin=states.draft,
            target=states.submitted,
            action=Action(
                'Submit',
                constraints=[RoleValidator('owner')],
            )
        ),
        Transition(
            origin=states.submitted,
            target=states.published,
            action=Action(
                'Publish',
                constraints=[RoleValidator('publisher')],
            )
        )
    ))


workflow = PublicationWorkflow('draft')  # initial state
item = Document()
workflow_item = workflow(item, role='owner')
workflow_item.transition_to(PublicationWorkflow.states.submitted)

CHANGES

0.2 (2021-10-21)

  • 更新到使用roughrider.predicate >= 0.3.1

0.1 (2021-10-09)

  • 初始发布。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

roughrider.workflow-0.2.tar.gz (13.0 kB 查看散列)

上传时间:

由以下支持