File size: 4,018 Bytes
62ddecc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
"""
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)