跳转到主要内容

一个简单的数据库驱动工作流引擎

项目描述

本项目旨在提供一个简单的数据库驱动工作流引擎,您可以使用它来配置和自动化复杂的操作。它基于在运行时通过管理界面定义的可配置状态机。

工作流定义

工作流由以下对象定义

工作流:

主对象,它必须有一个唯一的 名称

状态:

对象,代表图中的节点,它们是 工作流 特定的

转换:

转换可以是手动或自动的,自动转换在对象达到初始状态后异步执行。当然,一次只能执行一个自动转换,并且它通常会更改状态,使得为初始状态定义的其他转换无法再执行。执行哪个转换取决于 优先级 和相关条件

条件:

对象,根据正在进行的进程的对象属性、用户或通用查询限制转换的执行。条件是分层的,可以使用特殊布尔条件进行组合

函数:

对于每个类型为函数的条件 C,必须有一个具有值 C 的函数。该函数指定将用于检查条件是否满足的Python函数。

函数参数:

每个函数参数都以关键字参数的形式传递给其函数

回调函数:

回调函数定义了一个Python函数,当发生转换时应该调用该函数,通常用于必要的副作用。如果execute_asyncFalse,则回调函数将在同一事务内和对象状态更新之前调用,或者在独立线程中状态更新后调用

回调参数:

每个回调参数都以关键字参数的形式传递给其回调函数

以下是一个简单的3状态工作流程示例,其中包含手动和自动转换的混合

from django.contrib.auth.models import User
from django_workflow import workflow
from django_workflow.models import Workflow, State, Transition, Condition, Function, FunctionParameter, Callback, CallbackParameter

# create the main workflow object
wf = Workflow.objects.create(name="Test_Workflow", object_type="django.contrib.auth.models.User")
# create 3 states
s1 = State.objects.create(name="state 1", workflow=wf, active=True, initial=True)
s2 = State.objects.create(name="state 2", workflow=wf, active=True)
#the final state is defined as inactive so that its skipped when scanning for automatic transitions
s3 = State.objects.create(name="state 3", workflow=wf, active=False)
# create the transitions, we have 2 automatic transitions from state 1 to state 2,
# the first is going to be executed despite t4 having a better priority because
# t1 has a lower automatic_delay
t1 = Transition.objects.create(name="auto_fast", initial_state=s1, final_state=s2, automatic=True, automatic_delay=1.0/24.0/3600.0, priority=2)
t4 = Transition.objects.create(name="auto_slow", initial_state=s1, final_state=s3, automatic=True,
    automatic_delay=1.0 / 24.0, priority=1)
t2 = Transition.objects.create(initial_state=s1, final_state=s3, automatic=False)
t3 = Transition.objects.create(initial_state=s2, final_state=s3, automatic=False)
# we set t3 to be executed only by superusers this can be done with a object_attribute_value conditon
c1 = Condition.objects.create(condition_type="function", transition=t3)
f1 = Function.objects.create(
    function_name="object_attribute_value",
    function_module="django_workflow.conditions",
    condition=c1
)
p11 = FunctionParameter.objects.create(function=f1, name="attribute_name", value="is_superuser")
p12 = FunctionParameter.objects.create(function=f1, name="attribute_value", value="True")
# we want to print out if transition 1 was executed, this can be done with a callback
cb1 = Callback.objects.create(transition=t1, function_name="_print", function_module="django_workflow.tests", order=1)
cp11 = CallbackParameter.objects.create(callback=cb1, name="text", value="Transition 1 Executed")

状态和转换

一旦定义了工作流程,就可以向工作流程中添加对象

obj = MyModelObject.objects.get(name="MyObjectName")
wf = workflow.get_workflow("Test_Workflow")
wf.add_object(obj.id)

add_object方法除了在状态机中开始跟踪对象外,还触发初始状态中可用的任何自动转换

要检查对象的状态,可以使用

workflow.get_object_state("Test_Workflow", object_id)

要检查可用的转换,例如,要知道可以在UI中显示哪些按钮,您可以调用

workflow.get_available_transitions("Test_Workflow", user, object_id)

其中user应该是希望执行操作的Django用户。将user传递给每个条件和回调,因此检查授权以及执行特定任务(例如通知)很有用

项目详情


下载文件

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

源代码分发

django-wf-0.9.1.tar.gz (14.0 kB 查看散列)

上传时间 源代码

构建分发

django_wf-0.9.1-py2.7.egg (32.0 kB 查看散列)

上传时间 源代码

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面