Skip to content

Commit 7dfeb3a

Browse files
authored
Improve metoffice typing (home-assistant#154670)
1 parent 9d3b156 commit 7dfeb3a

File tree

4 files changed

+33
-34
lines changed

4 files changed

+33
-34
lines changed

homeassistant/components/metoffice/__init__.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
import asyncio
66
import logging
77

8-
import datapoint
9-
import datapoint.Forecast
10-
import datapoint.Manager
8+
from datapoint.Forecast import Forecast
9+
from datapoint.Manager import Manager
1110

1211
from homeassistant.config_entries import ConfigEntry
1312
from homeassistant.const import (
@@ -48,19 +47,19 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
4847

4948
coordinates = f"{latitude}_{longitude}"
5049

51-
connection = datapoint.Manager.Manager(api_key=api_key)
50+
connection = Manager(api_key=api_key)
5251

53-
async def async_update_hourly() -> datapoint.Forecast:
52+
async def async_update_hourly() -> Forecast:
5453
return await hass.async_add_executor_job(
5554
fetch_data, connection, latitude, longitude, "hourly"
5655
)
5756

58-
async def async_update_daily() -> datapoint.Forecast:
57+
async def async_update_daily() -> Forecast:
5958
return await hass.async_add_executor_job(
6059
fetch_data, connection, latitude, longitude, "daily"
6160
)
6261

63-
async def async_update_twice_daily() -> datapoint.Forecast:
62+
async def async_update_twice_daily() -> Forecast:
6463
return await hass.async_add_executor_job(
6564
fetch_data, connection, latitude, longitude, "twice-daily"
6665
)

homeassistant/components/metoffice/config_flow.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66
import logging
77
from typing import Any
88

9-
import datapoint
109
from datapoint.exceptions import APIException
11-
import datapoint.Manager
10+
from datapoint.Manager import Manager
1211
from requests import HTTPError
1312
import voluptuous as vol
1413

@@ -31,7 +30,7 @@ async def validate_input(
3130
Data has the keys from DATA_SCHEMA with values provided by the user.
3231
"""
3332
errors = {}
34-
connection = datapoint.Manager.Manager(api_key=api_key)
33+
connection = Manager(api_key=api_key)
3534

3635
try:
3736
forecast = await hass.async_add_executor_job(

homeassistant/components/metoffice/helpers.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
import logging
66
from typing import Any, Literal
77

8-
import datapoint
8+
from datapoint.exceptions import APIException
99
from datapoint.Forecast import Forecast
10+
from datapoint.Manager import Manager
1011
from requests import HTTPError
1112

1213
from homeassistant.exceptions import ConfigEntryAuthFailed
@@ -16,7 +17,7 @@
1617

1718

1819
def fetch_data(
19-
connection: datapoint.Manager,
20+
connection: Manager,
2021
latitude: float,
2122
longitude: float,
2223
frequency: Literal["daily", "twice-daily", "hourly"],
@@ -26,7 +27,7 @@ def fetch_data(
2627
return connection.get_forecast(
2728
latitude, longitude, frequency, convert_weather_code=False
2829
)
29-
except (ValueError, datapoint.exceptions.APIException) as err:
30+
except (ValueError, APIException) as err:
3031
_LOGGER.error("Check Met Office connection: %s", err.args)
3132
raise UpdateFailed from err
3233
except HTTPError as err:

homeassistant/components/metoffice/weather.py

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from datetime import datetime
66
from typing import Any, cast
77

8-
from datapoint.Forecast import Forecast as ForecastData
8+
from datapoint.Forecast import Forecast
99

1010
from homeassistant.components.weather import (
1111
ATTR_FORECAST_CONDITION,
@@ -22,7 +22,7 @@
2222
ATTR_FORECAST_WIND_BEARING,
2323
DOMAIN as WEATHER_DOMAIN,
2424
CoordinatorWeatherEntity,
25-
Forecast,
25+
Forecast as WeatherForecast,
2626
WeatherEntityFeature,
2727
)
2828
from homeassistant.config_entries import ConfigEntry
@@ -85,20 +85,20 @@ async def async_setup_entry(
8585
)
8686

8787

88-
def _build_hourly_forecast_data(timestep: dict[str, Any]) -> Forecast:
89-
data = Forecast(datetime=timestep["time"].isoformat())
88+
def _build_hourly_forecast_data(timestep: dict[str, Any]) -> WeatherForecast:
89+
data = WeatherForecast(datetime=timestep["time"].isoformat())
9090
_populate_forecast_data(data, timestep, HOURLY_FORECAST_ATTRIBUTE_MAP)
9191
return data
9292

9393

94-
def _build_daily_forecast_data(timestep: dict[str, Any]) -> Forecast:
95-
data = Forecast(datetime=timestep["time"].isoformat())
94+
def _build_daily_forecast_data(timestep: dict[str, Any]) -> WeatherForecast:
95+
data = WeatherForecast(datetime=timestep["time"].isoformat())
9696
_populate_forecast_data(data, timestep, DAILY_FORECAST_ATTRIBUTE_MAP)
9797
return data
9898

9999

100-
def _build_twice_daily_forecast_data(timestep: dict[str, Any]) -> Forecast:
101-
data = Forecast(datetime=timestep["time"].isoformat())
100+
def _build_twice_daily_forecast_data(timestep: dict[str, Any]) -> WeatherForecast:
101+
data = WeatherForecast(datetime=timestep["time"].isoformat())
102102

103103
# day and night forecasts have slightly different format
104104
if "daySignificantWeatherCode" in timestep:
@@ -111,7 +111,7 @@ def _build_twice_daily_forecast_data(timestep: dict[str, Any]) -> Forecast:
111111

112112

113113
def _populate_forecast_data(
114-
forecast: Forecast, timestep: dict[str, Any], mapping: dict[str, str]
114+
forecast: WeatherForecast, timestep: dict[str, Any], mapping: dict[str, str]
115115
) -> None:
116116
def get_mapped_attribute(attr: str) -> Any:
117117
if attr not in mapping:
@@ -153,9 +153,9 @@ def get_mapped_attribute(attr: str) -> Any:
153153

154154
class MetOfficeWeather(
155155
CoordinatorWeatherEntity[
156-
TimestampDataUpdateCoordinator[ForecastData],
157-
TimestampDataUpdateCoordinator[ForecastData],
158-
TimestampDataUpdateCoordinator[ForecastData],
156+
TimestampDataUpdateCoordinator[Forecast],
157+
TimestampDataUpdateCoordinator[Forecast],
158+
TimestampDataUpdateCoordinator[Forecast],
159159
]
160160
):
161161
"""Implementation of a Met Office weather condition."""
@@ -177,9 +177,9 @@ class MetOfficeWeather(
177177

178178
def __init__(
179179
self,
180-
coordinator_daily: TimestampDataUpdateCoordinator[ForecastData],
181-
coordinator_hourly: TimestampDataUpdateCoordinator[ForecastData],
182-
coordinator_twice_daily: TimestampDataUpdateCoordinator[ForecastData],
180+
coordinator_daily: TimestampDataUpdateCoordinator[Forecast],
181+
coordinator_hourly: TimestampDataUpdateCoordinator[Forecast],
182+
coordinator_twice_daily: TimestampDataUpdateCoordinator[Forecast],
183183
hass_data: dict[str, Any],
184184
) -> None:
185185
"""Initialise the platform with a data instance."""
@@ -263,10 +263,10 @@ def wind_bearing(self) -> float | None:
263263
return float(value) if value is not None else None
264264

265265
@callback
266-
def _async_forecast_daily(self) -> list[Forecast] | None:
266+
def _async_forecast_daily(self) -> list[WeatherForecast] | None:
267267
"""Return the daily forecast in native units."""
268268
coordinator = cast(
269-
TimestampDataUpdateCoordinator[ForecastData],
269+
TimestampDataUpdateCoordinator[Forecast],
270270
self.forecast_coordinators["daily"],
271271
)
272272
timesteps = coordinator.data.timesteps
@@ -277,10 +277,10 @@ def _async_forecast_daily(self) -> list[Forecast] | None:
277277
]
278278

279279
@callback
280-
def _async_forecast_hourly(self) -> list[Forecast] | None:
280+
def _async_forecast_hourly(self) -> list[WeatherForecast] | None:
281281
"""Return the hourly forecast in native units."""
282282
coordinator = cast(
283-
TimestampDataUpdateCoordinator[ForecastData],
283+
TimestampDataUpdateCoordinator[Forecast],
284284
self.forecast_coordinators["hourly"],
285285
)
286286

@@ -292,10 +292,10 @@ def _async_forecast_hourly(self) -> list[Forecast] | None:
292292
]
293293

294294
@callback
295-
def _async_forecast_twice_daily(self) -> list[Forecast] | None:
295+
def _async_forecast_twice_daily(self) -> list[WeatherForecast] | None:
296296
"""Return the twice daily forecast in native units."""
297297
coordinator = cast(
298-
TimestampDataUpdateCoordinator[ForecastData],
298+
TimestampDataUpdateCoordinator[Forecast],
299299
self.forecast_coordinators["twice_daily"],
300300
)
301301
timesteps = coordinator.data.timesteps

0 commit comments

Comments
 (0)