Complete Flask → FastAPI migration with: - FastAPI app with session auth, Azure AD SSO, rate limiting - SQLite-backed session store (survives restarts) - Bulk AI metadata generation with SSE progress - Admin panel (user management, audit log, AI usage) - Subpath deployment support (ROOT_PATH config) - Docker + deploy.sh for production deployment - Test suite (auth, upload, templates, imports, admin, sessions) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
70 lines
1.9 KiB
Python
70 lines
1.9 KiB
Python
"""Pydantic response models."""
|
|
|
|
from typing import Optional, Dict, List, Any
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class FileResult(BaseModel):
|
|
"""Result for a single processed file."""
|
|
success: bool = True
|
|
filename: str
|
|
file_type: Optional[str] = None
|
|
current_metadata: Optional[Dict[str, str]] = None
|
|
suggested_metadata: Optional[Dict[str, str]] = None
|
|
metadata_source: Optional[str] = None
|
|
excel_found: bool = False
|
|
error: Optional[str] = None
|
|
|
|
|
|
class UploadResponse(BaseModel):
|
|
"""Response from file upload endpoint."""
|
|
success: bool
|
|
session_id: Optional[str] = None
|
|
files: List[FileResult] = []
|
|
error: Optional[str] = None
|
|
|
|
|
|
class UpdateResponse(BaseModel):
|
|
"""Response from metadata update endpoint."""
|
|
success: bool = True
|
|
message: str = ""
|
|
verified: bool = False
|
|
metadata: Optional[Dict[str, str]] = None
|
|
error: Optional[str] = None
|
|
|
|
|
|
class ExcelUploadResponse(BaseModel):
|
|
"""Response from Excel file upload."""
|
|
success: bool
|
|
excel_session_id: Optional[str] = None
|
|
filename: Optional[str] = None
|
|
sheets: Optional[List[str]] = None
|
|
preview: Optional[Dict[str, Any]] = None
|
|
message: Optional[str] = None
|
|
error: Optional[str] = None
|
|
|
|
|
|
class ImportUploadResponse(BaseModel):
|
|
"""Response from import file upload."""
|
|
success: bool
|
|
import_session_id: Optional[str] = None
|
|
filename: Optional[str] = None
|
|
columns: Optional[List[str]] = None
|
|
sample_data: Optional[List[Dict[str, Any]]] = None
|
|
message: Optional[str] = None
|
|
error: Optional[str] = None
|
|
|
|
|
|
class MappingConfigResponse(BaseModel):
|
|
"""Response from mapping configuration."""
|
|
success: bool
|
|
excel_session_id: Optional[str] = None
|
|
import_session_id: Optional[str] = None
|
|
stats: Optional[Dict[str, int]] = None
|
|
message: Optional[str] = None
|
|
error: Optional[str] = None
|
|
|
|
|
|
class ErrorResponse(BaseModel):
|
|
"""Standard error response."""
|
|
error: str
|