-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.py
More file actions
49 lines (41 loc) · 1.39 KB
/
models.py
File metadata and controls
49 lines (41 loc) · 1.39 KB
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
"""
SQLAlchemy models for job tracking.
"""
import enum
import uuid
from datetime import datetime, timezone
from sqlalchemy import Column, String, Enum, Integer, DateTime, Text
from database import Base
class JobStatus(str, enum.Enum):
PENDING = "PENDING"
PROCESSING = "PROCESSING"
COMPLETED = "COMPLETED"
FAILED = "FAILED"
class IngestionJob(Base):
__tablename__ = "ingestion_jobs"
id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4()))
filename = Column(String, nullable=False)
status = Column(Enum(JobStatus), default=JobStatus.PENDING, nullable=False)
error_message = Column(Text, nullable=True)
retry_count = Column(Integer, default=0, nullable=False)
created_at = Column(
DateTime(timezone=True),
default=lambda: datetime.now(timezone.utc),
nullable=False,
)
updated_at = Column(
DateTime(timezone=True),
default=lambda: datetime.now(timezone.utc),
onupdate=lambda: datetime.now(timezone.utc),
nullable=False,
)
def to_dict(self):
return {
"job_id": self.id,
"filename": self.filename,
"status": self.status.value,
"error_message": self.error_message,
"retry_count": self.retry_count,
"created_at": self.created_at.isoformat(),
"updated_at": self.updated_at.isoformat(),
}