WDL workflow inputs validation
Project description
winval
Workflow inputs validation python library
- Currently, supports WDL workflows.
- Constraints on inputs can be written as specially tagged (#@wv) comments in the WDL inputs section.
- The syntax of constraints is a python-similar DSL, with ANTLR defined grammar.
- The WDL + inputs.json can be validated using a script/function before submitting a workflow.
Installation:
pip install winval
Usage:
validate_wdl_constraints
From python
from winval.validate_wdl_constraints import run_winval
is_validated = run_winval(wdl_file, json_file)
From unix command-line:
python winval/validate_wdl_constraints.py --wdl <wdl_file> --json <json_file>
cloud_files_validater
Make sure google-storage permissions are equivalent to the batch workers permissions
From python
from winval.cloud_files_validator import CloudFilesValidator
is_validated = CloudFilesValidator(args.wdl, args.json).validate()
From unix command-line:
python winval/cloud_files_validator.py --wdl <wdl_file> --json <json_file>
WDL constraints example
workflow MyWorkflow {
input {
File file
Int c
File* opt_file_1
File* opt_file_2
Array[File] files
Array[File] index_files
MyStruct struct_instance
#@wv defined(opt_file_1) <-> defined(opt_file_2)
#@wv defined(opt_file_1) -> c > 1
#@wv len(files) == len(index_files)
#@wv len(files) >= 0
#@wv len(index_files) >= 0
#@wv c <= 1 and c >= 0
#@wv suffix(file) == ".fasta"
#@wv suffix(files) <= {".bam", ".cram"}
#@wv prefix(index_files) == files
#@wv len(struct_instance['field_a']) > 0
}
...
}
struct MyStruct{
String field_a,
String field_b
}
Generate parsers from grammar:
cd <project_root>/winval
antlr4 -Dlanguage=Python3 winval.g4 -visitor -o antlr
Available atomic expressions:
- int: 5
- float: 5.6
- bool: True, False
- str: "some string", 'some_string'
- workflow_variable: my_var
- evaluates to value given by json conf, or None if not defined in json
- empty_set: {}
Available python operators
+,-,*,**,/,&,|,%and,or,in<,<=,==,>=,>,!=- Notice the following useful operators work for sets:
-: set subtraction&: set intersection|: is set union<=: subset
Available python functions
len(),not()basename(),splitext()(from os.path)
Available convenience functions and operators:
x <-> y: if-and-only-if logical operator (if x is true if and only if y is true)x -> y: implies logical operator (if x is true then y should be true)defined(x): if x a defined variableprefix(x): return path prefix of String/File or list of prefixes forsuffix(x): return path suffix of String/File or set of suffixes for Array[String]/Array[File]
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
winval-0.7.5.tar.gz
(28.1 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
winval-0.7.5-py3-none-any.whl
(33.4 kB
view details)
File details
Details for the file winval-0.7.5.tar.gz.
File metadata
- Download URL: winval-0.7.5.tar.gz
- Upload date:
- Size: 28.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.11.0 Linux/6.8.0-1021-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0c0025d21b631059e8a3fbe3a7f0dcc59dc6705ae2ff9de767962e201f5365c
|
|
| MD5 |
e09ca2fd93e2c302f59303fc5f07c6cb
|
|
| BLAKE2b-256 |
8993d666f5b83698ef7ba9b8004e8597f03f2d657289be5059a7ed04097774e1
|
File details
Details for the file winval-0.7.5-py3-none-any.whl.
File metadata
- Download URL: winval-0.7.5-py3-none-any.whl
- Upload date:
- Size: 33.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.11.0 Linux/6.8.0-1021-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a7f139a7e49675fd94edfb93ed75eb5ae4909ed16d1f63412d4f80d49cccda6
|
|
| MD5 |
6eb6ce175f90526aa435743c912587b0
|
|
| BLAKE2b-256 |
6b6a7d614f6a15f9703c2ba7220554cad148d245a6114645169cbf40e22a4ec8
|