from dataclasses import dataclass, field from pydantic import BaseModel, ConfigDict, Field class NolMeta(BaseModel): """상품 페이지 SSR HTML에서 긁어낸 공연 정보.""" model_config = ConfigDict(populate_by_name=True) goods_id: str url: str goods_name: str | None = Field(None, alias="goodsName") place_name: str | None = Field(None, alias="placeName") play_start_date: str | None = Field(None, alias="playStartDate") play_end_date: str | None = Field(None, alias="playEndDate") running_time: str | None = Field(None, alias="runningTime") inter_mission_time: str | None = Field(None, alias="interMissionTime") view_rate_name: str | None = Field(None, alias="viewRateName") genre_name: str | None = Field(None, alias="genreName") sub_genre_name: str | None = Field(None, alias="subGenreName") corporation_name: str | None = Field(None, alias="corporationName") poster_image_url: str | None = Field(None, alias="posterImageUrl") booking_open_time: str | None = Field(None, alias="bookingOpenTime") min_price: int | None = None detail_image_urls: list[str] = [] @dataclass class FetchedImage: url: str data: bytes extension: str # 확장자가 .gif여도 실제 바이트로 판별한 값 @dataclass class NolProduct: meta: NolMeta poster: FetchedImage | None details: list[FetchedImage] failed_urls: list[str] = field(default_factory=list)