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.1.tar.gz (14.7 kB view hashes)

Uploaded Source

Built Distribution

gparams-1.0.1-py2.py3-none-any.whl (13.6 kB view hashes)

Uploaded Python 2 Python 3

Supported by

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