Files
my-v0-server/app/schemas/actions/__init__.py
T
2026-10-01 09:25:01 -07:00

49 lines
1.5 KiB
Python

"""动作类型统一入口,新增操作时在这里显式加入联合类型"""
from typing import Annotated, Self
from pydantic import Field, TypeAdapter, model_validator
from .add import AddAction
from .base import ActionModel, BaseAction
from .delete import DeleteAction
from .move import MoveAction
from .resize import ResizeAction
from .update import UpdateAction
from .update_canvas import UpdateCanvasAction
# 按 type 选择对应模型,不维护重复的操作名称映射
Action = Annotated[
AddAction | DeleteAction | MoveAction | ResizeAction | UpdateAction | UpdateCanvasAction,
Field(discriminator="type"),
]
action_adapter = TypeAdapter(Action)
class ActionBatch(ActionModel):
actions: list[Action] = Field(description="按数组顺序执行的动作列表,允许为空")
unsupported_reason: str | None = Field(
default=None,
description="需求中有任何部分无法用现有动作或查到的字段完成时,说明缺少什么能力,此时 actions 为空;能完成时为 null",
)
@model_validator(mode="after")
def unsupported_has_no_actions(self) -> Self:
if self.unsupported_reason and self.actions:
raise ValueError("填写 unsupported_reason 时 actions 必须为空,不能只执行需求的一部分")
return self
__all__ = [
"Action",
"ActionBatch",
"AddAction",
"BaseAction",
"DeleteAction",
"MoveAction",
"ResizeAction",
"UpdateAction",
"UpdateCanvasAction",
"action_adapter",
]