scriptcwl is a Python package for creating workflows in
Common Workflow Language (CWL). If you give it a number of CWL
CommandLineTools
, you can create a workflow by writing a Python script. This can
be done interactively using Jupyter Notebooks. The full
documentation can be found on Read the Docs.
Given CWL CommandLineTools
for add
and multiply
(these are available
in scriptcwl),
a CWL specification of this workflow can be written as:
from scriptcwl import WorkflowGenerator with WorkflowGenerator() as wf: wf.load(steps_dir='/path_to_scriptcwl/scriptcwl/examples/') num1 = wf.add_input(num1='int') num2 = wf.add_input(num2='int') answer1 = wf.add(x=num1, y=num2) answer2 = wf.multiply(x=answer1, y=num2) wf.add_outputs(final_answer=answer2) wf.save('add_multiply_example_workflow.cwl')
The workflow has two integers as inputs (num1
and num2
), and first adds
these two numbers (wf.add(x=num1, y=num2)
), and then multiplies the answer
with the second input (num2
). The result of that processing step is the output
of the workflow. Finally, the workflow is saved to a file. The result looks like:
#!/usr/bin/env cwl-runner
cwlVersion: v1.0
class: Workflow
inputs:
num1: int
num2: int
outputs:
final_answer:
type: int
outputSource: multiply/answer
steps:
add:
run: add.cwl
in:
y: num2
x: num1
out:
- answer
multiply:
run: multiply.cwl
in:
y: num2
x: add/answer
out:
- answer
The Python and CWL files used in the example can be found in the examples folder.
Install using pip:
pip install scriptcwl
For development:
git clone [email protected]:NLeSC/scriptcwl.git
cd scriptcwl
git checkout develop
pip install -r requirements.txt
python setup.py develop
Run tests (including coverage) with:
python setup.py develop test
To use scriptcwl for creating CWL workflows, you need CWL CommandLineTools
.
There are some software packages that help with generating those
for existing command line tools written in Python:
- argparse2tool: Generate CWL CommandLineTool wrappers (and/or Galaxy tool descriptions) from Python programs that use argparse. Also supports the click argument parser.
- pypi2cwl: Automatically run argparse2cwl on any package in PyPi.
- python-cwlgen: Generate CommandLineTool and DockerRequirement programmatically