"""Open-Meteo current-weather adapter.""" from datetime import datetime from typing import Any import httpx OPEN_METEO_URL = "https://api.open-meteo.com/v1/forecast" class OpenMeteoRequestFailed(RuntimeError): pass async def fetch_current_weather(latitude: float, longitude: float) -> dict[str, Any]: params = { "latitude": latitude, "longitude": longitude, "current": "temperature_2m,weather_code,wind_speed_10m", "timezone": "auto", } try: async with httpx.AsyncClient(timeout=httpx.Timeout(10.0, connect=5.0)) as client: response = await client.get(OPEN_METEO_URL, params=params) response.raise_for_status() payload = response.json() current = payload["current"] return { "temperature": current["temperature_2m"], "weather_code": current["weather_code"], "wind_speed": current.get("wind_speed_10m"), "observed_at": current["time"], "timezone": payload.get("timezone"), "latitude": payload.get("latitude", latitude), "longitude": payload.get("longitude", longitude), } except (httpx.HTTPError, KeyError, TypeError, ValueError) as ex: raise OpenMeteoRequestFailed("Open-Meteo 날씨 조회에 실패했습니다.") from ex