Files
mediaproc/core/schema/models/job.py
2026-03-27 06:14:02 -03:00

66 lines
1.4 KiB
Python

"""Job schema — source of truth for pipeline jobs."""
from dataclasses import dataclass, field
from datetime import datetime
from enum import Enum
from typing import Any, Dict, Optional
from uuid import UUID
class JobStatus(str, Enum):
PENDING = "pending"
RUNNING = "running"
PAUSED = "paused"
COMPLETED = "completed"
FAILED = "failed"
CANCELLED = "cancelled"
class RunType(str, Enum):
INITIAL = "initial"
REPLAY = "replay"
RETRY = "retry"
@dataclass
class Job:
"""
A pipeline job.
Each invocation (initial run, replay, retry) creates a Job.
Jobs for the same source are linked via parent_id.
"""
id: UUID
# Input
source_asset_id: UUID
video_path: str
profile_name: str = "soccer_broadcast"
# Lineage
parent_id: Optional[UUID] = None
run_type: RunType = RunType.INITIAL
config_overrides: Dict[str, Any] = field(default_factory=dict)
# Status
status: JobStatus = JobStatus.PENDING
current_stage: Optional[str] = None
progress: float = 0.0
error_message: Optional[str] = None
# Results summary
total_detections: int = 0
brands_found: int = 0
cloud_llm_calls: int = 0
estimated_cost_usd: float = 0.0
# Worker tracking
celery_task_id: Optional[str] = None
priority: int = 0
# Timestamps
created_at: Optional[datetime] = None
started_at: Optional[datetime] = None
completed_at: Optional[datetime] = None