Skip to content

Quickstart

Installation

From a cloned repository:

pip install -e .

Usage

You can render a simple Common Workflow Language CWL workflow from a graph composed of one or more tasks as follows:

# workflow.py

from dewret.tasks import task

@task()
def increment(num: int) -> int:
    return num + 1
$ python -m dewret --pretty workflow.py increment num:3
class: Workflow
cwlVersion: 1.2
outputs:
  out:
    outputSource: increment-012ef3b3ffb9d15c3f2837aa4bb20a8d/out
    type: int
steps:
  increment-012ef3b3ffb9d15c3f2837aa4bb20a8d:
    in:
      num:
        default: 3
    out:
    - out
    run: increment

By default dewret uses a dask backend so that dewret.task wraps a dask.delayed, and renders a CWL workflow.

Programmatic Usage

Building and rendering may be done programmatically, which provides the opportunity to use custom renderers and backends, as well as bespoke serialization or formatting.

>>> import sys
>>> import yaml
>>> from dewret.tasks import task, construct
>>> from dewret.renderers.cwl import render
>>> 
>>> @task()
... def increment(num: int) -> int:
...     return num + 1
>>>
>>> result = increment(num=3)
>>> workflow = construct(result)
>>> cwl = render(workflow)
>>> yaml.dump(cwl, sys.stdout, indent=2)
class: Workflow
cwlVersion: 1.2
inputs: {}
outputs:
  out:
    label: out
    outputSource: increment-012ef3b3ffb9d15c3f2837aa4bb20a8d/out
    type: int
steps:
  increment-012ef3b3ffb9d15c3f2837aa4bb20a8d:
    in:
      num:
        default: 3
    out:
    - out
    run: increment