mirror of
https://github.com/home-assistant/core.git
synced 2025-07-12 07:47:08 +00:00
Improve type hints in environment_canada sensors (#136813)
* Use TypeVar * Use bound for TypeVar * Remove PEP 695 syntax * Add type alias to use new TypeVar syntax --------- Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
This commit is contained in:
parent
5e6f4a374e
commit
bfa7eaa221
@ -19,6 +19,7 @@ from .const import DOMAIN
|
|||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
type ECConfigEntry = ConfigEntry[ECRuntimeData]
|
type ECConfigEntry = ConfigEntry[ECRuntimeData]
|
||||||
|
type ECDataType = ECAirQuality | ECRadar | ECWeather
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@ -30,16 +31,16 @@ class ECRuntimeData:
|
|||||||
weather_coordinator: ECDataUpdateCoordinator[ECWeather]
|
weather_coordinator: ECDataUpdateCoordinator[ECWeather]
|
||||||
|
|
||||||
|
|
||||||
class ECDataUpdateCoordinator[_ECDataTypeT: ECAirQuality | ECRadar | ECWeather](
|
class ECDataUpdateCoordinator[DataT: ECDataType](DataUpdateCoordinator[DataT]):
|
||||||
DataUpdateCoordinator[_ECDataTypeT]
|
|
||||||
):
|
|
||||||
"""Class to manage fetching EC data."""
|
"""Class to manage fetching EC data."""
|
||||||
|
|
||||||
|
config_entry: ECConfigEntry
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
entry: ECConfigEntry,
|
entry: ECConfigEntry,
|
||||||
ec_data: _ECDataTypeT,
|
ec_data: DataT,
|
||||||
name: str,
|
name: str,
|
||||||
update_interval: timedelta,
|
update_interval: timedelta,
|
||||||
) -> None:
|
) -> None:
|
||||||
@ -60,7 +61,7 @@ class ECDataUpdateCoordinator[_ECDataTypeT: ECAirQuality | ECRadar | ECWeather](
|
|||||||
configuration_url="https://weather.gc.ca/",
|
configuration_url="https://weather.gc.ca/",
|
||||||
)
|
)
|
||||||
|
|
||||||
async def _async_update_data(self) -> _ECDataTypeT:
|
async def _async_update_data(self) -> DataT:
|
||||||
"""Fetch data from EC."""
|
"""Fetch data from EC."""
|
||||||
try:
|
try:
|
||||||
await self.ec_data.update()
|
await self.ec_data.update()
|
||||||
|
@ -6,6 +6,8 @@ from collections.abc import Callable
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
|
from env_canada import ECWeather
|
||||||
|
|
||||||
from homeassistant.components.sensor import (
|
from homeassistant.components.sensor import (
|
||||||
SensorDeviceClass,
|
SensorDeviceClass,
|
||||||
SensorEntity,
|
SensorEntity,
|
||||||
@ -27,7 +29,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
|||||||
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
||||||
|
|
||||||
from .const import ATTR_STATION
|
from .const import ATTR_STATION
|
||||||
from .coordinator import ECConfigEntry
|
from .coordinator import ECConfigEntry, ECDataType, ECDataUpdateCoordinator
|
||||||
|
|
||||||
ATTR_TIME = "alert time"
|
ATTR_TIME = "alert time"
|
||||||
|
|
||||||
@ -268,13 +270,19 @@ async def async_setup_entry(
|
|||||||
async_add_entities(sensors)
|
async_add_entities(sensors)
|
||||||
|
|
||||||
|
|
||||||
class ECBaseSensorEntity(CoordinatorEntity, SensorEntity):
|
class ECBaseSensorEntity[DataT: ECDataType](
|
||||||
|
CoordinatorEntity[ECDataUpdateCoordinator[DataT]], SensorEntity
|
||||||
|
):
|
||||||
"""Environment Canada sensor base."""
|
"""Environment Canada sensor base."""
|
||||||
|
|
||||||
entity_description: ECSensorEntityDescription
|
entity_description: ECSensorEntityDescription
|
||||||
_attr_has_entity_name = True
|
_attr_has_entity_name = True
|
||||||
|
|
||||||
def __init__(self, coordinator, description):
|
def __init__(
|
||||||
|
self,
|
||||||
|
coordinator: ECDataUpdateCoordinator[DataT],
|
||||||
|
description: ECSensorEntityDescription,
|
||||||
|
) -> None:
|
||||||
"""Initialize the base sensor."""
|
"""Initialize the base sensor."""
|
||||||
super().__init__(coordinator)
|
super().__init__(coordinator)
|
||||||
self.entity_description = description
|
self.entity_description = description
|
||||||
@ -292,10 +300,14 @@ class ECBaseSensorEntity(CoordinatorEntity, SensorEntity):
|
|||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
||||||
class ECSensorEntity(ECBaseSensorEntity):
|
class ECSensorEntity[DataT: ECDataType](ECBaseSensorEntity[DataT]):
|
||||||
"""Environment Canada sensor for conditions."""
|
"""Environment Canada sensor for conditions."""
|
||||||
|
|
||||||
def __init__(self, coordinator, description):
|
def __init__(
|
||||||
|
self,
|
||||||
|
coordinator: ECDataUpdateCoordinator[DataT],
|
||||||
|
description: ECSensorEntityDescription,
|
||||||
|
) -> None:
|
||||||
"""Initialize the sensor."""
|
"""Initialize the sensor."""
|
||||||
super().__init__(coordinator, description)
|
super().__init__(coordinator, description)
|
||||||
self._attr_extra_state_attributes = {
|
self._attr_extra_state_attributes = {
|
||||||
@ -304,7 +316,7 @@ class ECSensorEntity(ECBaseSensorEntity):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class ECAlertSensorEntity(ECBaseSensorEntity):
|
class ECAlertSensorEntity(ECBaseSensorEntity[ECWeather]):
|
||||||
"""Environment Canada sensor for alerts."""
|
"""Environment Canada sensor for alerts."""
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
Loading…
x
Reference in New Issue
Block a user