用于与pacbio pbsmrtpipe工作流引擎接口的库和工具。
pbcommand的Python项目详细描述
PBcommand高级概述
==
共同所有者:
[natechols](https://github.com/natechols)
[完整文档](http://pbcommand.readthedocs.org/en/latest/)
[![循环ci](https://circleci.com/gh/pacificbiosciences/pbcommand.svg?style=svg)(https://circleci.com/gh/pacificbiosciences/pbcommand)
pacbio库,用于与pbsmrtpipe工作流引擎接口的常用实用程序、模型和工具。
若要与pbsmrtpipe工作流引擎集成,必须能够生成**工具合同**,并且能够从**解析的工具契约**运行。
a**工具契约**包含EXE的元数据,例如输入、输出和选项的文件类型。
tract.json)(和[avro schema](https://github.com/pacificbiosciences/pbcommand/blob/master/pbcommand/schemas/tool廑contract.avsc))
示例[解析工具契约json](https://github.com/pacificbiosciences/pbcommand/blob/master/tests/data/resolved廑tool廑contract廑dev app.json)(和[avro schema](https://github.com/pacificbiosciences/pbcommand/blob/master/pbcommand/schemas/resolved_tool_contract.avsc))
有两种主要用例,第一种是包装/调用外部python包中定义的python函数,或者脚本。其次,创建一个支持发出工具契约、运行解析工具契约和完成argparse样式的cli的cli工具。
example from**pbcommand.cli.examples**
``python
import sys
import logging
from pbcommand.models import filetype
from pbccommand.cli导入registry_builder,registry_runner
log=logging.getlogger(u name_u)
它应该从库代码中导入
编写模拟输出文件以进行测试,否则,如果ISinstance(output_files,(list,tuple))否则端到端测试将失败
xs=output_files否则,[output_files]
for x in xs:
以open(x,'w')作为writer:
writer.write("mock data\n")
返回0
@registry("dev_qhello_world","0.2.1",filetypes.fasta,filetypes.fasta,nproc=1,options=dict(alpha=1234))
def run_rtc(rtc):
返回"example_main"(rtc.task.input_files[0],rtc.task.output_files[0],nproc=rtc.task.nproc)
>
@registry(dev'u fastq fastq fasta","0.1.0",filetypes.fastq,filetypes.fasta)
>def run_rtc(rtc):
return _example_main(rtc.task.inpu_文件[0],rtc.task.outpu_文件[0])
sys sys sys runner(registrunner(registristry,sys)
```
驱动程序是工作流引擎将调用的命令行接口。
将使用"${exe}/path/to/resolved_tool_contract.json"调用驱动程序
ipe)。
`` bash
$>;python-m pbcommand.cli.examples.dev_quick_hello_world-o/path/to/my tool contracts
```
/>-define parser
-add running from argparse and running from resolved toolcontract funcs to call your main
-add call to driver
导入或定义主函数。
`` python
def run懔my懔main(fasta懔in,fasta懔out,min懔length):
做些事情。main应该返回一个int出口code
return 0
```
ypes.fasta,"fasta-in","fasta-file","pacbio-spec'ed fasta-file")
AME,description
对于argparse,读取长度将转换为--read length,并(通过args.read_length访问)
p.add_int("pbcommand.task_options.dev_u read_length","read length",25,"length filter","min sequence length filter")
返回p
````
define parser
`` python
从pbcommand.models导入tasktypes、symboltypes、get-pbparser
def get-contract-parser():
tool-id="example-namespace.tasks.my-id"
version="0.1.0"或重用version-o对于要使用的处理器,也可以是symboltypes.max_nproc
nproc=1
日志文件、tmp目录、tmp文件。请参阅模型中的resource types,resourcetypes.tmp_dir
resource廑types=()
commandline exe调用"{exe}"path/to/resolved tool contract.json
driver廑exe="python-m pbcommand.cli.example.dev廑app--resolved tool contract"
desc="dev app用于支持em的测试itting tool contracts"
如果要将任务提交给工作流引擎,则将其设置为true如果要将任务提交给群集管理器(例如sge)。
p=get_pbparser(tool_id,version,display_name,desc,driver_exe,is_distributed=is_distributed,nproc=nproc,resource_types=resource_types)
add_args_and_options(p)
return p
`````
定义一个包装层,从工具协定和原始argparse io层调用mainparser.parse_args()
参数的属性在add_args_and_options函数中定义为"labels"。
返回run_my_main(args.fasta_in,args.fasta_out,args.read_length)
def_resolved_tool_contract_runner(resolved_tool_contract):
"
:type resolved_tool_contract:pbcommand.models.resolvedtoolcontract"
rtc=resolved_tool_contract
所有选项都由全局命名空间id引用。这允许工具使用其他工具选项
例如,pbalign使用blasr定义的选项。
返回run_my_main(rtc.task.input_files[0],rtc.task.outputs[0],rtc.task.options["pbcommand.task_options.dev_read_length_"])
`````
add running layer
``python
import sys
import logging
from pbcommand.utils import setup logg
from pbcommand.cli import pbparser_runner
log=logging.getlogger(u name_u)
def main(argv=sys.argv):
:],
get_contract_parser(),
u args_runner,argparse runner func
u resolved_tool_contract_runner,tool contract runner func
log,log instance
安装日志(setup log func)
t;python-m'pbcommand.cli.examples.dev廑app'--emit tool contract
```
,您可以从**解析的工具契约**
``sh
>;python-m pbcommand.cli.example.dev廑app--resolved tool contract/path/to/resolved廑contract.json
````
请参阅["pbcommand.cli.examples"中的开发应用程序(https://github.com/pacificbiosciences/pbcommand/blob/master/pbcommand/cli/examples/dev_app.py)对于一个完整的应用程序(它们需要安装pbcore)。
除了对tc/rtc的支持外,还对任务选项提供了完整的argparse支持。下面是**帮助**的一个示例。
```sh
(pbcommand\u test)pbcommand$>;python-m'pbcommand.cli.examples.dev_app'--help
用法:dev_app.py[-h][-v][--versions][--emit tool contract]
[--解析的工具契约解析的工具契约]
[--日志级别的日志日志级别][--debug]
[--读取长度读取长度]
fasta-u-in-fasta-u-out
dev-app用于测试,支持发出工具契约
positional参数:
pacbio-spec'ed fasta文件中的fasta-u
fasta-out-filtered fasta文件
消息和退出
-v,--版本显示程序的版本号,退出
--版本显示单个组件的版本(默认值:无)
--将工具合约发送到stdout(默认值:false)
--解析工具合约解析工具合约
直接从pacbio解析的工具协定
(默认值:无)
--日志级别日志级别
设置日志级别(默认值:10)
--调试到stdout(默认值:false)
--读取长度读取长度
最小序列长度筛选器(默认值:25)
```
==
共同所有者:
[natechols](https://github.com/natechols)
[完整文档](http://pbcommand.readthedocs.org/en/latest/)
[![循环ci](https://circleci.com/gh/pacificbiosciences/pbcommand.svg?style=svg)(https://circleci.com/gh/pacificbiosciences/pbcommand)
pacbio库,用于与pbsmrtpipe工作流引擎接口的常用实用程序、模型和工具。
若要与pbsmrtpipe工作流引擎集成,必须能够生成**工具合同**,并且能够从**解析的工具契约**运行。
a**工具契约**包含EXE的元数据,例如输入、输出和选项的文件类型。
tract.json)(和[avro schema](https://github.com/pacificbiosciences/pbcommand/blob/master/pbcommand/schemas/tool廑contract.avsc))
示例[解析工具契约json](https://github.com/pacificbiosciences/pbcommand/blob/master/tests/data/resolved廑tool廑contract廑dev app.json)(和[avro schema](https://github.com/pacificbiosciences/pbcommand/blob/master/pbcommand/schemas/resolved_tool_contract.avsc))
有两种主要用例,第一种是包装/调用外部python包中定义的python函数,或者脚本。其次,创建一个支持发出工具契约、运行解析工具契约和完成argparse样式的cli的cli工具。
example from**pbcommand.cli.examples**
``python
import sys
import logging
from pbcommand.models import filetype
from pbccommand.cli导入registry_builder,registry_runner
log=logging.getlogger(u name_u)
编写模拟输出文件以进行测试,否则,如果ISinstance(output_files,(list,tuple))否则端到端测试将失败
xs=output_files否则,[output_files]
for x in xs:
以open(x,'w')作为writer:
writer.write("mock data\n")
返回0
@registry("dev_qhello_world","0.2.1",filetypes.fasta,filetypes.fasta,nproc=1,options=dict(alpha=1234))
def run_rtc(rtc):
返回"example_main"(rtc.task.input_files[0],rtc.task.output_files[0],nproc=rtc.task.nproc)
>
@registry(dev'u fastq fastq fasta","0.1.0",filetypes.fastq,filetypes.fasta)
>def run_rtc(rtc):
return _example_main(rtc.task.inpu_文件[0],rtc.task.outpu_文件[0])
sys sys sys runner(registrunner(registristry,sys)
```
驱动程序是工作流引擎将调用的命令行接口。
将使用"${exe}/path/to/resolved_tool_contract.json"调用驱动程序
ipe)。
`` bash
$>;python-m pbcommand.cli.examples.dev_quick_hello_world-o/path/to/my tool contracts
```
/>-define parser
-add running from argparse and running from resolved toolcontract funcs to call your main
-add call to driver
导入或定义主函数。
`` python
def run懔my懔main(fasta懔in,fasta懔out,min懔length):
做些事情。main应该返回一个int出口code
return 0
```
ypes.fasta,"fasta-in","fasta-file","pacbio-spec'ed fasta-file")
AME,description
对于argparse,读取长度将转换为--read length,并(通过args.read_length访问)
p.add_int("pbcommand.task_options.dev_u read_length","read length",25,"length filter","min sequence length filter")
返回p
````
define parser
`` python
从pbcommand.models导入tasktypes、symboltypes、get-pbparser
def get-contract-parser():
tool-id="example-namespace.tasks.my-id"
version="0.1.0"或重用version-o对于要使用的处理器,也可以是symboltypes.max_nproc
nproc=1
日志文件、tmp目录、tmp文件。请参阅模型中的resource types,resourcetypes.tmp_dir
resource廑types=()
commandline exe调用"{exe}"path/to/resolved tool contract.json
driver廑exe="python-m pbcommand.cli.example.dev廑app--resolved tool contract"
desc="dev app用于支持em的测试itting tool contracts"
如果要将任务提交给工作流引擎,则将其设置为true如果要将任务提交给群集管理器(例如sge)。
p=get_pbparser(tool_id,version,display_name,desc,driver_exe,is_distributed=is_distributed,nproc=nproc,resource_types=resource_types)
add_args_and_options(p)
return p
`````
定义一个包装层,从工具协定和原始argparse io层调用mainparser.parse_args()
参数的属性在add_args_and_options函数中定义为"labels"。
返回run_my_main(args.fasta_in,args.fasta_out,args.read_length)
def_resolved_tool_contract_runner(resolved_tool_contract):
"
:type resolved_tool_contract:pbcommand.models.resolvedtoolcontract"
rtc=resolved_tool_contract
所有选项都由全局命名空间id引用。这允许工具使用其他工具选项
例如,pbalign使用blasr定义的选项。
返回run_my_main(rtc.task.input_files[0],rtc.task.outputs[0],rtc.task.options["pbcommand.task_options.dev_read_length_"])
`````
add running layer
``python
import sys
import logging
from pbcommand.utils import setup logg
from pbcommand.cli import pbparser_runner
log=logging.getlogger(u name_u)
def main(argv=sys.argv):
:],
get_contract_parser(),
u args_runner,argparse runner func
u resolved_tool_contract_runner,tool contract runner func
log,log instance
安装日志(setup log func)
t;python-m'pbcommand.cli.examples.dev廑app'--emit tool contract
```
,您可以从**解析的工具契约**
``sh
>;python-m pbcommand.cli.example.dev廑app--resolved tool contract/path/to/resolved廑contract.json
````
请参阅["pbcommand.cli.examples"中的开发应用程序(https://github.com/pacificbiosciences/pbcommand/blob/master/pbcommand/cli/examples/dev_app.py)对于一个完整的应用程序(它们需要安装pbcore)。
除了对tc/rtc的支持外,还对任务选项提供了完整的argparse支持。下面是**帮助**的一个示例。
```sh
(pbcommand\u test)pbcommand$>;python-m'pbcommand.cli.examples.dev_app'--help
用法:dev_app.py[-h][-v][--versions][--emit tool contract]
[--解析的工具契约解析的工具契约]
[--日志级别的日志日志级别][--debug]
[--读取长度读取长度]
fasta-u-in-fasta-u-out
dev-app用于测试,支持发出工具契约
positional参数:
pacbio-spec'ed fasta文件中的fasta-u
fasta-out-filtered fasta文件
消息和退出
-v,--版本显示程序的版本号,退出
--版本显示单个组件的版本(默认值:无)
--将工具合约发送到stdout(默认值:false)
--解析工具合约解析工具合约
直接从pacbio解析的工具协定
(默认值:无)
--日志级别日志级别
设置日志级别(默认值:10)
--调试到stdout(默认值:false)
--读取长度读取长度
最小序列长度筛选器(默认值:25)
```