61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
from enum import Enum
|
|
from typing import List, Union, Any, Optional
|
|
from pydantic import BaseModel, Field, field_validator, ConfigDict
|
|
from src.cluster.ffmpeg_worker.model import FFMpegSliceSegment
|
|
from src.cluster.video_downloader.model import MediaSource, MediaSources
|
|
|
|
|
|
class SentryTransactionHeader(BaseModel):
|
|
x_trace_id: Optional[str] = Field(description="Sentry Transaction ID", default=None)
|
|
x_baggage: Optional[str] = Field(description="Sentry Transaction baggage", default=None)
|
|
|
|
|
|
class SentryTransactionInfo(BaseModel):
|
|
x_trace_id: str = Field(description="Sentry Transaction ID")
|
|
x_baggage: str = Field(description="Sentry Transaction baggage")
|
|
|
|
|
|
class FFMPEGSliceRequest(BaseModel):
|
|
media: MediaSource = Field(description="FFMPEG Slice Media Source")
|
|
markers: List[FFMpegSliceSegment] = Field(description="FFMPEG Slice Marker List")
|
|
|
|
@field_validator('media', mode='before')
|
|
@classmethod
|
|
def parse_inputs(cls, v: Union[str, MediaSource]):
|
|
if isinstance(v, str):
|
|
return MediaSource.from_str(v)
|
|
elif isinstance(v, MediaSource):
|
|
return v
|
|
else:
|
|
raise TypeError(v)
|
|
|
|
|
|
class FFMPEGSliceTaskStatusRequest(BaseModel):
|
|
taskId: str = Field(description="任务Id")
|
|
|
|
|
|
class ModalTaskResponse(BaseModel):
|
|
success: bool = Field(description="任务接受成功")
|
|
taskId: str = Field(description="任务Id")
|
|
|
|
|
|
class TaskStatus(str, Enum):
|
|
running = "running"
|
|
failed = "failed"
|
|
success = "success"
|
|
expired = "expired"
|
|
|
|
|
|
class BaseFFMPEGTaskStatusResponse(BaseModel):
|
|
taskId: str = Field(description="任务Id")
|
|
status: TaskStatus = Field(description="任务运行状态")
|
|
error: Optional[str] = Field(description="任务错误原因", default=None)
|
|
|
|
model_config = ConfigDict(extra='ignore')
|
|
|
|
|
|
class FFMPEGSliceTaskStatusResponse(BaseFFMPEGTaskStatusResponse):
|
|
result: Optional[List[str]] = Field(default=None, description="任务运行结果")
|
|
|
|
class FFMPEGConcatTaskStatusResponse(BaseFFMPEGTaskStatusResponse):
|
|
result: Optional[str] = Field(default=None, description="任务运行结果") |