feat: restore source parity and harden agent runtime
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
大屏设计器 Schema 定义
|
||||
"""
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
|
||||
|
||||
class ScreenProjectBase(BaseModel):
|
||||
"""大屏项目基础信息"""
|
||||
application_id: Optional[str] = Field(None, description="所属应用ID")
|
||||
name: str = Field(..., description="项目名称")
|
||||
code: str = Field(..., pattern=r"^[a-zA-Z][a-zA-Z0-9_]*$", description="项目编码(字母开头,只能包含字母、数字和下划线)")
|
||||
description: str = Field(default='', description="项目描述")
|
||||
sort: int = Field(default=0, description="排序")
|
||||
|
||||
|
||||
class ScreenProjectCreateIn(ScreenProjectBase):
|
||||
"""创建大屏项目请求"""
|
||||
screen_config: Dict[str, Any] = Field(default_factory=dict, description="大屏设计配置")
|
||||
thumbnail: str = Field(default='', description="缩略图")
|
||||
|
||||
|
||||
class ScreenProjectUpdateIn(BaseModel):
|
||||
"""更新大屏项目请求"""
|
||||
name: Optional[str] = Field(default=None, description="项目名称")
|
||||
description: Optional[str] = Field(default=None, description="项目描述")
|
||||
sort: Optional[int] = Field(default=None, description="排序")
|
||||
screen_config: Optional[Dict[str, Any]] = Field(default=None, description="大屏设计配置")
|
||||
thumbnail: Optional[str] = Field(default=None, description="缩略图")
|
||||
|
||||
|
||||
class ScreenProjectOut(BaseModel):
|
||||
"""大屏项目详情输出"""
|
||||
id: str
|
||||
application_id: Optional[str] = None
|
||||
name: str
|
||||
code: str
|
||||
description: str
|
||||
status: str
|
||||
version: int
|
||||
thumbnail: str
|
||||
screen_config: Dict[str, Any]
|
||||
sort: int
|
||||
access_password: str = Field(default='', description="访问密码")
|
||||
published_at: Optional[str] = Field(default=None, description="发布时间")
|
||||
sys_create_datetime: str
|
||||
sys_update_datetime: str
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
@classmethod
|
||||
def from_orm_model(cls, obj):
|
||||
"""从ORM模型转换"""
|
||||
return cls(
|
||||
id=str(obj.id),
|
||||
application_id=obj.application_id,
|
||||
name=obj.name,
|
||||
code=obj.code,
|
||||
description=obj.description or '',
|
||||
status=obj.status or 'draft',
|
||||
version=obj.version or 1,
|
||||
thumbnail=obj.thumbnail or '',
|
||||
screen_config=obj.screen_config or {},
|
||||
sort=obj.sort or 0,
|
||||
access_password=obj.access_password or '',
|
||||
published_at=obj.published_at.strftime('%Y-%m-%d %H:%M:%S') if obj.published_at else None,
|
||||
sys_create_datetime=obj.sys_create_datetime.strftime('%Y-%m-%d %H:%M:%S') if obj.sys_create_datetime else '',
|
||||
sys_update_datetime=obj.sys_update_datetime.strftime('%Y-%m-%d %H:%M:%S') if obj.sys_update_datetime else '',
|
||||
)
|
||||
|
||||
|
||||
class ScreenProjectListOut(BaseModel):
|
||||
"""大屏项目列表输出(不含screen_config)"""
|
||||
id: str
|
||||
application_id: Optional[str] = None
|
||||
name: str
|
||||
code: str
|
||||
description: str
|
||||
status: str
|
||||
version: int
|
||||
thumbnail: str
|
||||
sort: int
|
||||
access_password: str = Field(default='', description="访问密码")
|
||||
published_at: Optional[str] = Field(default=None, description="发布时间")
|
||||
sys_create_datetime: str
|
||||
sys_update_datetime: str
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
@classmethod
|
||||
def from_orm_model(cls, obj):
|
||||
"""从ORM模型转换"""
|
||||
return cls(
|
||||
id=str(obj.id),
|
||||
application_id=obj.application_id,
|
||||
name=obj.name,
|
||||
code=obj.code,
|
||||
description=obj.description or '',
|
||||
status=obj.status or 'draft',
|
||||
version=obj.version or 1,
|
||||
thumbnail=obj.thumbnail or '',
|
||||
sort=obj.sort or 0,
|
||||
access_password=obj.access_password or '',
|
||||
published_at=obj.published_at.strftime('%Y-%m-%d %H:%M:%S') if obj.published_at else None,
|
||||
sys_create_datetime=obj.sys_create_datetime.strftime('%Y-%m-%d %H:%M:%S') if obj.sys_create_datetime else '',
|
||||
sys_update_datetime=obj.sys_update_datetime.strftime('%Y-%m-%d %H:%M:%S') if obj.sys_update_datetime else '',
|
||||
)
|
||||
|
||||
|
||||
class ScreenExportOut(BaseModel):
|
||||
"""大屏配置导出"""
|
||||
name: str
|
||||
code: str
|
||||
description: str
|
||||
screen_config: Dict[str, Any]
|
||||
|
||||
|
||||
class ScreenImportCheckIn(BaseModel):
|
||||
"""大屏导入预检查请求"""
|
||||
code: str = Field(..., description="项目编码")
|
||||
|
||||
|
||||
class ScreenImportCheckOut(BaseModel):
|
||||
"""大屏导入预检查结果"""
|
||||
code_exists: bool = Field(..., description="项目编码是否已存在")
|
||||
can_import: bool = Field(..., description="是否可以直接导入(编码不冲突)")
|
||||
|
||||
|
||||
class ScreenImportIn(BaseModel):
|
||||
"""大屏配置导入"""
|
||||
application_id: Optional[str] = Field(None, description="所属应用ID")
|
||||
name: str = Field(..., description="项目名称")
|
||||
code: str = Field(..., description="项目编码")
|
||||
description: str = Field(default='', description="项目描述")
|
||||
screen_config: Dict[str, Any] = Field(default_factory=dict, description="大屏设计配置")
|
||||
|
||||
|
||||
class ScreenPublishIn(BaseModel):
|
||||
"""发布大屏请求"""
|
||||
access_password: Optional[str] = Field(default=None, description="访问密码")
|
||||
|
||||
|
||||
class ScreenSetPasswordIn(BaseModel):
|
||||
"""设置访问密码请求"""
|
||||
access_password: str = Field(default='', description="访问密码,空字符串表示清除密码")
|
||||
Reference in New Issue
Block a user