94 lines
2.0 KiB
Python
94 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from enum import Enum
|
|
from typing import Any
|
|
|
|
|
|
class JobStatus(str, Enum):
|
|
QUEUED = "queued"
|
|
RUNNING = "running"
|
|
PAUSE_REQUESTED = "pause_requested"
|
|
PAUSED = "paused"
|
|
COMPLETED = "completed"
|
|
COMPLETED_WITH_ERRORS = "completed_with_errors"
|
|
FAILED = "failed"
|
|
CANCELED = "canceled"
|
|
|
|
|
|
class StageStatus(str, Enum):
|
|
PENDING = "pending"
|
|
RUNNING = "running"
|
|
PAUSE_REQUESTED = "pause_requested"
|
|
PAUSED = "paused"
|
|
COMPLETED = "completed"
|
|
FAILED = "failed"
|
|
SKIPPED = "skipped"
|
|
|
|
|
|
class ItemStatus(str, Enum):
|
|
PENDING = "pending"
|
|
RUNNING = "running"
|
|
SUCCEEDED = "succeeded"
|
|
FAILED = "failed"
|
|
INTERRUPTED = "interrupted"
|
|
SKIPPED = "skipped"
|
|
CANCELED = "canceled"
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class JobRun:
|
|
id: int
|
|
job_type: str
|
|
status: JobStatus
|
|
priority: int
|
|
requested_by: str | None
|
|
config_snapshot: dict[str, Any]
|
|
sources: list[str]
|
|
download_sources: list[str]
|
|
playlist_scope: dict[str, Any]
|
|
created_at: str | None
|
|
started_at: str | None
|
|
ended_at: str | None
|
|
last_error: str | None
|
|
resume_token: str | None
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class JobStage:
|
|
id: int
|
|
job_run_id: int
|
|
stage_type: str
|
|
seq_no: int
|
|
status: StageStatus
|
|
total_items: int
|
|
pending_items: int
|
|
running_items: int
|
|
success_items: int
|
|
failed_items: int
|
|
skipped_items: int
|
|
started_at: str | None
|
|
ended_at: str | None
|
|
last_error: str | None
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class JobItem:
|
|
id: int
|
|
job_stage_id: int
|
|
item_type: str
|
|
item_key: str
|
|
playlist_pool_id: int | None
|
|
playlist_id: int | None
|
|
song_id: int | None
|
|
file_location_id: int | None
|
|
status: ItemStatus
|
|
attempt_count: int
|
|
max_attempts: int
|
|
worker_id: int | None
|
|
started_at: str | None
|
|
ended_at: str | None
|
|
last_error: str | None
|
|
last_error_code: str | None
|
|
payload: dict[str, Any]
|