| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- """Repository contracts for formal pipeline state."""
- from __future__ import annotations
- from typing import Any, Protocol
- from uuid import UUID
- from pipeline.models import PipelineJob, PipelineRun, PipelineStage, ResumeCursor
- class PipelineRepository(Protocol):
- """Persistence boundary for orchestration and resumable jobs.
- The first migration does not create dedicated pipeline tables yet, so this
- interface captures the intended boundary before a persistence decision.
- """
- def create_pipeline_run(
- self,
- *,
- run_key: str | None = None,
- batch_id: UUID | None = None,
- status: str = "pending",
- metadata: dict[str, Any] | None = None,
- ) -> PipelineRun:
- ...
- def get_pipeline_run(self, run_id: UUID) -> PipelineRun:
- ...
- def save_pipeline_job(
- self,
- *,
- run_id: UUID,
- stage: PipelineStage,
- target_id: UUID | None = None,
- status: str = "pending",
- metadata: dict[str, Any] | None = None,
- ) -> PipelineJob:
- ...
- def mark_job_status(
- self,
- job_id: UUID,
- *,
- status: str,
- error_message: str | None = None,
- metadata: dict[str, Any] | None = None,
- ) -> PipelineJob:
- ...
- def get_resume_cursor(self, run_id: UUID) -> ResumeCursor | None:
- ...
|