from datetime import datetime from typing import Any, Generic, TypeVar from pydantic import BaseModel, validator T = TypeVar("T") RT = TypeVar("RT") class User(BaseModel): username: str password: str class Token(BaseModel): access_token: str token_type: str class Result(Generic[RT], BaseModel): """ 总体返回 """ suc: bool """调用状态""" code: int = 200 """code""" info: str = "操作成功" """info""" warning: str | None = None """警告信息""" data: RT | None = None """返回数据""" @classmethod def warning_(cls, info: str, code: int = 200) -> "Result[RT]": return cls(suc=True, warning=info, code=code) @classmethod def fail(cls, info: str = "异常错误", code: int = 500) -> "Result[RT]": return cls(suc=False, info=info, code=code) @classmethod def ok( cls, data: Any = None, info: str = "操作成功", code: int = 200 ) -> "Result[RT]": return cls(suc=True, info=info, code=code, data=data) class QueryModel(BaseModel, Generic[T]): """ 基本查询条件 """ index: int """页数""" size: int """每页数量""" data: T """携带数据""" @validator("index") def index_validator(cls, index): if index < 1: raise ValueError("查询下标小于1...") return index @validator("size") def size_validator(cls, size): if size < 1: raise ValueError("每页数量小于1...") return size class BaseResultModel(BaseModel): """ 基础返回 """ total: int """总页数""" data: Any """数据""" class SystemStatus(BaseModel): """ 系统状态 """ cpu: float memory: float disk: float check_time: datetime class SystemFolderSize(BaseModel): """ 资源文件占比 """ name: str """名称""" size: float """大小""" full_path: str | None """完整路径""" is_dir: bool """是否为文件夹"""