马克思

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如何向xsi:nil元素添加另一个属性?   Java抽象泛型方法,使用具体类型实现通配符   java使用pcap4j截断pcap文件   当我放置字母a、b和c时,java中的异常预期会下降   java设置活动对话框不可取消   接口类型变量上的Java克隆   使用Java或BouncyCastle对CSR(证书签名请求)进行安全解码/读取   java调用SavingsAccount对象上的函数并打印结果   java如何在Android应用程序上显示地图上的兴趣点(POI)并与之交互?   如果在JavaFX中的ResultSet中未找到任何内容,则显示java警报   java我将springboot和@component与@scheduled一起使用,它每12小时锁定一次   ApachePOI如何使用java删除包含字符串的word表的行   java如果对象(x,y)靠近其他对象(x,y)   从未对JMSException调用java JMS CachingConnectionFactory OneException方法   javascript使用java将HTML页面转换为MS word