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>
67 lines
2 KiB
Python
67 lines
2 KiB
Python
"""Pydantic request models with validation."""
|
|
|
|
from typing import Optional, Dict, List
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class UpdateMetadataRequest(BaseModel):
|
|
"""Request to update file metadata from session."""
|
|
session_id: str
|
|
file_index: int
|
|
filepath: Optional[str] = None # Deprecated: resolved from session
|
|
output_dir: Optional[str] = ""
|
|
|
|
|
|
class UpdateManualMetadataRequest(BaseModel):
|
|
"""Request to update file with manually entered metadata."""
|
|
session_id: str
|
|
file_index: int
|
|
title: str = Field(default="", max_length=200)
|
|
subject: str = Field(default="", max_length=300)
|
|
keywords: str = Field(default="", max_length=500)
|
|
author: str = Field(default="", max_length=100)
|
|
copyright: str = Field(default="", max_length=150)
|
|
comments: str = Field(default="", max_length=500)
|
|
custom_fields: Optional[Dict[str, str]] = None
|
|
|
|
|
|
class ExcelSheetPreviewRequest(BaseModel):
|
|
"""Request to preview a specific Excel sheet."""
|
|
excel_session_id: str
|
|
sheet_name: str
|
|
|
|
|
|
class ExcelMappingRequest(BaseModel):
|
|
"""Request to configure Excel column mapping."""
|
|
excel_session_id: str
|
|
sheet_name: str
|
|
column_mapping: Dict[str, str] # {filename: 'col', title: 'col', ...}
|
|
|
|
|
|
class ImportMappingRequest(BaseModel):
|
|
"""Request to configure import column mapping."""
|
|
import_session_id: str
|
|
column_mapping: Dict[str, str]
|
|
|
|
|
|
class TemplateApplyRequest(BaseModel):
|
|
"""Request to apply a template to files."""
|
|
template_name: str
|
|
session_id: str
|
|
file_indices: List[int]
|
|
custom_vars: Optional[Dict[str, str]] = None
|
|
|
|
|
|
class TemplatePreviewRequest(BaseModel):
|
|
"""Request to preview template output."""
|
|
title: str = ""
|
|
subject: str = ""
|
|
keywords: str = ""
|
|
sample_filename: str = "example.pdf"
|
|
custom_vars: Optional[Dict[str, str]] = None
|
|
|
|
|
|
class DownloadSelectedRequest(BaseModel):
|
|
"""Request to download selected files as ZIP."""
|
|
session_id: str
|
|
file_indices: List[int]
|