66 lines
1.5 KiB
Python
66 lines
1.5 KiB
Python
from enum import Enum
|
|
from typing import Any, Dict, List, Optional
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class RequestType(str, Enum):
|
|
movie = "movie"
|
|
tv = "tv"
|
|
unknown = "unknown"
|
|
|
|
|
|
class NormalizedState(str, Enum):
|
|
requested = "REQUESTED"
|
|
approved = "APPROVED"
|
|
needs_add = "NEEDS_ADD"
|
|
added_to_arr = "ADDED_TO_ARR"
|
|
searching = "SEARCHING"
|
|
grabbed = "GRABBED"
|
|
downloading = "DOWNLOADING"
|
|
importing = "IMPORTING"
|
|
completed = "COMPLETED"
|
|
failed = "FAILED"
|
|
available = "AVAILABLE"
|
|
unknown = "UNKNOWN"
|
|
|
|
|
|
class TimelineHop(BaseModel):
|
|
service: str
|
|
status: str
|
|
details: Dict[str, Any] = Field(default_factory=dict)
|
|
timestamp: Optional[str] = None
|
|
|
|
|
|
class ActionOption(BaseModel):
|
|
id: str
|
|
label: str
|
|
risk: str
|
|
requires_confirmation: bool = True
|
|
|
|
|
|
class Snapshot(BaseModel):
|
|
request_id: str
|
|
title: str
|
|
year: Optional[int] = None
|
|
request_type: RequestType = RequestType.unknown
|
|
state: NormalizedState = NormalizedState.unknown
|
|
state_reason: Optional[str] = None
|
|
timeline: List[TimelineHop] = Field(default_factory=list)
|
|
actions: List[ActionOption] = Field(default_factory=list)
|
|
artwork: Dict[str, Any] = Field(default_factory=dict)
|
|
raw: Dict[str, Any] = Field(default_factory=dict)
|
|
|
|
|
|
class TriageRecommendation(BaseModel):
|
|
action_id: str
|
|
title: str
|
|
reason: str
|
|
risk: str
|
|
|
|
|
|
class TriageResult(BaseModel):
|
|
summary: str
|
|
confidence: float
|
|
root_cause: str
|
|
recommendations: List[TriageRecommendation]
|