72 lines
1.8 KiB
Python
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
|