75 lines
1.4 KiB
Python
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
|