1 """Helpers used for Met Office integration."""
3 from __future__
import annotations
8 from datapoint.Site
import Site
13 from .const
import MODE_3HOURLY
14 from .data
import MetOfficeData
16 _LOGGER = logging.getLogger(__name__)
20 connection: datapoint.Manager, latitude: float, longitude: float
22 """Fetch site information from Datapoint API."""
24 return connection.get_nearest_forecast_site(
25 latitude=latitude, longitude=longitude
27 except datapoint.exceptions.APIException
as err:
28 _LOGGER.error(
"Received error from Met Office Datapoint: %s", err)
32 def fetch_data(connection: datapoint.Manager, site: Site, mode: str) -> MetOfficeData:
33 """Fetch weather and forecast from Datapoint API."""
35 forecast = connection.get_forecast_for_site(site.location_id, mode)
36 except (ValueError, datapoint.exceptions.APIException)
as err:
37 _LOGGER.error(
"Check Met Office connection: %s", err.args)
38 raise UpdateFailed
from err
45 for day
in forecast.days
46 for timestep
in day.timesteps
47 if timestep.date > time_now
49 mode == MODE_3HOURLY
or timestep.date.hour > 6
Site|None fetch_site(datapoint.Manager connection, float latitude, float longitude)
MetOfficeData fetch_data(datapoint.Manager connection, Site site, str mode)