Skip to main content

Shared utilities for ZOO-Project CWL runners

Project description

zoo-runner-common

A shared utility library for ZOO-Project CWL runners – centralizing reusable components across runners like Calrissian, Argo Workflows, and WES.


Overview

The zoo-runner-common repository provides core shared components used across multiple ZOO CWL runners. It eliminates code duplication by hosting:

  • Common base class (BaseRunner) with 8+ shared methods
  • Zoo-specific configuration handlers (ZooConf, ZooInputs, ZooOutputs)
  • CWL workflow parsing and resource evaluation (CWLWorkflow)
  • Execution handler interface (ExecutionHandler) for hooks
  • Service stubs (ZooStub) to communicate with ZOO kernel

Key Benefits

  • ~437 lines of code duplication eliminated across 3 runners
  • Single source of truth for common functionality
  • Easier maintenance - fix once, benefit everywhere
  • Consistent behavior across all runners

Directory Structure

zoo-runner-common/
├── base_runner.py      # Abstract BaseRunner with common methods
├── zoo_conf.py         # ZooConf, ZooInputs, ZooOutputs, CWLWorkflow
├── handlers.py         # ExecutionHandler abstract base class
├── zoostub.py          # ZooStub for ZOO kernel communication
└── __init__.py         # Package initialization

Installation

As a dependency (recommended)

Add to your runner's pyproject.toml:

[project]
dependencies = [
    "zoo-runner-common @ git+https://github.com/ZOO-Project/zoo-runner-common.git@main",
]

Local development

export PYTHONPATH="$PYTHONPATH:/path/to/zoo-runner-common"

Or use relative imports:

import sys
sys.path.insert(0, os.path.abspath('../zoo-runner-common'))
from base_runner import BaseRunner
from zoo_conf import ZooConf, ZooInputs, ZooOutputs, CWLWorkflow
from handlers import ExecutionHandler

Components

BaseRunner (base_runner.py)

Abstract base class providing common functionality for all CWL runners:

Methods provided:

  • get_workflow_id() - Get workflow identifier
  • get_workflow_inputs(mandatory=False) - Get workflow input parameters
  • get_max_cores() - Get maximum CPU cores from CWL
  • get_max_ram() - Get maximum RAM from CWL
  • get_volume_size(unit='Gi') - Calculate volume size (supports Mi/Gi)
  • assert_parameters(mandatory=True) - Validate required inputs
  • get_processing_parameters() - Get execution parameters
  • get_namespace_name() - Generate unique namespace name
  • update_status(progress, message) - Update execution status
  • prepare() - Pre-execution preparation with hooks
  • finalize(log, output, usage_report, tool_logs) - Post-execution finalization

Abstract methods (to implement):

  • wrap() - Wrap CWL with stage-in/stage-out
  • execute() - Execute the workflow

Zoo Configuration Classes (zoo_conf.py)

Class Description
ZooConf Wraps ZOO configuration dictionary
ZooInputs Handles input parameter conversion and validation
ZooOutputs Manages output parameters
CWLWorkflow Parses CWL, evaluates resources, handles scatter
ResourceRequirement CWL resource hints dataclass

Key Features:

  • Advanced type conversion (int, float, bool, arrays)
  • File handling with format metadata
  • OGC bounding box support
  • NULL value handling
  • Array inputs with isArray

ExecutionHandler (handlers.py)

Abstract base class for execution customization:

class ExecutionHandler(ABC):
    @abstractmethod
    def pre_execution_hook(self): pass
    
    @abstractmethod
    def post_execution_hook(self, log, output, usage_report, tool_logs): pass
    
    @abstractmethod
    def get_secrets(self): pass
    
    @abstractmethod
    def get_pod_env_vars(self): pass
    
    @abstractmethod
    def get_pod_node_selector(self): pass
    
    @abstractmethod
    def handle_outputs(self, log, output, usage_report, tool_logs): pass
    
    @abstractmethod
    def get_additional_parameters(self): pass

Usage Example

from zoo_runner_common.base_runner import BaseRunner
from zoo_runner_common.handlers import ExecutionHandler

class MyCustomRunner(BaseRunner):
    def wrap(self):
        # Implement CWL wrapping logic
        return wrapped_cwl
    
    def execute(self):
        # Prepare execution
        cwljob = self.prepare()
        
        # Execute workflow (custom logic)
        result = my_executor.run(cwljob.cwl, cwljob.params)
        
        # Finalize
        self.finalize(log, output, usage_report, tool_logs)
        return result

Runners Using zoo-runner-common

Runner Backend Repository
zoo-calrissian-runner Calrissian/Kubernetes EOEPCA/zoo-calrissian-runner
zoo-argowf-runner Argo Workflows ZOO-Project/zoo-argowf-runner
zoo-wes-runner WES/TOIL ZOO-Project/zoo-wes-runner

Module Reference

Module Description
BaseRunner Abstract runner blueprint all runners must extend
ZooConf Parses conf.json, manages job ID, state
ZooInputs Parses inputs.json, formats CWL-style parameters
ZooOutputs Handles writing and setting output results
CWLWorkflow Loads, parses, and analyzes CWL workflows
ResourceRequirement Parses and evaluates CWL resource hints/requirements
wrapper_utils Provides helper to build wrapped CWL pipeline
ZooStub Interacts with ZOO's lenv for progress updates

Used By

  • zoo-wes-runner
  • zoo-argowf-runner
  • zoo-calrissian-runner

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

zoo_runner_common-0.1.3.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

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

zoo_runner_common-0.1.3-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file zoo_runner_common-0.1.3.tar.gz.

File metadata

  • Download URL: zoo_runner_common-0.1.3.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for zoo_runner_common-0.1.3.tar.gz
Algorithm Hash digest
SHA256 7b93cf37800408e53eb5864f21ffb32441136b0be9e1ef1a4495293fce00169a
MD5 701ac7e9b4b8eacd075f430d95364289
BLAKE2b-256 64784a52d952da45a8f8daeb2f0af5db5b1f53fff90b6ced016a90bededec2af

See more details on using hashes here.

Provenance

The following attestation bundles were made for zoo_runner_common-0.1.3.tar.gz:

Publisher: publish-pypi.yml on ZOO-Project/zoo-runner-common

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

File details

Details for the file zoo_runner_common-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for zoo_runner_common-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9aeb829950074a34c8cae8ac9b797843be1e3274e5b705ed095936e1dc52799b
MD5 8ac14b5b56144bc76a6a6275a589f067
BLAKE2b-256 2ad4ec313530c8ea79fa2564604634d108a085402c3ab9ebe081d1f6aa8c2bc7

See more details on using hashes here.

Provenance

The following attestation bundles were made for zoo_runner_common-0.1.3-py3-none-any.whl:

Publisher: publish-pypi.yml on ZOO-Project/zoo-runner-common

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