使用doit运行软件管道

spire-pipeline的Python项目详细描述


尖顶

尖顶是围绕doit的薄包装。它通过:

  • 基于类的任务声明
  • 用于重复性任务的内置工厂
  • 当缺少某些依赖项时,可选择修剪任务图

此外,只要任务的操作被修改,任务就会重新运行。

任务声明

spire任务可以是类:这种语法有助于操作列表中的依赖项和目标的重用。

importspireclassBuildHouse(spire.Task):file_dep=["brick","mortar"]targets=["house","dog_house"]actions=[["build"]+file_dep+targets]

然后可以使用通常的doit命令运行此任务文件:

$ doit run -f build_house.py -d /home/somebody/vacant_lot
. BuildHouse

对于简单任务(单个目标或单个操作),不必使用列表。在这种情况下,必须使用成员名的单数形式(即targets变为target,而actions变为action)。

importspireclassBuildShed(spire.Task):file_dep="wood"target="shed"action=["build",file_dep,target]

spire任务在默认情况下是可清除的:使用前面的示例,调用doit clean -f ... -d ...将删除目标。

重复性任务

对于重复的任务,spire提供了TaskFactory类。从TaskFactory派生的类需要为每个对象设置以下成员:

  • 任务名,通过TaskFactory
  • 的构造函数
  • file_deptargetsactions
importspireclassBuildHouse(spire.TaskFactory):def__init__(self,material):spire.TaskFactory.__init__(self,"Build{}House".format(material))self.file_dep=[material]self.targets=["{}_house".format(material)]self.actions=[["build",material]]houses=[BuildHouse(material)formaterialin["Straw","Sticks","Bricks"]]

修剪任务图

可能会跳过缺少依赖项的任务,而不是执行和失败。为此,必须在file_dep中将缺少的依赖项指定为None项,并且必须调用函数spire.prune()。将从当前任务开始修剪任务图,以确保不会由于这些缺少的目标而发生错误。

在下面的示例中,如果缺少brickmortar,则不会执行BuildHouseBuildDogHouse

  • BuildHouse将被跳过,因为file_dep包含Nonespire.prune()被调用的条目
  • BuildDogHouse将被跳过,因为已跳过其父级之一。

另一方面,如果brickmortar存在但doggie_basket丢失,则BuildHouse将成功执行,但BuildDogHouse将失败,因为其file_dep不等于None

importosimportspireclassBuildHouse(spire.Task):file_dep=[xifos.path.isfile(x)elseNoneforxin["brick","mortar"]]target="house"action=["build"]+file_dep+[target]classBuildDogHouse(spire.Task):file_dep=[BuildHouse.target,"doggie_basket"]target="dog_house"action=["build"]+file_dep+[target]spire.prune()

任务图的图形表示

可以通过调用spire模块来生成Graphviz格式的任务图的图形表示:

$ python3 -m spire graph tasks.py tasks.dot

通过传递选项--tasks-only,可以通过py生成一个简化的表示,省略目标和依赖节点。任何其他选项都将直接传递给doit,例如指定命令行变量。

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

推荐PyPI第三方库


热门话题
java Android Espresso如何检查字符串是否缩写   java jar从cmd写入文件,但不能双击   Grails中的java onetomany映射|我可以在复合键中使用生成的值吗?   java HttpsURLConnection在尝试添加Cookie时已连接   java在Netbeans中不能有同名的包和类   如何在格式化字段自动更改无效输入(Swing)Java时触发事件   用户输入后java JTextArea未更新   java试图用新字符替换字符串中的特定字符   java类加载器在Linux上显示错误路径   java mySQL远程数据库未连接   java如果接口需要MyObject对象,如何返回错误对象?   java无法解析在MainActivity之外调用安卓类时的符号   java如何将应用程序文件正确添加到appium所需的功能?   Java中浮点数组的数据对齐算法