Genpei (源平) は、Global Alliance for Genomics and Health (GA4GH) により制定された Workflow Execution Service (WES) API 定義に準拠した標準実装です。 Microservice の思想に則り、Flask と cwltool を用いており、Common Workflow Language を用いて作られた、シンプルかつ拡張性の高い REST API Server です。 Common Workflow Language (CWL) により書かれた Workflow の実行や管理をサポートします。
Python 3.6 以上を想定しています。
$ pip3 install genpei
$ genpei
Docker を用いた利用も想定しています。
cwltool 内で Docker-in-Docker (DinD) を用いるため、docker.sock
や /tmp
などを mount しなければなりません。
詳しくは、DockerHub - cwltool のドキュメントを確認してください。
# 起動
$ docker-compose up -d
# 起動確認
$ docker-compose logs
API 仕様は、GitHub - GA4GH WES や SwaggerUI - GA4GH WES を確認してください。
一番簡単な REST API Request として、GET /service-info
の例を挙げます。
GET /service-info
{
"auth_instructions_url": "https://github.com/suecharo/genpei",
"contact_info_url": "https://github.com/suecharo/genpei",
"default_workflow_engine_parameters": [],
"supported_filesystem_protocols": [
"http",
"https",
"file"
],
"supported_wes_versions": [
"1.0.0"
],
"system_state_counts": {},
"tags": {
"wes_name": "genpei"
},
"workflow_engine_versions": {
"cwltool": "3.0.20200324120055"
},
"workflow_type_versions": {
"CWL": {
"workflow_type_version": [
"v1.0",
"v1.1",
"v1.1.0-dev1",
"v1.2.0-dev1",
"v1.2.0-dev2"
]
}
}
}
起動時引数 (--host
and --port
) を指定することで、起動 Host や Port を変更できます。また、これらの引数に対応する環境変数として、GENPEI_HOST
, GENPEI_PORT
が用意されています。
genpei --help
usage: genpei [-h] [--host] [-p] [--debug] [-r] [--service-info]
An implementation of GA4GH Workflow Execution Service Standard as a microservice
optional arguments:
-h, --help show this help message and exit
--host Host address of Flask. (default: 127.0.0.1)
-p , --port Port of Flask. (default: 8080)
--debug Enable debug mode of Flask.
-r , --run-dir Specify the run dir. (default: ./run)
--service-info Specify `service-info.json`. The workflow_engine_versions, workflow_type_versions
and system_state_counts are overwritten in the application.
$ genpei --host 0.0.0.0 --port 5000
Genpei は、投入された workflow や workflow parameter、output files などを file system 上で管理しています。これら全ての file をまとめた directory を run dir と呼んでおり、default は ${PWD}/run
です。run dir の場所は、起動時引数 --run-dir
や環境変数 GENPEI_RUN_DIR
で上書きできます。
run dir 構造は、以下のようになっており、それぞれの run における file 群が配置されています。初期化やそれぞれの run の削除は rm
を用いた物理的な削除により行えます。
$ tree run
.
├── 11
│ └── 11a23a68-a914-427a-80cd-9ad6f7cfd256
│ ├── cmd.txt
│ ├── end_time.txt
│ ├── exe
│ │ └── workflow_params.json
│ ├── exit_code.txt
│ ├── outputs
│ │ ├── ERR034597_1.small_fastqc.html
│ │ ├── ERR034597_1.small.fq.trimmed.1P.fq
│ │ ├── ERR034597_1.small.fq.trimmed.1U.fq
│ │ ├── ERR034597_1.small.fq.trimmed.2P.fq
│ │ ├── ERR034597_1.small.fq.trimmed.2U.fq
│ │ └── ERR034597_2.small_fastqc.html
│ ├── run.pid
│ ├── run_request.json
│ ├── start_time.txt
│ ├── state.txt
│ ├── stderr.log
│ └── stdout.log
├── 14
│ └── ...
├── 2d
│ └── ...
└── 6b
└── ...
POST /runs
の実行は非常に複雑です。Python の requests を用いた例として、GitHub - genpei/tests/post_runs_examples が用意されています。参考にしてください。
開発環境は以下で起動します。
$ docker-compose -f docker-compose.dev.yml up -d --build
$ docker-compose -f docker-compose.dev.yml exec app bash
Lint Tool として、flake8, isort, mypy を用いています。
それぞれの実行方法は以下のとおりです。
$ bash ./tests/lint_and_style_check/flake8.sh
$ bash ./tests/lint_and_style_check/isort.sh
$ bash ./tests/lint_and_style_check/mypy.sh
Test Tool として、pytest を用いてます。
実行方法は以下のとおりです。
$ pytest .
Apache-2.0. See the LICENSE.