50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
from datetime import datetime
|
|
from dataclasses import field
|
|
from pydantic.dataclasses import dataclass
|
|
|
|
|
|
@dataclass
|
|
class PricingInfo:
|
|
original_price: float
|
|
current_price: float
|
|
price_before_drop: float | None = None
|
|
edu_price: float | None = None
|
|
|
|
|
|
@dataclass
|
|
class AvailabilityInfo:
|
|
available: bool | None = None
|
|
condition: str | None = None
|
|
app_exclusive: bool | None = None
|
|
member_pick: bool | None = None
|
|
member_deal: bool | None = None
|
|
|
|
|
|
@dataclass
|
|
class ProductMetadata:
|
|
image_url: str | None = None
|
|
channel_id: str | None = None
|
|
customization_index: str | None = None
|
|
member_non_member_comparison: str | None = None
|
|
overstock_text: str | None = None
|
|
percentage: int | None = None
|
|
affiliate_url: str | None = None
|
|
|
|
|
|
@dataclass
|
|
class ProductTiming:
|
|
discovered_date: datetime | None = None
|
|
start_date: datetime | None = None
|
|
end_date: datetime | None = None
|
|
|
|
|
|
@dataclass
|
|
class Product:
|
|
product_id: str
|
|
title: str
|
|
url: str
|
|
metadata: ProductMetadata = field(default_factory=ProductMetadata)
|
|
timing: ProductTiming = field(default_factory=ProductTiming)
|
|
pricing: PricingInfo = field(default_factory=PricingInfo)
|
|
availability: AvailabilityInfo = field(default_factory=AvailabilityInfo)
|