mirror of
https://github.com/home-assistant/core.git
synced 2025-07-11 15:27:08 +00:00
Use PEP 695 TypeVar syntax for ecovacs (#147153)
This commit is contained in:
parent
96e0d1f5c6
commit
3c91c78383
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Generic
|
|
||||||
|
|
||||||
from deebot_client.capabilities import CapabilityEvent
|
from deebot_client.capabilities import CapabilityEvent
|
||||||
|
from deebot_client.events.base import Event
|
||||||
from deebot_client.events.water_info import MopAttachedEvent
|
from deebot_client.events.water_info import MopAttachedEvent
|
||||||
|
|
||||||
from homeassistant.components.binary_sensor import (
|
from homeassistant.components.binary_sensor import (
|
||||||
@ -16,15 +16,14 @@ from homeassistant.core import HomeAssistant
|
|||||||
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
||||||
|
|
||||||
from . import EcovacsConfigEntry
|
from . import EcovacsConfigEntry
|
||||||
from .entity import EcovacsCapabilityEntityDescription, EcovacsDescriptionEntity, EventT
|
from .entity import EcovacsCapabilityEntityDescription, EcovacsDescriptionEntity
|
||||||
from .util import get_supported_entities
|
from .util import get_supported_entities
|
||||||
|
|
||||||
|
|
||||||
@dataclass(kw_only=True, frozen=True)
|
@dataclass(kw_only=True, frozen=True)
|
||||||
class EcovacsBinarySensorEntityDescription(
|
class EcovacsBinarySensorEntityDescription[EventT: Event](
|
||||||
BinarySensorEntityDescription,
|
BinarySensorEntityDescription,
|
||||||
EcovacsCapabilityEntityDescription,
|
EcovacsCapabilityEntityDescription,
|
||||||
Generic[EventT],
|
|
||||||
):
|
):
|
||||||
"""Class describing Deebot binary sensor entity."""
|
"""Class describing Deebot binary sensor entity."""
|
||||||
|
|
||||||
@ -55,7 +54,7 @@ async def async_setup_entry(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class EcovacsBinarySensor(
|
class EcovacsBinarySensor[EventT: Event](
|
||||||
EcovacsDescriptionEntity[CapabilityEvent[EventT]],
|
EcovacsDescriptionEntity[CapabilityEvent[EventT]],
|
||||||
BinarySensorEntity,
|
BinarySensorEntity,
|
||||||
):
|
):
|
||||||
|
@ -4,7 +4,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from collections.abc import Callable, Coroutine
|
from collections.abc import Callable, Coroutine
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Any, Generic, TypeVar
|
from typing import Any
|
||||||
|
|
||||||
from deebot_client.capabilities import Capabilities
|
from deebot_client.capabilities import Capabilities
|
||||||
from deebot_client.device import Device
|
from deebot_client.device import Device
|
||||||
@ -18,11 +18,8 @@ from homeassistant.helpers.entity import Entity, EntityDescription
|
|||||||
|
|
||||||
from .const import DOMAIN
|
from .const import DOMAIN
|
||||||
|
|
||||||
CapabilityEntity = TypeVar("CapabilityEntity")
|
|
||||||
EventT = TypeVar("EventT", bound=Event)
|
|
||||||
|
|
||||||
|
class EcovacsEntity[CapabilityEntityT](Entity):
|
||||||
class EcovacsEntity(Entity, Generic[CapabilityEntity]):
|
|
||||||
"""Ecovacs entity."""
|
"""Ecovacs entity."""
|
||||||
|
|
||||||
_attr_should_poll = False
|
_attr_should_poll = False
|
||||||
@ -32,7 +29,7 @@ class EcovacsEntity(Entity, Generic[CapabilityEntity]):
|
|||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
device: Device,
|
device: Device,
|
||||||
capability: CapabilityEntity,
|
capability: CapabilityEntityT,
|
||||||
**kwargs: Any,
|
**kwargs: Any,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Initialize entity."""
|
"""Initialize entity."""
|
||||||
@ -80,7 +77,7 @@ class EcovacsEntity(Entity, Generic[CapabilityEntity]):
|
|||||||
|
|
||||||
self._subscribe(AvailabilityEvent, on_available)
|
self._subscribe(AvailabilityEvent, on_available)
|
||||||
|
|
||||||
def _subscribe(
|
def _subscribe[EventT: Event](
|
||||||
self,
|
self,
|
||||||
event_type: type[EventT],
|
event_type: type[EventT],
|
||||||
callback: Callable[[EventT], Coroutine[Any, Any, None]],
|
callback: Callable[[EventT], Coroutine[Any, Any, None]],
|
||||||
@ -98,13 +95,13 @@ class EcovacsEntity(Entity, Generic[CapabilityEntity]):
|
|||||||
self._device.events.request_refresh(event_type)
|
self._device.events.request_refresh(event_type)
|
||||||
|
|
||||||
|
|
||||||
class EcovacsDescriptionEntity(EcovacsEntity[CapabilityEntity]):
|
class EcovacsDescriptionEntity[CapabilityEntityT](EcovacsEntity[CapabilityEntityT]):
|
||||||
"""Ecovacs entity."""
|
"""Ecovacs entity."""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
device: Device,
|
device: Device,
|
||||||
capability: CapabilityEntity,
|
capability: CapabilityEntityT,
|
||||||
entity_description: EntityDescription,
|
entity_description: EntityDescription,
|
||||||
**kwargs: Any,
|
**kwargs: Any,
|
||||||
) -> None:
|
) -> None:
|
||||||
@ -114,13 +111,12 @@ class EcovacsDescriptionEntity(EcovacsEntity[CapabilityEntity]):
|
|||||||
|
|
||||||
|
|
||||||
@dataclass(kw_only=True, frozen=True)
|
@dataclass(kw_only=True, frozen=True)
|
||||||
class EcovacsCapabilityEntityDescription(
|
class EcovacsCapabilityEntityDescription[CapabilityEntityT](
|
||||||
EntityDescription,
|
EntityDescription,
|
||||||
Generic[CapabilityEntity],
|
|
||||||
):
|
):
|
||||||
"""Ecovacs entity description."""
|
"""Ecovacs entity description."""
|
||||||
|
|
||||||
capability_fn: Callable[[Capabilities], CapabilityEntity | None]
|
capability_fn: Callable[[Capabilities], CapabilityEntityT | None]
|
||||||
|
|
||||||
|
|
||||||
class EcovacsLegacyEntity(Entity):
|
class EcovacsLegacyEntity(Entity):
|
||||||
|
@ -4,10 +4,10 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Generic
|
|
||||||
|
|
||||||
from deebot_client.capabilities import CapabilitySet
|
from deebot_client.capabilities import CapabilitySet
|
||||||
from deebot_client.events import CleanCountEvent, CutDirectionEvent, VolumeEvent
|
from deebot_client.events import CleanCountEvent, CutDirectionEvent, VolumeEvent
|
||||||
|
from deebot_client.events.base import Event
|
||||||
|
|
||||||
from homeassistant.components.number import (
|
from homeassistant.components.number import (
|
||||||
NumberEntity,
|
NumberEntity,
|
||||||
@ -23,16 +23,14 @@ from .entity import (
|
|||||||
EcovacsCapabilityEntityDescription,
|
EcovacsCapabilityEntityDescription,
|
||||||
EcovacsDescriptionEntity,
|
EcovacsDescriptionEntity,
|
||||||
EcovacsEntity,
|
EcovacsEntity,
|
||||||
EventT,
|
|
||||||
)
|
)
|
||||||
from .util import get_supported_entities
|
from .util import get_supported_entities
|
||||||
|
|
||||||
|
|
||||||
@dataclass(kw_only=True, frozen=True)
|
@dataclass(kw_only=True, frozen=True)
|
||||||
class EcovacsNumberEntityDescription(
|
class EcovacsNumberEntityDescription[EventT: Event](
|
||||||
NumberEntityDescription,
|
NumberEntityDescription,
|
||||||
EcovacsCapabilityEntityDescription,
|
EcovacsCapabilityEntityDescription,
|
||||||
Generic[EventT],
|
|
||||||
):
|
):
|
||||||
"""Ecovacs number entity description."""
|
"""Ecovacs number entity description."""
|
||||||
|
|
||||||
@ -94,7 +92,7 @@ async def async_setup_entry(
|
|||||||
async_add_entities(entities)
|
async_add_entities(entities)
|
||||||
|
|
||||||
|
|
||||||
class EcovacsNumberEntity(
|
class EcovacsNumberEntity[EventT: Event](
|
||||||
EcovacsDescriptionEntity[CapabilitySet[EventT, [int]]],
|
EcovacsDescriptionEntity[CapabilitySet[EventT, [int]]],
|
||||||
NumberEntity,
|
NumberEntity,
|
||||||
):
|
):
|
||||||
|
@ -2,11 +2,12 @@
|
|||||||
|
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Any, Generic
|
from typing import Any
|
||||||
|
|
||||||
from deebot_client.capabilities import CapabilitySetTypes
|
from deebot_client.capabilities import CapabilitySetTypes
|
||||||
from deebot_client.device import Device
|
from deebot_client.device import Device
|
||||||
from deebot_client.events import WorkModeEvent
|
from deebot_client.events import WorkModeEvent
|
||||||
|
from deebot_client.events.base import Event
|
||||||
from deebot_client.events.water_info import WaterAmountEvent
|
from deebot_client.events.water_info import WaterAmountEvent
|
||||||
|
|
||||||
from homeassistant.components.select import SelectEntity, SelectEntityDescription
|
from homeassistant.components.select import SelectEntity, SelectEntityDescription
|
||||||
@ -15,15 +16,14 @@ from homeassistant.core import HomeAssistant
|
|||||||
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
||||||
|
|
||||||
from . import EcovacsConfigEntry
|
from . import EcovacsConfigEntry
|
||||||
from .entity import EcovacsCapabilityEntityDescription, EcovacsDescriptionEntity, EventT
|
from .entity import EcovacsCapabilityEntityDescription, EcovacsDescriptionEntity
|
||||||
from .util import get_name_key, get_supported_entities
|
from .util import get_name_key, get_supported_entities
|
||||||
|
|
||||||
|
|
||||||
@dataclass(kw_only=True, frozen=True)
|
@dataclass(kw_only=True, frozen=True)
|
||||||
class EcovacsSelectEntityDescription(
|
class EcovacsSelectEntityDescription[EventT: Event](
|
||||||
SelectEntityDescription,
|
SelectEntityDescription,
|
||||||
EcovacsCapabilityEntityDescription,
|
EcovacsCapabilityEntityDescription,
|
||||||
Generic[EventT],
|
|
||||||
):
|
):
|
||||||
"""Ecovacs select entity description."""
|
"""Ecovacs select entity description."""
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ async def async_setup_entry(
|
|||||||
async_add_entities(entities)
|
async_add_entities(entities)
|
||||||
|
|
||||||
|
|
||||||
class EcovacsSelectEntity(
|
class EcovacsSelectEntity[EventT: Event](
|
||||||
EcovacsDescriptionEntity[CapabilitySetTypes[EventT, [str], str]],
|
EcovacsDescriptionEntity[CapabilitySetTypes[EventT, [str], str]],
|
||||||
SelectEntity,
|
SelectEntity,
|
||||||
):
|
):
|
||||||
|
@ -4,7 +4,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Any, Generic
|
from typing import Any
|
||||||
|
|
||||||
from deebot_client.capabilities import CapabilityEvent, CapabilityLifeSpan, DeviceType
|
from deebot_client.capabilities import CapabilityEvent, CapabilityLifeSpan, DeviceType
|
||||||
from deebot_client.device import Device
|
from deebot_client.device import Device
|
||||||
@ -46,16 +46,14 @@ from .entity import (
|
|||||||
EcovacsDescriptionEntity,
|
EcovacsDescriptionEntity,
|
||||||
EcovacsEntity,
|
EcovacsEntity,
|
||||||
EcovacsLegacyEntity,
|
EcovacsLegacyEntity,
|
||||||
EventT,
|
|
||||||
)
|
)
|
||||||
from .util import get_name_key, get_options, get_supported_entities
|
from .util import get_name_key, get_options, get_supported_entities
|
||||||
|
|
||||||
|
|
||||||
@dataclass(kw_only=True, frozen=True)
|
@dataclass(kw_only=True, frozen=True)
|
||||||
class EcovacsSensorEntityDescription(
|
class EcovacsSensorEntityDescription[EventT: Event](
|
||||||
EcovacsCapabilityEntityDescription,
|
EcovacsCapabilityEntityDescription,
|
||||||
SensorEntityDescription,
|
SensorEntityDescription,
|
||||||
Generic[EventT],
|
|
||||||
):
|
):
|
||||||
"""Ecovacs sensor entity description."""
|
"""Ecovacs sensor entity description."""
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user