A kit to process the parameters of the GeneDock workflow (help for batch delivery).
Project description
模板文件说明
使用ini
配置文件维护yml
中各个位置的变量值有以下优点:
- 将嵌套的结构转换为扁平的结构,降低管理和维护的难度
- 将无序的结构转为有序的结构,版本变更时更容易检查不同之处
- 空的参数模板文件(yml)中许多默认值无需指定,使用ini配置只需关注需要改变的值
- 解耦工作流版本、工作流模板版本、参数渲染模块
- 配合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<?>
的实例,``:
- (声明)通过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 %}
- (声明)根据坐标生成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%}
- (应用)动态生成 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
的主要变量,其中
包含以下格式:
- Inputs/Outputs:
...data.$0.name
- Parameters:
...value
命令行使用:
gvariables load -y <yml文件,支持旧版的占位符参数导出> [-i <忽略的参数(后缀)列表,以空格隔开,比如loadbam等通过宏生成的就不需导出>]
gvariables
同时也支持对ini配置的检查:
gvariables detection -f <ini文件路径> -v '
{
"参数名": 参数值
}
'
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for gparams-1.0.2-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c43975cfbac8b7ba1549fb62c3b4aafa57a6d0695ee0439d412c4a256608db9e |
|
MD5 | 343c6e5ab166206eb0f6ce910858521b |
|
BLAKE2b-256 | 0fe6d089408a3a4ebc89314d39ca442d8bfcdaab4cc38a55636b64c26c086056 |