-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.py
More file actions
44 lines (36 loc) · 1.45 KB
/
Copy pathmodels.py
File metadata and controls
44 lines (36 loc) · 1.45 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
from __future__ import annotations
import uuid
from datetime import datetime, timezone
from enum import Enum
from sqlalchemy import DateTime, Enum as SAEnum, Integer, String, Text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, mapped_column
from database import Base
class JobStatus(str, Enum):
PENDING = 'PENDING'
PROCESSING = 'PROCESSING'
COMPLETED = 'COMPLETED'
FAILED = 'FAILED'
class ScrapingJob(Base):
__tablename__ = 'scraping_jobs'
id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
url: Mapped[str] = mapped_column(String(length=2048), unique=True, nullable=False, index=True)
status: Mapped[JobStatus] = mapped_column(
SAEnum(JobStatus, name='job_status', native_enum=False),
nullable=False,
default=JobStatus.PENDING,
)
retry_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
scraped_title: Mapped[str | None] = mapped_column(Text, nullable=True)
error_log: Mapped[str | None] = mapped_column(Text, nullable=True)
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
nullable=False,
default=lambda: datetime.now(timezone.utc),
)
updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
nullable=False,
default=lambda: datetime.now(timezone.utc),
onupdate=lambda: datetime.now(timezone.utc),
)