纯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的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 585765d091b7cad7872bb8dafb73beb9e5c83b415c7b62808ef734094a709a53 |
|
MD5 | 4d3ef99029975c327e7a1674bcf2b576 |
|
BLAKE2b-256 | bd7735806ce8be47cd78fdaf302757eee1fd6a7046c8a003b4d31aae1da73a83 |