Use PEP 695 TypeVar syntax for eheimdigital (#147154)

This commit is contained in:
Marc Mueller 2025-06-19 20:25:45 +02:00 committed by GitHub
parent cf67a68454
commit b8dfb2c850
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 46 additions and 48 deletions

View File

@ -2,7 +2,7 @@
from collections.abc import Awaitable, Callable from collections.abc import Awaitable, Callable
from dataclasses import dataclass from dataclasses import dataclass
from typing import Generic, TypeVar, override from typing import Any, override
from eheimdigital.classic_vario import EheimDigitalClassicVario from eheimdigital.classic_vario import EheimDigitalClassicVario
from eheimdigital.device import EheimDigitalDevice from eheimdigital.device import EheimDigitalDevice
@ -30,16 +30,16 @@ from .entity import EheimDigitalEntity, exception_handler
PARALLEL_UPDATES = 0 PARALLEL_UPDATES = 0
_DeviceT_co = TypeVar("_DeviceT_co", bound=EheimDigitalDevice, covariant=True)
@dataclass(frozen=True, kw_only=True) @dataclass(frozen=True, kw_only=True)
class EheimDigitalNumberDescription(NumberEntityDescription, Generic[_DeviceT_co]): class EheimDigitalNumberDescription[_DeviceT: EheimDigitalDevice](
NumberEntityDescription
):
"""Class describing EHEIM Digital sensor entities.""" """Class describing EHEIM Digital sensor entities."""
value_fn: Callable[[_DeviceT_co], float | None] value_fn: Callable[[_DeviceT], float | None]
set_value_fn: Callable[[_DeviceT_co, float], Awaitable[None]] set_value_fn: Callable[[_DeviceT, float], Awaitable[None]]
uom_fn: Callable[[_DeviceT_co], str] | None = None uom_fn: Callable[[_DeviceT], str] | None = None
CLASSICVARIO_DESCRIPTIONS: tuple[ CLASSICVARIO_DESCRIPTIONS: tuple[
@ -136,7 +136,7 @@ async def async_setup_entry(
device_address: dict[str, EheimDigitalDevice], device_address: dict[str, EheimDigitalDevice],
) -> None: ) -> None:
"""Set up the number entities for one or multiple devices.""" """Set up the number entities for one or multiple devices."""
entities: list[EheimDigitalNumber[EheimDigitalDevice]] = [] entities: list[EheimDigitalNumber[Any]] = []
for device in device_address.values(): for device in device_address.values():
if isinstance(device, EheimDigitalClassicVario): if isinstance(device, EheimDigitalClassicVario):
entities.extend( entities.extend(
@ -163,18 +163,18 @@ async def async_setup_entry(
async_setup_device_entities(coordinator.hub.devices) async_setup_device_entities(coordinator.hub.devices)
class EheimDigitalNumber( class EheimDigitalNumber[_DeviceT: EheimDigitalDevice](
EheimDigitalEntity[_DeviceT_co], NumberEntity, Generic[_DeviceT_co] EheimDigitalEntity[_DeviceT], NumberEntity
): ):
"""Represent a EHEIM Digital number entity.""" """Represent a EHEIM Digital number entity."""
entity_description: EheimDigitalNumberDescription[_DeviceT_co] entity_description: EheimDigitalNumberDescription[_DeviceT]
def __init__( def __init__(
self, self,
coordinator: EheimDigitalUpdateCoordinator, coordinator: EheimDigitalUpdateCoordinator,
device: _DeviceT_co, device: _DeviceT,
description: EheimDigitalNumberDescription[_DeviceT_co], description: EheimDigitalNumberDescription[_DeviceT],
) -> None: ) -> None:
"""Initialize an EHEIM Digital number entity.""" """Initialize an EHEIM Digital number entity."""
super().__init__(coordinator, device) super().__init__(coordinator, device)

View File

@ -2,7 +2,7 @@
from collections.abc import Awaitable, Callable from collections.abc import Awaitable, Callable
from dataclasses import dataclass from dataclasses import dataclass
from typing import Generic, TypeVar, override from typing import Any, override
from eheimdigital.classic_vario import EheimDigitalClassicVario from eheimdigital.classic_vario import EheimDigitalClassicVario
from eheimdigital.device import EheimDigitalDevice from eheimdigital.device import EheimDigitalDevice
@ -17,15 +17,15 @@ from .entity import EheimDigitalEntity, exception_handler
PARALLEL_UPDATES = 0 PARALLEL_UPDATES = 0
_DeviceT_co = TypeVar("_DeviceT_co", bound=EheimDigitalDevice, covariant=True)
@dataclass(frozen=True, kw_only=True) @dataclass(frozen=True, kw_only=True)
class EheimDigitalSelectDescription(SelectEntityDescription, Generic[_DeviceT_co]): class EheimDigitalSelectDescription[_DeviceT: EheimDigitalDevice](
SelectEntityDescription
):
"""Class describing EHEIM Digital select entities.""" """Class describing EHEIM Digital select entities."""
value_fn: Callable[[_DeviceT_co], str | None] value_fn: Callable[[_DeviceT], str | None]
set_value_fn: Callable[[_DeviceT_co, str], Awaitable[None]] set_value_fn: Callable[[_DeviceT, str], Awaitable[None]]
CLASSICVARIO_DESCRIPTIONS: tuple[ CLASSICVARIO_DESCRIPTIONS: tuple[
@ -59,7 +59,7 @@ async def async_setup_entry(
device_address: dict[str, EheimDigitalDevice], device_address: dict[str, EheimDigitalDevice],
) -> None: ) -> None:
"""Set up the number entities for one or multiple devices.""" """Set up the number entities for one or multiple devices."""
entities: list[EheimDigitalSelect[EheimDigitalDevice]] = [] entities: list[EheimDigitalSelect[Any]] = []
for device in device_address.values(): for device in device_address.values():
if isinstance(device, EheimDigitalClassicVario): if isinstance(device, EheimDigitalClassicVario):
entities.extend( entities.extend(
@ -75,18 +75,18 @@ async def async_setup_entry(
async_setup_device_entities(coordinator.hub.devices) async_setup_device_entities(coordinator.hub.devices)
class EheimDigitalSelect( class EheimDigitalSelect[_DeviceT: EheimDigitalDevice](
EheimDigitalEntity[_DeviceT_co], SelectEntity, Generic[_DeviceT_co] EheimDigitalEntity[_DeviceT], SelectEntity
): ):
"""Represent an EHEIM Digital select entity.""" """Represent an EHEIM Digital select entity."""
entity_description: EheimDigitalSelectDescription[_DeviceT_co] entity_description: EheimDigitalSelectDescription[_DeviceT]
def __init__( def __init__(
self, self,
coordinator: EheimDigitalUpdateCoordinator, coordinator: EheimDigitalUpdateCoordinator,
device: _DeviceT_co, device: _DeviceT,
description: EheimDigitalSelectDescription[_DeviceT_co], description: EheimDigitalSelectDescription[_DeviceT],
) -> None: ) -> None:
"""Initialize an EHEIM Digital select entity.""" """Initialize an EHEIM Digital select entity."""
super().__init__(coordinator, device) super().__init__(coordinator, device)

View File

@ -2,7 +2,7 @@
from collections.abc import Callable from collections.abc import Callable
from dataclasses import dataclass from dataclasses import dataclass
from typing import Generic, TypeVar, override from typing import Any, override
from eheimdigital.classic_vario import EheimDigitalClassicVario from eheimdigital.classic_vario import EheimDigitalClassicVario
from eheimdigital.device import EheimDigitalDevice from eheimdigital.device import EheimDigitalDevice
@ -20,14 +20,14 @@ from .entity import EheimDigitalEntity
# Coordinator is used to centralize the data updates # Coordinator is used to centralize the data updates
PARALLEL_UPDATES = 0 PARALLEL_UPDATES = 0
_DeviceT_co = TypeVar("_DeviceT_co", bound=EheimDigitalDevice, covariant=True)
@dataclass(frozen=True, kw_only=True) @dataclass(frozen=True, kw_only=True)
class EheimDigitalSensorDescription(SensorEntityDescription, Generic[_DeviceT_co]): class EheimDigitalSensorDescription[_DeviceT: EheimDigitalDevice](
SensorEntityDescription
):
"""Class describing EHEIM Digital sensor entities.""" """Class describing EHEIM Digital sensor entities."""
value_fn: Callable[[_DeviceT_co], float | str | None] value_fn: Callable[[_DeviceT], float | str | None]
CLASSICVARIO_DESCRIPTIONS: tuple[ CLASSICVARIO_DESCRIPTIONS: tuple[
@ -75,7 +75,7 @@ async def async_setup_entry(
device_address: dict[str, EheimDigitalDevice], device_address: dict[str, EheimDigitalDevice],
) -> None: ) -> None:
"""Set up the light entities for one or multiple devices.""" """Set up the light entities for one or multiple devices."""
entities: list[EheimDigitalSensor[EheimDigitalDevice]] = [] entities: list[EheimDigitalSensor[Any]] = []
for device in device_address.values(): for device in device_address.values():
if isinstance(device, EheimDigitalClassicVario): if isinstance(device, EheimDigitalClassicVario):
entities += [ entities += [
@ -91,18 +91,18 @@ async def async_setup_entry(
async_setup_device_entities(coordinator.hub.devices) async_setup_device_entities(coordinator.hub.devices)
class EheimDigitalSensor( class EheimDigitalSensor[_DeviceT: EheimDigitalDevice](
EheimDigitalEntity[_DeviceT_co], SensorEntity, Generic[_DeviceT_co] EheimDigitalEntity[_DeviceT], SensorEntity
): ):
"""Represent a EHEIM Digital sensor entity.""" """Represent a EHEIM Digital sensor entity."""
entity_description: EheimDigitalSensorDescription[_DeviceT_co] entity_description: EheimDigitalSensorDescription[_DeviceT]
def __init__( def __init__(
self, self,
coordinator: EheimDigitalUpdateCoordinator, coordinator: EheimDigitalUpdateCoordinator,
device: _DeviceT_co, device: _DeviceT,
description: EheimDigitalSensorDescription[_DeviceT_co], description: EheimDigitalSensorDescription[_DeviceT],
) -> None: ) -> None:
"""Initialize an EHEIM Digital number entity.""" """Initialize an EHEIM Digital number entity."""
super().__init__(coordinator, device) super().__init__(coordinator, device)

View File

@ -3,7 +3,7 @@
from collections.abc import Awaitable, Callable from collections.abc import Awaitable, Callable
from dataclasses import dataclass from dataclasses import dataclass
from datetime import time from datetime import time
from typing import Generic, TypeVar, final, override from typing import Any, final, override
from eheimdigital.classic_vario import EheimDigitalClassicVario from eheimdigital.classic_vario import EheimDigitalClassicVario
from eheimdigital.device import EheimDigitalDevice from eheimdigital.device import EheimDigitalDevice
@ -19,15 +19,13 @@ from .entity import EheimDigitalEntity, exception_handler
PARALLEL_UPDATES = 0 PARALLEL_UPDATES = 0
_DeviceT_co = TypeVar("_DeviceT_co", bound=EheimDigitalDevice, covariant=True)
@dataclass(frozen=True, kw_only=True) @dataclass(frozen=True, kw_only=True)
class EheimDigitalTimeDescription(TimeEntityDescription, Generic[_DeviceT_co]): class EheimDigitalTimeDescription[_DeviceT: EheimDigitalDevice](TimeEntityDescription):
"""Class describing EHEIM Digital time entities.""" """Class describing EHEIM Digital time entities."""
value_fn: Callable[[_DeviceT_co], time | None] value_fn: Callable[[_DeviceT], time | None]
set_value_fn: Callable[[_DeviceT_co, time], Awaitable[None]] set_value_fn: Callable[[_DeviceT, time], Awaitable[None]]
CLASSICVARIO_DESCRIPTIONS: tuple[ CLASSICVARIO_DESCRIPTIONS: tuple[
@ -79,7 +77,7 @@ async def async_setup_entry(
device_address: dict[str, EheimDigitalDevice], device_address: dict[str, EheimDigitalDevice],
) -> None: ) -> None:
"""Set up the time entities for one or multiple devices.""" """Set up the time entities for one or multiple devices."""
entities: list[EheimDigitalTime[EheimDigitalDevice]] = [] entities: list[EheimDigitalTime[Any]] = []
for device in device_address.values(): for device in device_address.values():
if isinstance(device, EheimDigitalClassicVario): if isinstance(device, EheimDigitalClassicVario):
entities.extend( entities.extend(
@ -103,18 +101,18 @@ async def async_setup_entry(
@final @final
class EheimDigitalTime( class EheimDigitalTime[_DeviceT: EheimDigitalDevice](
EheimDigitalEntity[_DeviceT_co], TimeEntity, Generic[_DeviceT_co] EheimDigitalEntity[_DeviceT], TimeEntity
): ):
"""Represent an EHEIM Digital time entity.""" """Represent an EHEIM Digital time entity."""
entity_description: EheimDigitalTimeDescription[_DeviceT_co] entity_description: EheimDigitalTimeDescription[_DeviceT]
def __init__( def __init__(
self, self,
coordinator: EheimDigitalUpdateCoordinator, coordinator: EheimDigitalUpdateCoordinator,
device: _DeviceT_co, device: _DeviceT,
description: EheimDigitalTimeDescription[_DeviceT_co], description: EheimDigitalTimeDescription[_DeviceT],
) -> None: ) -> None:
"""Initialize an EHEIM Digital time entity.""" """Initialize an EHEIM Digital time entity."""
super().__init__(coordinator, device) super().__init__(coordinator, device)