马克思

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限制C++代码访问JNI中的某些类   Android上的java DateFormat:不可解析的日期   通过json进行java迭代,并为其他请求调用多个API   Netbeans中的java JavaFX项目引发异常“输入流不能为null”   多线程Java newFixedThreadPool解释   |在java字符串中无法识别。split()方法   Java中的原始包装器类是否被视为引用类型?   Java swing。如何在intellij idea GUI设计工具中重写组件方法   数组乘矩阵   java将30GB的XML文件分割成小块XML   java通过一棵树递归找到一个节点,并返回指向该节点的路径   java如何将可观察的<Observable<List<T>>转换为可观察的<List<T>>   使用java在web服务器上更改php文件中的字符串?   java希望开发像tomcat这样的servlet容器   java希望提高编程的数学技能