Skip to main content

EOAP Validator

Inspect an EO Application Package before generating publication artifacts or registering it with a platform. eoap-validator is a standalone Python library and CLI, not a Transpiler-Mate plugin. It validates CWL, evaluates EOAP package rules derived from the legacy EOEPCA validator, and optionally checks the actual Transpiler-Mate software metadata model.

Install

Python 3.10 or newer:

python -m pip install .
eoap-validator --help

This initial checkout requires the accompanying cwl-loader 0.25.1 file-URI fix. Until that release is published, install both source checkouts together:

python -m pip install ../cwl-loader .

Validate a workflow

eoap-validator 'workflow.cwl#main' \
  --profile eoap-package \
  --profile metadata \
  --output build/validation.json

The source accepts local paths, file: URIs and HTTP(S) URLs. The fragment selects one Workflow; without a fragment, exactly one Workflow must exist in the root document. Empty, unknown and non-Workflow selections are errors. There is no --entrypoint option. Rules inspect the selected reachable graph; parsing and resolution can still encounter invalid declarations elsewhere in the document.

The eoap-package profile requires nonempty label and doc on entry-workflow outputs. It recommends these fields on reachable workflow steps and on CommandLineTool inputs and outputs; missing recommendations produce warnings.

The default profile is eoap-package. CWL checks always run. A package that lacks Transpiler-Mate metadata can still receive EOAP findings. No workflow is executed and no container image is pulled by the validator. Fetching CWL dependencies or JSON-LD contexts may require network access.

# Machine-readable stdout, including findings and assessment coverage:
eoap-validator 'workflow.cwl#main' --format json

# Make advisory findings fail CI as well:
eoap-validator 'workflow.cwl#main' --fail-on warning

An exit status of zero means the selected failure threshold was not exceeded; it is not a certificate of complete EOAP or platform compliance. Always inspect needs-review and blocked counts in the report.

Staging applicability

Staging is conditional: a Directory parameter alone does not prove correct staging. Enable the profile and supply a JSON file identifying staged parameters:

{
  "inputs": {"main": ["products"], "processor": ["products"]},
  "outputs": {"processor": ["result"]}
}
eoap-validator 'workflow.cwl#main' --profile eoap-package \
  --profile eoap-staging --staging staging.json --output validation.json

Keys are normalized process IDs and values are parameter IDs. Configuration is an explicit applicability declaration: omitted parameters are not assessed as staged. Unknown processes/parameters fail. Without configuration, staging is reported as needing review. Complete stage-out file coverage always requires review of bindings and execution evidence.

Library

from eoap_validator import validate

report = validate("workflow.cwl#main", profiles=("eoap-package", "metadata"))
print(report.to_dict())
raise SystemExit(report.exit_code())

See profiles, architecture and boundaries, and CI usage. The library returns structured failures for bad input documents; invalid API configuration raises ValueError.

Development

python -m pip install ../cwl-loader '.[test]'
pytest
ruff check src tests
ruff format --check src tests
mypy src
python -m build

The serialized report contract is schemas/report.yaml, a JSON Schema (Draft 2020-12) written as YAML. Regenerate its Pydantic models with:

task generate_ms_skeleton

This runs the shared json:create_models task and writes src/eoap_validator/models.py. Do not edit generated models manually. Custom summary, exit-code and finding-normalization behavior lives in report.py. report.to_dict(fail_on="warning") returns a generated-model-validated report with matching counts, exit code and failure threshold.

Alternatively use hatch run test:test and task after dependencies are available. The regression suite includes an attributed fixture from EOEPCA's legacy project; see NOTICE. No legacy implementation is vendored.

Licensed under Apache-2.0.

Metadata

Release files for eoap-validator 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for eoap-validator 0.1.0
File Size Uploaded
eoap_validator-0.1.0.tar.gz 32.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for eoap-validator 0.1.0
File Interpreter ABI Platform
eoap_validator-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 55.7 kB

Release files / eoap_validator-0.1.0.tar.gz

Download URL eoap_validator-0.1.0.tar.gz
Size 32.2 kB
Tags Source
SHA-256 checksum
How to use checksums
6bb4f8036a18f150e57e064c4d8d776aa18f74768cc0dc4a42cdf5a6e875ca1a
BLAKE2b-256 checksum
How to use checksums
085ab1552d90937dc66c30e3b9c5a9a542b9f7fa39b9bcc7f640259881775cae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.

Transparency log

Release files / eoap_validator-0.1.0-py3-none-any.whl

Download URL eoap_validator-0.1.0-py3-none-any.whl
Size 23.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
06da3e634d9a7200e7f565a692017b0e5ca16cd197919ad7317d656eed911280
BLAKE2b-256 checksum
How to use checksums
4cfa08a5bfc33d4f76761f370005034b15d90a0428bcd44a96ad43ad1464ea97
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page