马克思

marx-workflows的Python项目详细描述


marx
=


python的框架/工具,它可以完成工作,使代码易于测试,
并将意大利面条逻辑转换回您喜欢的内容。


您可以在tests/目录中找到[full example](./tests/workflow/example_1.py)。

"
"这定义了一个围绕命令"抛出馅饼"的工作流。在一个简单的系统中,这大约是5行代码。但在另一些情况下,
在业务逻辑需要多个系统交互的情况下,
逻辑被分散和复制,并且没有很好地封装。

SE、可测试性等。
"



rmissiondeniederror


class is userauthorized(逻辑单元):
"检查用户+操作的权限,如果失败,则通知权限。"



def__(self,action):
"
@param action:将要检查的操作。
""
self.action=action

def\u call(self,user):
"
@param user:执行操作的用户。
""
如果self.is_authorized(user):
返回
self.notify_authorities(user,self.action)
提高权限deniederror(self.action)

def is_authorized(self,user):
返回user.name in("bob","mary")"

定义通知权限(自我、用户、操作):
打印"权限!!,用户,"尝试非法操作",self.action



class makepie(逻辑单元):
"制作饼。"


maker=argspec(user,docs="制作饼的人。")
pie=resultspec(basestring,docs="饼的种类")

def-call(self,maker):
maker.increment("pies_made",1)
self.result.pie='柠檬'



fault=false,docs="我们收到了吗?")

/>self.result.hit=actor.can掴throw()
我们不需要返回,但可以返回。
返回self.result




class throwpiecontext(defaultcontext):
"throwpieworflow的执行上下文。"
thrower=field(user,docs="somebody has to throw it")
target=field(user,docs="at somebody")
pie=field(str,docs="一个派,我们一路上做的")
was\u hit=field(bool,docs="投掷事件的成功")

"工作流是一系列步骤。"
isuserauthorizedStep=step(
isuserauthorized("throw_pie"),
epie.制造商:throwpiecontext.thrower},
我们从返回的结果绑定回上下文
result廑map=makepie.resultmap(throwpiecontext)

throwthing step=step(
throwthing(),
arg廑map=throwthing.automap({throwthing.actor:throwpiecontext.thrower,
throwthing.thing:throwpiecontext.pie}),
结果映射{throwpiecontext.was_hit:'hit'}





"有几种方法可以建立工作流。通过构造函数…"
throwpieworkflowA=workflow(步骤=[
isuserauthorizedStep,
makepieStep,
throwthingStep,
])


"或使用"添加步骤…""
throwpieworkflowB=workflow()。添加步骤(
isuserauthorizedStep
)。添加步骤(
makepiestep
)。添加步骤(
throwthingstep



"或使用重载的加法运算符。""
emptyworkflow=workflow()
throwpiewworkflow a=emptyworkflow+isuserauthorizedstep+makepiestep
throwpiewworkflowc戋b=EmptyWorkflow+ThrowThingStep
ThrowPiewWorkflowC=ThrowPiewWorkflowC戋a+ThrowPiewWorkflowC戋b



def run():
"执行工作流、准备上下文并传递。""
ctx=ThrowPiecontext()
ctx.thrower=user("bob")
ctx.target=user("frank")
对于工作流输入(throwpieworkflowa,
throwpieworkflowb,
throwpieworkflowc):
尝试:
工作流类型(ctx)
断言ctx.was\u hit为not none
断言ctx.pie=='lemon'
返回ctx
除了permissiondeniederror:
断言false

确保throwpieworkflowc没有修改其组件
断言emptyworkflow.steps==[]
断言throwthingstep不在throwpieworkflowc_a.steps中

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用“Wed,01 Jul 2015 17:32:41 EDT”解析字符串   java Storm apache升级(1.0.0到2.0.0)   java类驻留在不同的目录中,而不是包指定的目录。为什么?   将Java中的图像缩放到非常小的维度   java如何通过子文档从自定义方面访问ElasticSearch parentdoc字段   java如何在RationalSoftwareArchitect中使用findbugs?   Java中的事件提升处理   java值被添加到arrayList的所有索引中,而不是在“”时添加到最后一个索引中。正在使用arraylist的add()方法   JFrame中的java JPanel派生类   java如何用循环和异步方法模拟类   java Android阻止可绘制背景超出视图范围   为客户排序Java阵列   java Apache poi如何将工作表设置为枚举位置值属性?   java Rhino在使用自定义类参数调用javascript函数时出错   java格式化日期从年月日到年月日   spring如何修复java。lang.illegalargumentexception在此特定场景中是否尝试创建具有null实体的合并事件?   java如何创建更好的对象