使用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第三方库


热门话题
windows如何告诉IntelliJ使用Java1.6JDK启动gradle?   使用java获取计算机中硬盘的真实序列号   java从图像数组中选择随机图像   java如何给方法输入参数并打印返回值   java正则表达式验证显示有问题的字符。javax。验证   java有没有一种从Jar/war中删除文件的快速方法,而不必提取Jar并重新创建它?   java Hibernate OrderColumn和Spring Roo   java在没有模拟的情况下测试Spring REST API   java JPA/Hibernate不希望的部分回滚和会话处理   java什么是zookeeper的合适版本?   在带有数组的循环中创建变量时出现Java编译错误   java如何正确使用C++中的JNI JVM?   java如何根据条件从firebase数据库获取图像url并将其加载到ImageView中?   为什么它在Java泛型中作为返回类型而不是类型?   jar压缩和解压在java中   java如何比较整数与整数数组   引用对象Java类字段?   com JACOB java lib,调用函数时运行ActiveX对象获取错误灾难性失败