""" Specification Service for fetching vehicle specifications from AUTOBEGINS via Carmodoo Uses Playwright to interact with the dealer portal and call AUTOBEGINS API """ import os import re import asyncio import logging import json from typing import Optional, Dict, Any from dataclasses import dataclass, field # Configure logging logger = logging.getLogger(__name__) # Playwright imports try: from playwright.async_api import async_playwright, Browser, Page PLAYWRIGHT_AVAILABLE = True except ImportError: PLAYWRIGHT_AVAILABLE = False logger.warning("Playwright not installed. Specification lookup will not work.") # Carmodoo credentials CARMODOO_BASE_URL = "https://dealer.carmodoo.com" CARMODOO_USER_ID = os.getenv("CARMODOO_USER_ID", "01033315258") CARMODOO_PASSWORD = os.getenv("CARMODOO_PASSWORD", "alskfl@1122") @dataclass class CarSpecification: """Vehicle specification data from AUTOBEGINS""" car_number: str = "" manufacturer: str = "" model_name: str = "" grade: str = "" model_year: str = "" first_registration: str = "" body_type: str = "" transmission: str = "" fuel_type: str = "" displacement: int = 0 color: str = "" mileage: int = 0 usage: str = "" vin: str = "" inspection_validity: str = "" # Price info (in 만원) release_price: int = 0 base_price: int = 0 option_price: int = 0 # Mortgage/Seizure mortgage_count: int = 0 seizure_count: int = 0 # Options standard_options: list = field(default_factory=list) selected_options: list = field(default_factory=list) # Raw data raw_data: dict = field(default_factory=dict) def _parse_spec_html(html: str, car_number: str) -> CarSpecification: """Parse HTML content from AUTOBEGINS search.html to extract specification data""" spec = CarSpecification(car_number=car_number) spec.raw_data = {"html_length": len(html)} try: # Manufacturer and Model (from logo and text) model_match = re.search(r'