oliver-metadata-tool/app/models/requests.py
SamoilenkoVadym 3deaa5ef40 Initial commit: Oliver Metadata Tool (FastAPI)
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>
2026-02-09 21:23:42 +00:00

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]