Workflow discovery#
How to discover workflows#
All ewoks workflows provided by one or more python modules can be discovered as follows
from ewokscore.workflow_discovery import discover_workflows_from_modules
workflows = discover_workflows_from_modules(
"myproject.workflows.*",
"myproject.subpackage.demo.*",
workflow_extension="json",
)
The workflow_extension can have one of these values
“json”: discover JSON workflow resources
“yaml”: discover YAML workflow resources
None (default): discover both JSON and YAML workflow resources
Module names can contain wildcards “*”.
For example
workflows = discover_workflows_from_modules(
"myproject.*.workflows.*"
)
could discover workflows such as
myproject.module1.workflows.graph1
myproject.module2.workflows.graph2
corresponding to resource files like
myproject/module1/workflows/graph1.json
myproject/module2/workflows/graph2.yaml
The wildcard “*” matches exactly one package or workflow name component.
To discover all workflows provided by all installed python packages
from ewokscore.workflow_discovery import discover_all_workflows
workflows = discover_all_workflows(workflow_extension="yaml")
The workflow discovery mechanism searches for workflow resource files inside python packages.
How to declare workflows to be discovered#
For automatic discovery to work across installed packages, a package that provides ewoks workflows should declare its workflow modules via the entry point mechanism.
# pyproject.toml
[project.entry-points."ewoks.workflows"]
"myproject.workflows.*" = "myproject1"
"myproject.*.demo.*" = "myproject2"
The group name must be “ewoks.workflows”.
The keys are the module patterns in which to discover workflows.
The values are ignored but typically the project name is used so the entry point can be loaded like any python entry point even though it is not used this way.
For example, the entry point
[project.entry-points."ewoks.workflows"]
"myproject.workflows.*" = "myproject1"
can declare workflow resources such as
myproject/workflows/example.json
myproject/workflows/demo.yaml
A project that provides ewoks workflows can also add the “ewoks” keyword to be discoverable in a package repository like PyPI:
# pyproject.toml
[project]
name = "myproject"
keywords = ["ewoks"]