Ally2 / models.py
Samfredoly's picture
Create models.py
62ddecc verified
"""
Database models for HF Uploader Dashboard
"""
from datetime import datetime
from sqlalchemy import Column, Integer, String, Text, DateTime, Boolean, Enum
from sqlalchemy.ext.declarative import declarative_base
import enum
Base = declarative_base()
class HFConfig(Base):
"""Configuration for Hugging Face API and datasets"""
__tablename__ = "hf_config"
id = Column(Integer, primary_key=True, index=True)
hf_token = Column(Text, nullable=True)
source_all_repo = Column(String(255), default="samfred2/ALL", nullable=False)
source_ato_repo = Column(String(255), default="samfred2/ATO", nullable=False)
target_repo = Column(String(255), default="samfred2/ALL2", nullable=False)
upload_batch_size = Column(Integer, default=10, nullable=False)
max_uploads_per_hour = Column(Integer, default=128, nullable=False)
created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
class UploadStatusEnum(str, enum.Enum):
"""Upload status enumeration"""
PENDING = "pending"
UPLOADING = "uploading"
COMPLETED = "completed"
FAILED = "failed"
class UploadQueue(Base):
"""Upload queue tracking"""
__tablename__ = "upload_queue"
id = Column(Integer, primary_key=True, index=True)
file_name = Column(String(255), nullable=False)
file_path = Column(Text, nullable=False)
file_size = Column(Integer, nullable=False)
status = Column(Enum(UploadStatusEnum), default=UploadStatusEnum.PENDING, nullable=False)
uploaded_at = Column(DateTime, nullable=True)
failure_reason = Column(Text, nullable=True)
retry_count = Column(Integer, default=0, nullable=False)
max_retries = Column(Integer, default=3, nullable=False)
created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
class RateLimitLog(Base):
"""Rate limit tracking per hour"""
__tablename__ = "rate_limit_log"
id = Column(Integer, primary_key=True, index=True)
upload_count = Column(Integer, default=0, nullable=False)
hour_start = Column(DateTime, nullable=False)
hour_end = Column(DateTime, nullable=False)
limit_hit = Column(Boolean, default=False, nullable=False)
resume_time = Column(DateTime, nullable=True)
created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
class UploadErrorLog(Base):
"""Error logging for uploads"""
__tablename__ = "upload_error_log"
id = Column(Integer, primary_key=True, index=True)
file_name = Column(String(255), nullable=False)
error_code = Column(String(50), nullable=True)
error_message = Column(Text, nullable=True)
status_code = Column(Integer, nullable=True)
retryable = Column(Boolean, default=True, nullable=False)
created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
class ProcessingStatusEnum(str, enum.Enum):
"""Processing status enumeration"""
IDLE = "idle"
DOWNLOADING = "downloading"
MATCHING = "matching"
INTEGRATING = "integrating"
COMPLETED = "completed"
ERROR = "error"
class ProcessingState(Base):
"""File processing state tracking"""
__tablename__ = "processing_state"
id = Column(Integer, primary_key=True, index=True)
status = Column(Enum(ProcessingStatusEnum), default=ProcessingStatusEnum.IDLE, nullable=False)
total_files = Column(Integer, default=0, nullable=False)
processed_files = Column(Integer, default=0, nullable=False)
matched_pairs = Column(Integer, default=0, nullable=False)
error_message = Column(Text, nullable=True)
started_at = Column(DateTime, nullable=True)
completed_at = Column(DateTime, nullable=True)
created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)