Source code for cursus.core.base.step_contract

"""
StepContract — immutable data loaded from .step.yaml.

Replaces ScriptContract and TrainingScriptContract Pydantic models.
No path-convention validation; YAML is the single source of truth.
Path validation belongs in CI/lint tooling (JSON Schema), not in the runtime data holder.
"""

from dataclasses import dataclass, field
from typing import Dict, List


[docs] @dataclass(frozen=True) class StepContract: """Immutable contract data loaded from .step.yaml.""" entry_point: str expected_input_paths: Dict[str, str] expected_output_paths: Dict[str, str] expected_arguments: Dict[str, str] = field(default_factory=dict) required_env_vars: List[str] = field(default_factory=list) optional_env_vars: Dict[str, str] = field(default_factory=dict) framework_requirements: Dict[str, str] = field(default_factory=dict) description: str = ""