Skip to main content

A kit to process the parameters of the GeneDock workflow (help for batch delivery).

Project description

模板文件说明

使用ini配置文件维护yml中各个位置的变量值有以下优点:

  1. 将嵌套的结构转换为扁平的结构,降低管理和维护的难度
  2. 将无序的结构转为有序的结构,版本变更时更容易检查不同之处
  3. 空的参数模板文件(yml)中许多默认值无需指定,使用ini配置只需关注需要改变的值
  4. 解耦工作流版本、工作流模板版本、参数渲染模块
  5. 配合jinja模板 + gdmetro指定的ini配置模板规则,可以动态生成不同的值,使参数文件渲染与工作流版本更新解耦

参数声明

在ini文件中,使用[DECLARE] section 声明变量,以BGI_WGS的参数为例:

[DECLARE]
project_id = {{project_id}}
subproject_id = {{subproject_id}}
sample_id = {{sample_id}}
cloud_out_dir ={{cloud_out_dir}}
lane_id_list = {{lane_id_list}}
reference_buildversion = {{reference_buildversion}}
date = {{date}}
task_name = {{task_name}}

按照jinja模板的规则,以{{}}两对花括号包裹的为变量,gdmetro会去出花括号中的变量名,并在渲染时传入声明的参数。

注意,等号左边是用于渲染ini文件时检查参渲染结果的,不会参与参数值的替换操作在DECLARE组中,只能出现变量的声明和以;开头的注释,不能出现其他的键值

定义宏

所有的宏定义应该在 [MACROS]中,宏定义用于动态生成一些值,比如生成loadbam的参数列表、 根据reference_buildversion生成chrN、生成参考基因组名称等。

以下是用于动态生成loadbam<?>的实例,``:

  1. (声明)通过lane_id生成item实体
{%macro _loadbamData(lane_id, prefix, pos) -%}
{"enid": null, "name": "{{cloud_out_dir}}/tmp/fq_bam/{{sample_id}}/{{lane_id}}/{{lane_id}}.{{prefix}}{{pos}}.bam", "property": {"block_file": {"block_name": null, "is_block": false, "split_format": "default"}} }
{%- endmacro %}
  1. (声明)根据坐标生成loadnode_bam的值,比如loadnode_bamY
{% macro loadbamList(prefix, pos) -%}
[{%for lane_id in lane_id_list -%}
{{_loadbamData(lane_id, prefix, pos)}} {%-if not loop.last%}, {%endif-%}
{%-endfor%}]
{%- endmacro%}
  1. (应用)动态生成 loaddata_node_bam1 到 loaddata_node_bam22
{%-for index in range(1, 23) -%}
loaddata_node_bam{{index}}.data = {{ loadbamList('bam', index)}}
{%endfor-%}

更多jinja模板的语法请参考文档

参数映射

为了将json/yml的多维结构转为二维结构,我使用 .作为分割符号,将每一级别的名称连接起来,用于唯一标识一个子属性(类似MongoDB), 对于数组,同样模仿MongoDB,使用 $指定第几个元素,程序解析时碰到了$符,则认为用户指定了一个数组中第n个元素的值:

例如配置中的一条项目:loaddata_cnv_head.data.$0.name = 1,在解析时转回多维结构如下:

loaddata_cnv_head:
    data: [{"name": 1}]

为了便于管理,我根据参数文件的结构 Inputs, Outputs, Parameters以及顶级属性做了分组处理,yml的结构如下:

name: 

Inputs:
    xxx:

Outputs:
    xxx:

Parameters:
    xxx:

对应到ini配置文件中的四个分组如下:

[!DIRECT]
name = ???

[Inputs]

[Outputs]

[Parameters]

程序会严格按照分组来读取不同的值填充到空的yml文件中,所以指定变量时需要按照分组填入。 为了方便处理,gdmetro中添加了一个命令行工具,可以提取yml文件中Inputs, Outputs, Parameters的主要变量,其中 包含以下格式:

  1. Inputs/Outputs: ...data.$0.name
  2. Parameters: ...value

命令行使用:

gvariables load -y <yml文件,支持旧版的占位符参数导出> [-i <忽略的参数(后缀)列表,以空格隔开,比如loadbam等通过宏生成的就不需导出>]

gvariables同时也支持对ini配置的检查:

gvariables detection -f <ini文件路径> -v '
{
    "参数名": 参数值
}
'

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gparams-1.0.2.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gparams-1.0.2-py2.py3-none-any.whl (13.7 kB view details)

Uploaded Python 2Python 3

File details

Details for the file gparams-1.0.2.tar.gz.

File metadata

  • Download URL: gparams-1.0.2.tar.gz
  • Upload date:
  • Size: 14.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/40.8.0 requests-toolbelt/0.8.0 tqdm/4.23.4 CPython/2.7.15

File hashes

Hashes for gparams-1.0.2.tar.gz
Algorithm Hash digest
SHA256 5ba47ee1f5befc90a701e3c900fe0800006de611bb297934590ae9e5758ee054
MD5 b7ebe2e4ba9940092ac58b0b2b96251a
BLAKE2b-256 a1af975acfc41f778411ba6112b0a1d88c9034c271a83a2452744edaabb91a0e

See more details on using hashes here.

File details

Details for the file gparams-1.0.2-py2.py3-none-any.whl.

File metadata

  • Download URL: gparams-1.0.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 13.7 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/40.8.0 requests-toolbelt/0.8.0 tqdm/4.23.4 CPython/2.7.15

File hashes

Hashes for gparams-1.0.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 c43975cfbac8b7ba1549fb62c3b4aafa57a6d0695ee0439d412c4a256608db9e
MD5 343c6e5ab166206eb0f6ce910858521b
BLAKE2b-256 0fe6d089408a3a4ebc89314d39ca442d8bfcdaab4cc38a55636b64c26c086056

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page