mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 06:07:17 +00:00
Improve CoordinatorWeatherEntity generic typing (#116760)
This commit is contained in:
parent
8238cd9f22
commit
f9d95efac0
@ -31,7 +31,6 @@ from homeassistant.const import (
|
|||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.update_coordinator import TimestampDataUpdateCoordinator
|
|
||||||
from homeassistant.util.dt import utc_from_timestamp
|
from homeassistant.util.dt import utc_from_timestamp
|
||||||
|
|
||||||
from . import AccuWeatherData
|
from . import AccuWeatherData
|
||||||
@ -65,8 +64,6 @@ class AccuWeatherEntity(
|
|||||||
CoordinatorWeatherEntity[
|
CoordinatorWeatherEntity[
|
||||||
AccuWeatherObservationDataUpdateCoordinator,
|
AccuWeatherObservationDataUpdateCoordinator,
|
||||||
AccuWeatherDailyForecastDataUpdateCoordinator,
|
AccuWeatherDailyForecastDataUpdateCoordinator,
|
||||||
TimestampDataUpdateCoordinator,
|
|
||||||
TimestampDataUpdateCoordinator,
|
|
||||||
]
|
]
|
||||||
):
|
):
|
||||||
"""Define an AccuWeather entity."""
|
"""Define an AccuWeather entity."""
|
||||||
|
@ -91,8 +91,6 @@ class MetOfficeWeather(
|
|||||||
CoordinatorWeatherEntity[
|
CoordinatorWeatherEntity[
|
||||||
TimestampDataUpdateCoordinator[MetOfficeData],
|
TimestampDataUpdateCoordinator[MetOfficeData],
|
||||||
TimestampDataUpdateCoordinator[MetOfficeData],
|
TimestampDataUpdateCoordinator[MetOfficeData],
|
||||||
TimestampDataUpdateCoordinator[MetOfficeData],
|
|
||||||
TimestampDataUpdateCoordinator[MetOfficeData], # Can be removed in Python 3.12
|
|
||||||
]
|
]
|
||||||
):
|
):
|
||||||
"""Implementation of a Met Office weather condition."""
|
"""Implementation of a Met Office weather condition."""
|
||||||
|
@ -35,6 +35,7 @@ from homeassistant.const import (
|
|||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers import entity_registry as er
|
from homeassistant.helpers import entity_registry as er
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
from homeassistant.helpers.update_coordinator import TimestampDataUpdateCoordinator
|
||||||
from homeassistant.util.unit_conversion import SpeedConverter, TemperatureConverter
|
from homeassistant.util.unit_conversion import SpeedConverter, TemperatureConverter
|
||||||
|
|
||||||
from . import NWSData, base_unique_id, device_info
|
from . import NWSData, base_unique_id, device_info
|
||||||
@ -110,7 +111,7 @@ def _calculate_unique_id(entry_data: MappingProxyType[str, Any], mode: str) -> s
|
|||||||
return f"{base_unique_id(latitude, longitude)}_{mode}"
|
return f"{base_unique_id(latitude, longitude)}_{mode}"
|
||||||
|
|
||||||
|
|
||||||
class NWSWeather(CoordinatorWeatherEntity):
|
class NWSWeather(CoordinatorWeatherEntity[TimestampDataUpdateCoordinator[None]]):
|
||||||
"""Representation of a weather condition."""
|
"""Representation of a weather condition."""
|
||||||
|
|
||||||
_attr_attribution = ATTRIBUTION
|
_attr_attribution = ATTRIBUTION
|
||||||
|
@ -8,18 +8,9 @@ from contextlib import suppress
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from functools import cached_property, partial
|
from functools import cached_property, partial
|
||||||
import logging
|
import logging
|
||||||
from typing import (
|
from typing import Any, Final, Generic, Literal, Required, TypedDict, cast, final
|
||||||
Any,
|
|
||||||
Final,
|
|
||||||
Generic,
|
|
||||||
Literal,
|
|
||||||
Required,
|
|
||||||
TypedDict,
|
|
||||||
TypeVar,
|
|
||||||
cast,
|
|
||||||
final,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
from typing_extensions import TypeVar
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
@ -137,21 +128,25 @@ LEGACY_SERVICE_GET_FORECAST: Final = "get_forecast"
|
|||||||
SERVICE_GET_FORECASTS: Final = "get_forecasts"
|
SERVICE_GET_FORECASTS: Final = "get_forecasts"
|
||||||
|
|
||||||
_ObservationUpdateCoordinatorT = TypeVar(
|
_ObservationUpdateCoordinatorT = TypeVar(
|
||||||
"_ObservationUpdateCoordinatorT", bound="DataUpdateCoordinator[Any]"
|
"_ObservationUpdateCoordinatorT",
|
||||||
|
bound=DataUpdateCoordinator[Any],
|
||||||
|
default=DataUpdateCoordinator[dict[str, Any]],
|
||||||
)
|
)
|
||||||
|
|
||||||
# Note:
|
|
||||||
# Mypy bug https://github.com/python/mypy/issues/9424 prevents us from making the
|
|
||||||
# forecast cooordinators optional, bound=TimestampDataUpdateCoordinator[Any] | None
|
|
||||||
|
|
||||||
_DailyForecastUpdateCoordinatorT = TypeVar(
|
_DailyForecastUpdateCoordinatorT = TypeVar(
|
||||||
"_DailyForecastUpdateCoordinatorT", bound="TimestampDataUpdateCoordinator[Any]"
|
"_DailyForecastUpdateCoordinatorT",
|
||||||
|
bound=TimestampDataUpdateCoordinator[Any],
|
||||||
|
default=TimestampDataUpdateCoordinator[None],
|
||||||
)
|
)
|
||||||
_HourlyForecastUpdateCoordinatorT = TypeVar(
|
_HourlyForecastUpdateCoordinatorT = TypeVar(
|
||||||
"_HourlyForecastUpdateCoordinatorT", bound="TimestampDataUpdateCoordinator[Any]"
|
"_HourlyForecastUpdateCoordinatorT",
|
||||||
|
bound=TimestampDataUpdateCoordinator[Any],
|
||||||
|
default=_DailyForecastUpdateCoordinatorT,
|
||||||
)
|
)
|
||||||
_TwiceDailyForecastUpdateCoordinatorT = TypeVar(
|
_TwiceDailyForecastUpdateCoordinatorT = TypeVar(
|
||||||
"_TwiceDailyForecastUpdateCoordinatorT", bound="TimestampDataUpdateCoordinator[Any]"
|
"_TwiceDailyForecastUpdateCoordinatorT",
|
||||||
|
bound=TimestampDataUpdateCoordinator[Any],
|
||||||
|
default=_DailyForecastUpdateCoordinatorT,
|
||||||
)
|
)
|
||||||
|
|
||||||
# mypy: disallow-any-generics
|
# mypy: disallow-any-generics
|
||||||
@ -1244,19 +1239,12 @@ class CoordinatorWeatherEntity(
|
|||||||
|
|
||||||
class SingleCoordinatorWeatherEntity(
|
class SingleCoordinatorWeatherEntity(
|
||||||
CoordinatorWeatherEntity[
|
CoordinatorWeatherEntity[
|
||||||
_ObservationUpdateCoordinatorT,
|
_ObservationUpdateCoordinatorT, TimestampDataUpdateCoordinator[None]
|
||||||
TimestampDataUpdateCoordinator[None],
|
|
||||||
TimestampDataUpdateCoordinator[None],
|
|
||||||
TimestampDataUpdateCoordinator[None],
|
|
||||||
],
|
],
|
||||||
):
|
):
|
||||||
"""A class for weather entities using a single DataUpdateCoordinators.
|
"""A class for weather entities using a single DataUpdateCoordinators.
|
||||||
|
|
||||||
This class is added as a convenience because:
|
This class is added as a convenience.
|
||||||
- Deriving from CoordinatorWeatherEntity requires specifying all type parameters
|
|
||||||
until we upgrade to Python 3.12 which supports defaults
|
|
||||||
- Mypy bug https://github.com/python/mypy/issues/9424 prevents us from making the
|
|
||||||
forecast cooordinator type vars optional
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user