Ally2 / schemas.py
Samfredoly's picture
Create schemas.py
a1c6fc0 verified
"""
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