跳至主要内容

用于从argparse参数生成Galaxy XML和CWL工具描述的工具

项目描述

PyPI Build Status

该项目旨在为argparse提供一种即插即用的替换方案,允许生成Galaxy XML和CWL工具。

它确实是一种即插即用的替换方案。您(或上游工具作者)可以像平常一样完全使用argparse。

import argparse

当安装此软件包并将PYTHONPATH=$(argparse2tool)设置后,argparse的即插即用替换方案将用于系统argparse之前,argparse2tool将捕获所有argparse函数调用,并对它们进行特殊处理。

在此过程中捕获的信息用于在请求带有--generate_galaxy_xml标志时生成Galaxy Tool XML,或者在请求带有--generate_cwl_tool标志时生成CWL Tools

您可以在示例python脚本中看到生成的Galaxy XMLCWL Tools

运行

要生成XML或CWL,使用适当的命令行标志运行您的工具

$ PYTHONPATH=$(argparse2tool) <tool command> --generate_galaxy_xml <other options> > tool.xml
$ PYTHONPATH=$(argparse2tool) <tool command> --generate_cwl_tool <other options> > tool.cwl

该项目包括一个示例example.py文件,它尽可能地使用了argparse功能。CWL和Galaxy XML支持不同的功能集,这将在生成的输出中体现。

$ PYTHONPATH=$(argparse2tool) python example.py --generate_galaxy_xml
$ PYTHONPATH=$(argparse2tool) python example.py --generate_cwl_tool

CWL特定功能

CNVkit工具包示例

$ cnvkit.py batch --generate_cwl_tool -d ~/cnvkit-tools/ --generate_outputs

如果提供的命令中有子命令,将生成所有可能的工具,例如,对于CNVkit

$ cnvkit.py --generate_cwl_tool

将生成cnvkit.py batchcnvkit.py accesscnvkit.py export bedcnvkit.py export cdt以及所有其他子命令的CWL工具描述。

其他选项(除了帮助信息外,仅与 --generate_cwl_tool 结合使用)包括:

  • -o FILENAME--output_section FILENAME:包含手动填写输出部分的文件,该文件将放入形成的 CWL 工具中。argparse2tool 在生成输出方面不太擅长,它只能识别类型为 argparse.FileType('w') 的输出文件,因此输出部分通常是空的,需要手动填写。

  • -go--generate_outputs:用于生成输出,不仅限于类型为 argparse.FileType('w') 的参数实例,还包括名称中包含 output 关键字的任何参数。例如,没有类型的 --output-file 参数也将放置到输出部分。然而,'–output-directory' 参数将被视为文件,因此如果选择了此选项,生成的工具必须仔细检查。

  • -bbasecommand:出现在结果工具的 basecommand 字段中的命令。当使用 shebang 运行工具,但希望 python 出现在 basecommand 字段并位于参数中间时,此选项非常有用。示例

    $ .search.py --generate_cwl_tool -b python.

生成的工具的基本命令将是 ['python'],而 search 将是一个位置参数,位于位置 0。

  • -d--directory:存储工具描述的目录。

  • --help_arg2cwl:打印此帮助信息。

工作原理

内部,argparse2tool 伪装成 argparse 尝试查找并导入 真实 的 argparse。然后,它存储对系统 argparse 的代码模块的引用,并向用户展示 stdlib 的 argparse 提供的所有函数。每个函数调用都通过系统 argparse 传递。然而,argparse2tool 捕获这些调用的详细信息,并在请求 Tool XML 或 CWL 时构建工具定义并打印到标准输出。

示例

您可以在 example.py 文件中查看示例,其中包含您可能在真实工具中看到的多种类型的参数和选项。相应地,还有一个 example.xml 文件,其中包含输出。

它不起作用!

如果您在安装后无法使用 --generate_galaxy_xml/--generate_cwl_tool 标志,这可能是由于模块加载顺序。必须将 argparse2tool 放在 argparse 之前。

要轻松纠正此问题,请运行作为此包一部分安装的工具 argparse2tool。正确排序的路径将产生以下结果

$ argparse2tool
PATH_TO_THE_DROPINS

而错误排序的路径将产生一个有用的错误消息

$ argparse2tool
no dropins dir...

此内容旨在内联使用

user@host:$ PYTHONPATH=$(argparse2tool) python my_script.py --generate_galaxy_xml

限制

此代码尚未涵盖 argparse API 的全部内容,并且在 XML 生成方面还有一些问题需要解决

  • argparse

    • 不支持组(在 galaxy 中,一切仍然应该在 argparse 中正常工作)

    • 一些功能,如版本字符串的模板(请提交错误报告)

  • galaxyxml

    • 条件/when 的错误(可能是)

  • argparse2tool Galaxy XML 输出

    • 支持以类似 argparse 的方式声明输出文件

  • argparse2tool CWL 输出

    • argparse 的一些功能无法迁移到 CWL。

      1. nargs=N。CWL(目前)无法指定参数数量。

      2. add_argument()const 参数。所有常量必须在作业文件中指定。

      3. 不支持自定义类型和自定义操作。

      4. 在 CWL 中,参数组不工作,因为参数是按特殊算法排序的

      5. 不支持互斥。

许可证

Apache 许可证,v2

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面