WIP: 分离出逻辑pip包
This commit is contained in:
129
src/BowongModalFunctions/models/web_model.py
Normal file
129
src/BowongModalFunctions/models/web_model.py
Normal file
@@ -0,0 +1,129 @@
|
||||
from enum import Enum
|
||||
from typing import List, Union, Optional
|
||||
from pydantic import BaseModel, Field, field_validator, ConfigDict, HttpUrl
|
||||
from .ffmpeg_worker_model import FFMpegSliceSegment
|
||||
from .media_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 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 ErrorCode(int, Enum):
|
||||
SUCCESS = 0
|
||||
PARAM_ERROR = 10001
|
||||
NOT_FOUND = 10002
|
||||
UNAUTHORIZED = 10003
|
||||
FORBIDDEN = 10004
|
||||
BUSINESS_ERROR = 10005
|
||||
SYSTEM_ERROR = 99999
|
||||
|
||||
|
||||
class WebhookMethodEnum(str, Enum):
|
||||
GET = "get"
|
||||
POST = "post"
|
||||
|
||||
|
||||
class WebhookNotify(BaseModel):
|
||||
endpoint: HttpUrl = Field(description="Webhook回调端点", examples=["https://webhook.example.com"])
|
||||
method: WebhookMethodEnum = Field(description="Webhook回调请求方法", examples=["get", "post"])
|
||||
authentication: Optional[str] = Field(description="Webhook authentication回调请求降权token,如不需要鉴权则不填",
|
||||
examples=["Bearer 123456"])
|
||||
|
||||
|
||||
class BaseFFMPEGTaskRequest(BaseModel):
|
||||
webhook: Optional[WebhookNotify] = Field(description="Task webhook", default=None)
|
||||
|
||||
|
||||
class BaseFFMPEGTaskStatusResponse(BaseModel):
|
||||
taskId: str = Field(description="任务Id")
|
||||
status: TaskStatus = Field(description="任务运行状态")
|
||||
error: Optional[str] = Field(description="任务错误原因", default=None)
|
||||
code: Optional[int] = Field(description="任务错误原因代码", default=None)
|
||||
|
||||
model_config = ConfigDict(extra='ignore')
|
||||
|
||||
|
||||
class FFMPEGSliceRequest(BaseFFMPEGTaskRequest):
|
||||
media: MediaSource = Field(description="待切割的媒体源")
|
||||
markers: List[FFMpegSliceSegment] = Field(description="切割标记数组")
|
||||
|
||||
@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 FFMPEGSliceTaskStatusResponse(BaseFFMPEGTaskStatusResponse):
|
||||
result: Optional[List[str]] = Field(default=None, description="任务运行结果")
|
||||
|
||||
|
||||
class FFMPEGConcatRequest(BaseFFMPEGTaskRequest):
|
||||
medias: MediaSources = Field(description="待合并的媒体源")
|
||||
|
||||
|
||||
class FFMPEGConcatTaskStatusResponse(BaseFFMPEGTaskStatusResponse):
|
||||
result: Optional[str] = Field(default=None, description="任务运行结果")
|
||||
|
||||
|
||||
class FFMPEGExtractAudioRequest(BaseFFMPEGTaskRequest):
|
||||
media: MediaSource = Field(description="待提取音频的媒体源")
|
||||
|
||||
@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 FFMPEGExtractAudioTaskStatusResponse(BaseFFMPEGTaskStatusResponse):
|
||||
result: Optional[str] = Field(default=None, description="任务运行结果")
|
||||
|
||||
|
||||
class FFMPEGCornerMirrorRequest(BaseFFMPEGTaskRequest):
|
||||
media: MediaSource = Field(description="")
|
||||
|
||||
@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 FFMPEGCornerMirrorTaskStatusResponse(BaseFFMPEGTaskStatusResponse):
|
||||
result: Optional[str] = Field(default=None, description="任务运行结果")
|
||||
Reference in New Issue
Block a user