75 lines
1.4 KiB
Python

from datetime import datetime
from typing import Optional, Dict, Any, List
from pydantic import BaseModel, HttpUrl
from app.models.scrape_job import JobStatus
class ScrapeJobBase(BaseModel):
"""
Base schema for scrape job data.
"""
url: HttpUrl
selector: Optional[str] = None
user_agent: Optional[str] = None
timeout: Optional[int] = None
class ScrapeJobCreate(ScrapeJobBase):
"""
Schema for creating a new scrape job.
"""
pass
class ScrapeJobUpdate(BaseModel):
"""
Schema for updating a scrape job.
"""
url: Optional[HttpUrl] = None
status: Optional[JobStatus] = None
selector: Optional[str] = None
error: Optional[str] = None
result: Optional[Dict[str, Any]] = None
user_agent: Optional[str] = None
timeout: Optional[int] = None
class ScrapeJobInDBBase(ScrapeJobBase):
"""
Base schema for scrape job in database.
"""
id: int
status: JobStatus
created_at: datetime
updated_at: datetime
started_at: Optional[datetime] = None
completed_at: Optional[datetime] = None
error: Optional[str] = None
result: Optional[Dict[str, Any]] = None
class Config:
orm_mode = True
class ScrapeJob(ScrapeJobInDBBase):
"""
Schema for returned scrape job.
"""
pass
class ScrapeJobList(BaseModel):
"""
Schema for a list of scrape jobs.
"""
jobs: List[ScrapeJob]
total: int