AgentEvalTool/backend/agenteval/web/file_schemas.py

72 lines
1.8 KiB
Python

"""HTTP schemas for the file management API."""
from datetime import datetime
from pydantic import BaseModel, ConfigDict, Field, field_serializer
from agenteval.storage.db import FileCategoryDB, FileRecordDB, iso_utc
class CategoryCreate(BaseModel):
name: str
parent_id: str | None = None
class CategoryUpdate(BaseModel):
name: str
class FileCategoryResponse(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: str
name: str
parent_id: str | None
children: list["FileCategoryResponse"] = Field(default_factory=list)
@classmethod
def from_record(cls, category: FileCategoryDB) -> "FileCategoryResponse":
return cls(
id=category.id or "",
name=category.name,
parent_id=category.parent_id,
children=[],
)
class FileRecordResponse(BaseModel):
id: str
original_name: str
file_size: int
mime_type: str
file_ext: str
category_id: str | None
storage_directory: str
created_at: datetime | None
@field_serializer("created_at")
def serialize_created_at(self, value: datetime | None) -> str | None:
return iso_utc(value)
@classmethod
def from_record(cls, record: FileRecordDB) -> "FileRecordResponse":
return cls(
id=record.id or "",
original_name=record.original_name,
file_size=record.file_size,
mime_type=record.mime_type,
file_ext=record.file_ext,
category_id=record.category_id,
storage_directory="data/files",
created_at=record.created_at,
)
class FileUploadConfigResponse(BaseModel):
allowed_extensions: list[str]
max_upload_size_mb: int
class OkResponse(BaseModel):
ok: bool = True