在远程 snakedeploy-ed 工作流中访问文件
Accessing files in a remotely snakedeploy-ed workflow
当将 snakedeploy 与远程存储在 github 上的工作流一起使用时,该远程工作流从其自己的“workflow/scripts/”或“resources/”目录访问文件的当前最佳实践是什么?
例如:运行宁
snakedeploy deploy-workflow --tag ${some_branch_or_tag} https://github.com/cbg-ethz/V-pipe .
将产生一个 workflow/Snakemake 指向远程:
configfile: "config/config.yaml"
# declare https://github.com/cbg-ethz/V-pipe as a module
module V_pipe:
snakefile:
"https://github.com/cbg-ethz/V-pipe/raw/${some_branch_or_tag}/workflow/Snakefile"
config:
config
# use all rules from https://github.com/cbg-ethz/V-pipe
use rule * from V_pipe
我们应该如何修改这些远程 workflow/Snakefile
和 workflow/rules/*.smk
,以便它们可以:
- 运行
workflow/scripts/*.py
中的脚本
- 在
resources/<virus>/<reference>.fasta
中加载序列
- 在
workflow/schemas/*.json
中加载一个JSON用于直接操作
- 打开并加载额外的 YAML 文件,例如
config/hiv.yaml
或 config/sars-cov-2.yaml
?
到目前为止,这是通过使用 srcdir()
然后直接使用其输出来实现的。但这显然会中断,因为 srcdir 现在可以生成 URLs.
通过检查 validate 是如何做到这一点的,在我看来,策略是:
- 使用
infer_source_file()
推断源文件类型(本地文件与URL)
- 使用
workflow.sourcecache.open()
下载(或直接打开)文件(带集成缓存)。
所以我的问题是:
- 这是规范的方式吗? (而且还没有记录,因为它是最新的 snakemake 6.8.1)
- 是否有我完全缺少的其他最佳实践?
从 snakemake 版本 6.8.1 开始,文档得到了更新,现在有一个用于获取此类文件的官方文档函数:
https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#accessing-auxiliary-source-files
这个 function internally 确实依赖于 infer_source / sourcecache.open 序列。
它 return 有一个元组:
- 路径
- 文件内容(来自缓存内容)
- 自动类型识别
- 文件是否是本地文件。
当将 snakedeploy 与远程存储在 github 上的工作流一起使用时,该远程工作流从其自己的“workflow/scripts/”或“resources/”目录访问文件的当前最佳实践是什么?
例如:运行宁
snakedeploy deploy-workflow --tag ${some_branch_or_tag} https://github.com/cbg-ethz/V-pipe .
将产生一个 workflow/Snakemake 指向远程:
configfile: "config/config.yaml"
# declare https://github.com/cbg-ethz/V-pipe as a module
module V_pipe:
snakefile:
"https://github.com/cbg-ethz/V-pipe/raw/${some_branch_or_tag}/workflow/Snakefile"
config:
config
# use all rules from https://github.com/cbg-ethz/V-pipe
use rule * from V_pipe
我们应该如何修改这些远程 workflow/Snakefile
和 workflow/rules/*.smk
,以便它们可以:
- 运行
workflow/scripts/*.py
中的脚本
- 在
resources/<virus>/<reference>.fasta
中加载序列
- 在
workflow/schemas/*.json
中加载一个JSON用于直接操作 - 打开并加载额外的 YAML 文件,例如
config/hiv.yaml
或config/sars-cov-2.yaml
?
到目前为止,这是通过使用 srcdir()
然后直接使用其输出来实现的。但这显然会中断,因为 srcdir 现在可以生成 URLs.
通过检查 validate 是如何做到这一点的,在我看来,策略是:
- 使用
infer_source_file()
推断源文件类型(本地文件与URL) - 使用
workflow.sourcecache.open()
下载(或直接打开)文件(带集成缓存)。
所以我的问题是:
- 这是规范的方式吗? (而且还没有记录,因为它是最新的 snakemake 6.8.1)
- 是否有我完全缺少的其他最佳实践?
从 snakemake 版本 6.8.1 开始,文档得到了更新,现在有一个用于获取此类文件的官方文档函数: https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#accessing-auxiliary-source-files
这个 function internally 确实依赖于 infer_source / sourcecache.open 序列。
它 return 有一个元组:
- 路径
- 文件内容(来自缓存内容)
- 自动类型识别
- 文件是否是本地文件。