feat(easel): implement multiple weather providers

This commit is contained in:
2026-06-24 16:00:39 +03:00
parent e37ca6eeac
commit 9192ca3e4a
10 changed files with 321 additions and 19 deletions
+16 -2
View File
@@ -1,6 +1,7 @@
import datetime
import logging
from collections import defaultdict
from os import environ
from aiocache import cached
@@ -17,7 +18,7 @@ logger = logging.getLogger("openweather")
class OpenWeatherApi(WeatherApi):
PROVIDER = "openweather"
SOURCE = OpenWeather("517a6bccceaa1c48127f6199ec3fb7cf")
SOURCE = OpenWeather(environ["OPENWEATHER_KEY"])
@classmethod
def _parse_location(cls, location_id: str) -> tuple[float, float]:
@@ -32,7 +33,20 @@ class OpenWeatherApi(WeatherApi):
return await self.SOURCE.get_forecast(*self._parse_location(location_id))
async def find_locations(self, query: str) -> list[Location]:
raise NotImplementedError
result = await self.SOURCE.get_locations(query)
return [
Location(
id=f"{item.lat}:{item.lon}",
name=item.name,
lat=item.lat,
lon=item.lon,
country=item.country,
country_code=item.country.lower(),
district=item.state,
subdistrict="",
)
for item in result
]
async def get_day(self, location_id: str, date: datetime.date) -> WeatherResponse:
data: Forecast = await self._get_location_forecast(location_id)