Skip to main content

YAML workflow engine — parses, validates, and executes step-based workflows with pluggable Action / Evaluator / Predicate / Iterable methods.

Project description

YAML Workflow Framework

YAML workflow engine — parses, validates, and executes step-based workflows with pluggable Action / Evaluator / Predicate / Iterable methods.

Overview

vcti-ywf is the workflow engine behind VCollab Insights. A workflow is a directory of YAML files — about.yaml, variables/main.yaml, steps/main.yaml — that describe an automated process declaratively. The engine parses those files (with support for !var, !include, and !module tags), resolves variables, evaluates control-flow blocks (if-else, for-each, try-except), and dispatches each step to a registered method plugin.

Method plugins come in four typed shapes — Action (side-effecting), Evaluator (produces a value), Predicate (boolean test), and Iterable (yields keys for for-each). A built-in stdlib package ships common methods; downstream consumers add domain-specific methods (CAE data extraction, plotting, report generation) by registering their own classes.

Workflow YAML is evaluated against a sandboxed Context by default — - evaluator: evaluate expressions go through simpleeval, and {{ var }} template interpolation goes through Jinja2's SandboxedEnvironment. Engine-internal context variables (__runtime__ and friends) are filtered from author-facing scope. Hosts that run fully-trusted YAML can opt into raw eval or the full Jinja2 environment by constructing the Context themselves and passing it to Runner.run().

Installation

pip install vcti-ywf>=3.0.1

In requirements.txt

vcti-ywf>=3.0.1

In pyproject.toml dependencies

dependencies = [
    "vcti-ywf>=3.0.1",
]

Quick Start

Run a workflow from Python:

from pathlib import Path

from vcti.ywf import Runner, Workflow

workflow = Workflow(Path("path/to/my-workflow"))
workflow.read_all()

result = Runner(workflow).run({"input_file": "data/model.h5"})

print(result.return_value)   # top-level block's value
print(result.outputs)        # declared outputs read from final context

For monitoring or debugging, build an ObservableContext, attach observers, and pass it to run():

from vcti.ywf import ObservableContext, Runner
from vcti.ywf.execution.observers.history_observer import HistoryObserver

context = ObservableContext()
context.add_observer(HistoryObserver())

Runner(workflow).run({"input_file": "data/model.h5"}, context)

A minimal workflow directory looks like:

my-workflow/
├── about.yaml              # title, description, tags, images
├── variables/
│   └── main.yaml           # inputs + outputs declarations
└── steps/
    └── main.yaml           # execution steps

variables/main.yaml declares the workflow's external contract — inputs (supplied by the caller) and outputs (produced by the run):

inputs:
  - name: input_file
    type: input_file_path
    description: Path to the simulation results
    default: data/sample.h5

outputs:
  - name: mode_count
    type: int
    default: 0
    description: Number of modes extracted.

steps/main.yaml lists actions, evaluators, predicates, and iterables — each is a YAML mapping keyed by its method name. The data-scope actions illustrate the typical pattern:

- action: define_data_scope
  name: simulation
  type: paths-group

- action: add_path_source
  path: !var input_file
  format: hdf5-file
  label: results

- action: load_data_scope

- if:
    predicate: is_data_scope_valid
  then:
    - action: log_message
      message: "Data scope ready."
  else:
    - action: log_message
      log_level: error
      message: "Data scope failed to load."

Documentation

User guides — start here:

  • docs/tutorial.md — walk through the greeting workflow end-to-end with the Python API, then expand to control-flow blocks and data-scope actions.
  • docs/yaml-reference.md — exhaustive field reference for about.yaml, variables/main.yaml, steps/main.yaml, and every step type (action / evaluator / predicate / iterable / if-else / for-each / try-except).
  • docs/yaml-tags.md!var, !include, and !module semantics with scoping rules.
  • docs/plugins.md — author guide for custom workflow methods.
  • docs/api.md — autogenerated API reference.

Developer reference — engine concepts subpackage by subpackage:

Internals — for engine maintainers and tool builders:


Dependencies

Third-party:

  • pydantic (>=2.0) — model validation
  • PyYAML (>=6.0) and pyyaml-include (>=2.0) — YAML parsing with !include
  • Jinja2 (>=3.0) — {{ var }} interpolation in Property[str] fields (sandboxed via SandboxedEnvironment in the default Context)
  • simpleeval (>=1.0) — sandboxed expression evaluator for - evaluator: evaluate
  • NumPy (>=1.24) — array handling via vcti-array-tree
  • pandas (>=2.0) — CSV reading in the read_file evaluator and DataFrame iteration in list_items

VCollab platform packages:

Optional extras:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vcti_ywf-3.0.1.tar.gz (136.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vcti_ywf-3.0.1-py3-none-any.whl (107.5 kB view details)

Uploaded Python 3

File details

Details for the file vcti_ywf-3.0.1.tar.gz.

File metadata

  • Download URL: vcti_ywf-3.0.1.tar.gz
  • Upload date:
  • Size: 136.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for vcti_ywf-3.0.1.tar.gz
Algorithm Hash digest
SHA256 e1e4378ebe2159d414054acd99defcb2caa7f73beeaab2642692644726c90ea5
MD5 233e717d5f1dfacc0af76738ca06abe9
BLAKE2b-256 a168d9f112e189cbb3fc65623c07dcb4f632da8356ad912643bff268786757b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for vcti_ywf-3.0.1.tar.gz:

Publisher: release.yml on vcollab/vcti-python-ywf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vcti_ywf-3.0.1-py3-none-any.whl.

File metadata

  • Download URL: vcti_ywf-3.0.1-py3-none-any.whl
  • Upload date:
  • Size: 107.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for vcti_ywf-3.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a9d3b759f97d5a645993f0a0b8af0ef8700aeceb0efe21ef842b661fc3b9e507
MD5 0d43ac3be6e1cb6bb90da09c20a9e3ca
BLAKE2b-256 2a01407cd86e366ad2f55c506910bff484ffa0e880ad73b8e34e7a69b13a1af6

See more details on using hashes here.

Provenance

The following attestation bundles were made for vcti_ywf-3.0.1-py3-none-any.whl:

Publisher: release.yml on vcollab/vcti-python-ywf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page