""" Pydantic schemas for API validation """ from pydantic import BaseModel, Field from typing import Optional, List from datetime import datetime class HFConfigUpdate(BaseModel): """Schema for updating HF configuration""" hf_token: Optional[str] = None source_all_repo: Optional[str] = None source_ato_repo: Optional[str] = None target_repo: Optional[str] = None upload_batch_size: Optional[int] = None max_uploads_per_hour: Optional[int] = None class Config: from_attributes = True class HFConfigResponse(BaseModel): """Schema for HF configuration response""" id: int hf_token: Optional[str] = None source_all_repo: str source_ato_repo: str target_repo: str upload_batch_size: int max_uploads_per_hour: int created_at: datetime updated_at: datetime class Config: from_attributes = True class UploadQueueItem(BaseModel): """Schema for upload queue item""" id: int file_name: str file_path: str file_size: int status: str uploaded_at: Optional[datetime] = None failure_reason: Optional[str] = None retry_count: int max_retries: int created_at: datetime updated_at: datetime class Config: from_attributes = True class UploadQueueStats(BaseModel): """Schema for upload queue statistics""" pending: int uploading: int completed: int failed: int total: int class ProcessingStateResponse(BaseModel): """Schema for processing state response""" id: int status: str total_files: int processed_files: int matched_pairs: int error_message: Optional[str] = None started_at: Optional[datetime] = None completed_at: Optional[datetime] = None created_at: datetime updated_at: datetime class Config: from_attributes = True class ProcessRequest(BaseModel): """Schema for process request""" max_files: int = Field(default=0, description="0 means process all files") class UploadRequest(BaseModel): """Schema for upload request""" file_ids: List[int] = Field(description="List of upload queue item IDs to upload") batch_size: int = Field(default=10, description="Number of files per batch") class FilePreviewRequest(BaseModel): """Schema for file preview request""" filename: str class FilePreviewResponse(BaseModel): """Schema for file preview response""" filename: str size: int content: dict class RateLimitStatus(BaseModel): """Schema for rate limit status""" can_upload: bool remaining_uploads: int resume_time: Optional[datetime] = None class UploadStatus(BaseModel): """Schema for upload status""" rate_limit: RateLimitStatus config: Optional[HFConfigResponse] = None class ErrorLogResponse(BaseModel): """Schema for error log response""" id: int file_name: str error_code: Optional[str] = None error_message: Optional[str] = None status_code: Optional[int] = None retryable: bool created_at: datetime class Config: from_attributes = True