Files
iaai-parser/iaai_scraper/storage/schemas.py
2026-04-07 23:51:41 +03:00

57 lines
1.5 KiB
Python

from datetime import datetime, timezone
from typing import Any
from pydantic import BaseModel, Field
class ImageRecord(BaseModel):
fullres_image: str
preview_image: str
order_index: int = 0
class CarRecord(BaseModel):
parser_id: str
brand: str
model: str
year: int | None = None
price: int | None = None
currency: str = "USD"
mileage: int = 0
country: str = "US"
is_sold: bool = False
color: str = "other"
drive: str | None = None
gearbox: str | None = None
steering_wheel: str | None = None
body_type: str = "OTHER"
engine_volume: int | None = None
selling_type: str = "AUCTION"
one_owner: bool = False
new_car: bool = False
is_hidden: bool = False
origin: str = "NA"
origin_url: str
origin_id: str
is_damaged: bool = False
evaluation: str | None = None
non_smoking: bool = True
rental: bool = False
repair_history: bool = False
slug: str
last_seen_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
content_hash: str = ""
images: list[ImageRecord] = Field(default_factory=list)
raw_attributes: dict[str, Any] = Field(default_factory=dict)
mapping_notes: list[str] = Field(default_factory=list)
class ScrapeExport(BaseModel):
source_url: str
fetched_at_epoch: int
vehicle_summary: dict[str, Any] = Field(default_factory=dict)
payload_insights: dict[str, Any] = Field(default_factory=dict)
db_record: CarRecord | None = None
network: dict[str, Any] = Field(default_factory=dict)
access_notes: dict[str, Any] = Field(default_factory=dict)