diff --git a/homeassistant/components/airos/binary_sensor.py b/homeassistant/components/airos/binary_sensor.py index 802b66ccd4be..ad48b32c9560 100644 --- a/homeassistant/components/airos/binary_sensor.py +++ b/homeassistant/components/airos/binary_sensor.py @@ -2,7 +2,6 @@ from collections.abc import Callable from dataclasses import dataclass -from typing import Generic, TypeVar from airos.data import AirOSDataBaseClass @@ -20,13 +19,10 @@ from .entity import AirOSEntity PARALLEL_UPDATES = 0 -AirOSDataModel = TypeVar("AirOSDataModel", bound=AirOSDataBaseClass) - @dataclass(frozen=True, kw_only=True) -class AirOSBinarySensorEntityDescription( +class AirOSBinarySensorEntityDescription[AirOSDataModel: AirOSDataBaseClass]( BinarySensorEntityDescription, - Generic[AirOSDataModel], ): """Describe an AirOS binary sensor.""" diff --git a/homeassistant/components/airos/sensor.py b/homeassistant/components/airos/sensor.py index 622f7ffde761..77302c7643ad 100644 --- a/homeassistant/components/airos/sensor.py +++ b/homeassistant/components/airos/sensor.py @@ -3,7 +3,6 @@ from collections.abc import Callable from dataclasses import dataclass import logging -from typing import Generic, TypeVar from airos.data import ( AirOSDataBaseClass, @@ -41,11 +40,11 @@ WIRELESS_ROLE_OPTIONS = [mode.value for mode in DerivedWirelessRole] PARALLEL_UPDATES = 0 -AirOSDataModel = TypeVar("AirOSDataModel", bound=AirOSDataBaseClass) - @dataclass(frozen=True, kw_only=True) -class AirOSSensorEntityDescription(SensorEntityDescription, Generic[AirOSDataModel]): +class AirOSSensorEntityDescription[AirOSDataModel: AirOSDataBaseClass]( + SensorEntityDescription +): """Describe an AirOS sensor.""" value_fn: Callable[[AirOSDataModel], StateType] diff --git a/homeassistant/components/broadlink/updater.py b/homeassistant/components/broadlink/updater.py index 1f9da0968588..c30c1de96965 100644 --- a/homeassistant/components/broadlink/updater.py +++ b/homeassistant/components/broadlink/updater.py @@ -46,7 +46,7 @@ def get_update_manager(device: BroadlinkDevice[_ApiT]) -> BroadlinkUpdateManager return update_managers[device.api.type](device) -class BroadlinkUpdateManager(ABC, Generic[_ApiT]): +class BroadlinkUpdateManager(ABC, Generic[_ApiT]): # noqa: UP046 """Representation of a Broadlink update manager. Implement this class to manage fetching data from the device and to diff --git a/homeassistant/components/deconz/sensor.py b/homeassistant/components/deconz/sensor.py index b7908c6ffeae..277e8d478ae7 100644 --- a/homeassistant/components/deconz/sensor.py +++ b/homeassistant/components/deconz/sensor.py @@ -97,7 +97,7 @@ T = TypeVar( @dataclass(frozen=True, kw_only=True) -class DeconzSensorDescription(SensorEntityDescription, Generic[T]): +class DeconzSensorDescription(SensorEntityDescription, Generic[T]): # noqa: UP046 """Class describing deCONZ binary sensor entities.""" instance_check: type[T] | None = None diff --git a/homeassistant/components/esphome/entity.py b/homeassistant/components/esphome/entity.py index bc9f04eb0e02..572213300e57 100644 --- a/homeassistant/components/esphome/entity.py +++ b/homeassistant/components/esphome/entity.py @@ -332,7 +332,7 @@ class EsphomeBaseEntity(Entity): device_entry: dr.DeviceEntry -class EsphomeEntity(EsphomeBaseEntity, Generic[_InfoT, _StateT]): +class EsphomeEntity(EsphomeBaseEntity, Generic[_InfoT, _StateT]): # noqa: UP046 """Define an esphome entity.""" _static_info: _InfoT diff --git a/homeassistant/components/lidarr/coordinator.py b/homeassistant/components/lidarr/coordinator.py index d732675a4a17..72199db75baa 100644 --- a/homeassistant/components/lidarr/coordinator.py +++ b/homeassistant/components/lidarr/coordinator.py @@ -33,7 +33,7 @@ T = TypeVar("T", bound=list[LidarrRootFolder] | LidarrQueue | str | LidarrAlbum type LidarrConfigEntry = ConfigEntry[LidarrData] -class LidarrDataUpdateCoordinator(DataUpdateCoordinator[T], ABC, Generic[T]): +class LidarrDataUpdateCoordinator(DataUpdateCoordinator[T], ABC, Generic[T]): # noqa: UP046 """Data update coordinator for the Lidarr integration.""" config_entry: LidarrConfigEntry diff --git a/homeassistant/components/lidarr/sensor.py b/homeassistant/components/lidarr/sensor.py index 460e9b7ca867..41becfab658d 100644 --- a/homeassistant/components/lidarr/sensor.py +++ b/homeassistant/components/lidarr/sensor.py @@ -47,7 +47,7 @@ def get_modified_description( @dataclasses.dataclass(frozen=True) -class LidarrSensorEntityDescriptionMixIn(Generic[T]): +class LidarrSensorEntityDescriptionMixIn(Generic[T]): # noqa: UP046 """Mixin for required keys.""" value_fn: Callable[[T, str], str | int] @@ -55,7 +55,9 @@ class LidarrSensorEntityDescriptionMixIn(Generic[T]): @dataclasses.dataclass(frozen=True) class LidarrSensorEntityDescription( - SensorEntityDescription, LidarrSensorEntityDescriptionMixIn[T], Generic[T] + SensorEntityDescription, + LidarrSensorEntityDescriptionMixIn[T], + Generic[T], # noqa: UP046 ): """Class to describe a Lidarr sensor.""" diff --git a/homeassistant/components/litterrobot/binary_sensor.py b/homeassistant/components/litterrobot/binary_sensor.py index c4063e65d0bb..587e01a291f9 100644 --- a/homeassistant/components/litterrobot/binary_sensor.py +++ b/homeassistant/components/litterrobot/binary_sensor.py @@ -23,7 +23,8 @@ PARALLEL_UPDATES = 0 @dataclass(frozen=True, kw_only=True) class RobotBinarySensorEntityDescription( - BinarySensorEntityDescription, Generic[_WhiskerEntityT] + BinarySensorEntityDescription, + Generic[_WhiskerEntityT], # noqa: UP046 ): """A class that describes robot binary sensor entities.""" diff --git a/homeassistant/components/litterrobot/button.py b/homeassistant/components/litterrobot/button.py index ff204a827fe6..1675145766f8 100644 --- a/homeassistant/components/litterrobot/button.py +++ b/homeassistant/components/litterrobot/button.py @@ -18,7 +18,7 @@ PARALLEL_UPDATES = 1 @dataclass(frozen=True, kw_only=True) -class RobotButtonEntityDescription(ButtonEntityDescription, Generic[_WhiskerEntityT]): +class RobotButtonEntityDescription(ButtonEntityDescription, Generic[_WhiskerEntityT]): # noqa: UP046 """A class that describes robot button entities.""" press_fn: Callable[[_WhiskerEntityT], Coroutine[Any, Any, bool]] diff --git a/homeassistant/components/litterrobot/entity.py b/homeassistant/components/litterrobot/entity.py index a911a2360625..8d28877c553f 100644 --- a/homeassistant/components/litterrobot/entity.py +++ b/homeassistant/components/litterrobot/entity.py @@ -59,7 +59,8 @@ def get_device_info(whisker_entity: Robot | Pet) -> DeviceInfo: class LitterRobotEntity( - CoordinatorEntity[LitterRobotDataUpdateCoordinator], Generic[_WhiskerEntityT] + CoordinatorEntity[LitterRobotDataUpdateCoordinator], + Generic[_WhiskerEntityT], # noqa: UP046 ): """Generic Litter-Robot entity representing common data and methods.""" diff --git a/homeassistant/components/litterrobot/select.py b/homeassistant/components/litterrobot/select.py index b10f63e5a986..83b83bb5c2fc 100644 --- a/homeassistant/components/litterrobot/select.py +++ b/homeassistant/components/litterrobot/select.py @@ -22,7 +22,8 @@ _CastTypeT = TypeVar("_CastTypeT", int, float, str) @dataclass(frozen=True, kw_only=True) class RobotSelectEntityDescription( - SelectEntityDescription, Generic[_WhiskerEntityT, _CastTypeT] + SelectEntityDescription, + Generic[_WhiskerEntityT, _CastTypeT], # noqa: UP046 ): """A class that describes robot select entities.""" @@ -144,7 +145,7 @@ async def async_setup_entry( class LitterRobotSelectEntity( LitterRobotEntity[_WhiskerEntityT], SelectEntity, - Generic[_WhiskerEntityT, _CastTypeT], + Generic[_WhiskerEntityT, _CastTypeT], # noqa: UP046 ): """Litter-Robot Select.""" diff --git a/homeassistant/components/litterrobot/sensor.py b/homeassistant/components/litterrobot/sensor.py index 3c37d582a623..61f5115167f9 100644 --- a/homeassistant/components/litterrobot/sensor.py +++ b/homeassistant/components/litterrobot/sensor.py @@ -36,7 +36,7 @@ def icon_for_gauge_level(gauge_level: int | None = None, offset: int = 0) -> str @dataclass(frozen=True, kw_only=True) -class RobotSensorEntityDescription(SensorEntityDescription, Generic[_WhiskerEntityT]): +class RobotSensorEntityDescription(SensorEntityDescription, Generic[_WhiskerEntityT]): # noqa: UP046 """A class that describes robot sensor entities.""" icon_fn: Callable[[Any], str | None] = lambda _: None diff --git a/homeassistant/components/litterrobot/switch.py b/homeassistant/components/litterrobot/switch.py index dd5d2aeb20e1..ca4c7a0378c3 100644 --- a/homeassistant/components/litterrobot/switch.py +++ b/homeassistant/components/litterrobot/switch.py @@ -18,7 +18,7 @@ PARALLEL_UPDATES = 1 @dataclass(frozen=True, kw_only=True) -class RobotSwitchEntityDescription(SwitchEntityDescription, Generic[_WhiskerEntityT]): +class RobotSwitchEntityDescription(SwitchEntityDescription, Generic[_WhiskerEntityT]): # noqa: UP046 """A class that describes robot switch entities.""" entity_category: EntityCategory = EntityCategory.CONFIG diff --git a/homeassistant/components/litterrobot/time.py b/homeassistant/components/litterrobot/time.py index 32078bf983ed..651a6ec01505 100644 --- a/homeassistant/components/litterrobot/time.py +++ b/homeassistant/components/litterrobot/time.py @@ -20,7 +20,7 @@ PARALLEL_UPDATES = 1 @dataclass(frozen=True, kw_only=True) -class RobotTimeEntityDescription(TimeEntityDescription, Generic[_WhiskerEntityT]): +class RobotTimeEntityDescription(TimeEntityDescription, Generic[_WhiskerEntityT]): # noqa: UP046 """A class that describes robot time entities.""" value_fn: Callable[[_WhiskerEntityT], time | None] diff --git a/homeassistant/components/prusalink/binary_sensor.py b/homeassistant/components/prusalink/binary_sensor.py index 94fb0296308f..9bac640337c3 100644 --- a/homeassistant/components/prusalink/binary_sensor.py +++ b/homeassistant/components/prusalink/binary_sensor.py @@ -2,7 +2,6 @@ from collections.abc import Callable from dataclasses import dataclass -from typing import Generic, TypeVar from pyprusalink.types import JobInfo, PrinterInfo, PrinterStatus from pyprusalink.types_legacy import LegacyPrinterStatus @@ -17,14 +16,13 @@ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from .coordinator import PrusaLinkConfigEntry, PrusaLinkUpdateCoordinator from .entity import PrusaLinkEntity, PrusaLinkEntityDescription -T = TypeVar("T", PrinterStatus, LegacyPrinterStatus, JobInfo, PrinterInfo) - @dataclass(frozen=True, kw_only=True) -class PrusaLinkBinarySensorEntityDescription( +class PrusaLinkBinarySensorEntityDescription[ + T: (PrinterStatus, LegacyPrinterStatus, JobInfo, PrinterInfo) +]( BinarySensorEntityDescription, PrusaLinkEntityDescription, - Generic[T], ): """Describes PrusaLink sensor entity.""" diff --git a/homeassistant/components/prusalink/button.py b/homeassistant/components/prusalink/button.py index fa378766b62f..04244decbf83 100644 --- a/homeassistant/components/prusalink/button.py +++ b/homeassistant/components/prusalink/button.py @@ -2,7 +2,7 @@ from collections.abc import Callable, Coroutine from dataclasses import dataclass -from typing import Any, Generic, TypeVar, cast +from typing import Any, cast from pyprusalink import JobInfo, LegacyPrinterStatus, PrinterStatus, PrusaLink from pyprusalink.types import Conflict, PrinterState @@ -15,14 +15,13 @@ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from .coordinator import PrusaLinkConfigEntry, PrusaLinkUpdateCoordinator from .entity import PrusaLinkEntity, PrusaLinkEntityDescription -T = TypeVar("T", PrinterStatus, LegacyPrinterStatus, JobInfo) - @dataclass(frozen=True, kw_only=True) -class PrusaLinkButtonEntityDescription( +class PrusaLinkButtonEntityDescription[ + T: (PrinterStatus, LegacyPrinterStatus, JobInfo) +]( ButtonEntityDescription, PrusaLinkEntityDescription, - Generic[T], ): """Describes PrusaLink button entity.""" diff --git a/homeassistant/components/prusalink/sensor.py b/homeassistant/components/prusalink/sensor.py index 150efea3a318..ce38101dcdca 100644 --- a/homeassistant/components/prusalink/sensor.py +++ b/homeassistant/components/prusalink/sensor.py @@ -3,7 +3,7 @@ from collections.abc import Callable from dataclasses import dataclass from datetime import datetime, timedelta -from typing import Generic, TypeVar, cast +from typing import cast from pyprusalink.types import JobInfo, PrinterInfo, PrinterState, PrinterStatus from pyprusalink.types_legacy import LegacyPrinterStatus @@ -29,14 +29,13 @@ from homeassistant.util.variance import ignore_variance from .coordinator import PrusaLinkConfigEntry, PrusaLinkUpdateCoordinator from .entity import PrusaLinkEntity, PrusaLinkEntityDescription -T = TypeVar("T", PrinterStatus, LegacyPrinterStatus, JobInfo, PrinterInfo) - @dataclass(frozen=True, kw_only=True) -class PrusaLinkSensorEntityDescription( +class PrusaLinkSensorEntityDescription[ + T: (PrinterStatus, LegacyPrinterStatus, JobInfo, PrinterInfo) +]( SensorEntityDescription, PrusaLinkEntityDescription, - Generic[T], ): """Describes PrusaLink sensor entity.""" diff --git a/homeassistant/components/radarr/coordinator.py b/homeassistant/components/radarr/coordinator.py index dbc7f5a792c8..757df1f5d71e 100644 --- a/homeassistant/components/radarr/coordinator.py +++ b/homeassistant/components/radarr/coordinator.py @@ -55,7 +55,7 @@ class RadarrEvent(CalendarEvent, RadarrEventMixIn): """A class to describe a Radarr calendar event.""" -class RadarrDataUpdateCoordinator(DataUpdateCoordinator[T], ABC, Generic[T]): +class RadarrDataUpdateCoordinator(DataUpdateCoordinator[T], ABC, Generic[T]): # noqa: UP046 """Data update coordinator for the Radarr integration.""" config_entry: RadarrConfigEntry diff --git a/homeassistant/components/radarr/sensor.py b/homeassistant/components/radarr/sensor.py index 37691cdb280e..2c2dafa8c336 100644 --- a/homeassistant/components/radarr/sensor.py +++ b/homeassistant/components/radarr/sensor.py @@ -45,7 +45,7 @@ def get_modified_description( @dataclasses.dataclass(frozen=True) -class RadarrSensorEntityDescriptionMixIn(Generic[T]): +class RadarrSensorEntityDescriptionMixIn(Generic[T]): # noqa: UP046 """Mixin for required keys.""" value_fn: Callable[[T, str], str | int | datetime] @@ -53,7 +53,9 @@ class RadarrSensorEntityDescriptionMixIn(Generic[T]): @dataclasses.dataclass(frozen=True) class RadarrSensorEntityDescription( - SensorEntityDescription, RadarrSensorEntityDescriptionMixIn[T], Generic[T] + SensorEntityDescription, + RadarrSensorEntityDescriptionMixIn[T], + Generic[T], # noqa: UP046 ): """Class to describe a Radarr sensor.""" diff --git a/homeassistant/components/ring/binary_sensor.py b/homeassistant/components/ring/binary_sensor.py index 987745b4c788..f7e7ccb38602 100644 --- a/homeassistant/components/ring/binary_sensor.py +++ b/homeassistant/components/ring/binary_sensor.py @@ -34,7 +34,9 @@ PARALLEL_UPDATES = 0 @dataclass(frozen=True, kw_only=True) class RingBinarySensorEntityDescription( - BinarySensorEntityDescription, RingEntityDescription, Generic[RingDeviceT] + BinarySensorEntityDescription, + RingEntityDescription, + Generic[RingDeviceT], # noqa: UP046 ): """Describes Ring binary sensor entity.""" diff --git a/homeassistant/components/ring/camera.py b/homeassistant/components/ring/camera.py index 0f466563caf1..c8d3587d44da 100644 --- a/homeassistant/components/ring/camera.py +++ b/homeassistant/components/ring/camera.py @@ -44,7 +44,7 @@ _LOGGER = logging.getLogger(__name__) @dataclass(frozen=True, kw_only=True) -class RingCameraEntityDescription(CameraEntityDescription, Generic[RingDeviceT]): +class RingCameraEntityDescription(CameraEntityDescription, Generic[RingDeviceT]): # noqa: UP046 """Base class for event entity description.""" exists_fn: Callable[[RingDoorBell], bool] diff --git a/homeassistant/components/ring/event.py b/homeassistant/components/ring/event.py index 4734bf68f81d..a0053e28264d 100644 --- a/homeassistant/components/ring/event.py +++ b/homeassistant/components/ring/event.py @@ -24,7 +24,7 @@ PARALLEL_UPDATES = 0 @dataclass(frozen=True, kw_only=True) -class RingEventEntityDescription(EventEntityDescription, Generic[RingDeviceT]): +class RingEventEntityDescription(EventEntityDescription, Generic[RingDeviceT]): # noqa: UP046 """Base class for event entity description.""" capability: RingCapability diff --git a/homeassistant/components/ring/number.py b/homeassistant/components/ring/number.py index 68b41451bd09..a86a5bebe338 100644 --- a/homeassistant/components/ring/number.py +++ b/homeassistant/components/ring/number.py @@ -43,7 +43,7 @@ async def async_setup_entry( @dataclass(frozen=True, kw_only=True) -class RingNumberEntityDescription(NumberEntityDescription, Generic[RingDeviceT]): +class RingNumberEntityDescription(NumberEntityDescription, Generic[RingDeviceT]): # noqa: UP046 """Describes Ring number entity.""" value_fn: Callable[[RingDeviceT], StateType] diff --git a/homeassistant/components/ring/sensor.py b/homeassistant/components/ring/sensor.py index 1cecdafa3fa7..06f0fb5a80c9 100644 --- a/homeassistant/components/ring/sensor.py +++ b/homeassistant/components/ring/sensor.py @@ -135,7 +135,9 @@ def _get_last_event_attrs( @dataclass(frozen=True, kw_only=True) class RingSensorEntityDescription( - SensorEntityDescription, RingEntityDescription, Generic[RingDeviceT] + SensorEntityDescription, + RingEntityDescription, + Generic[RingDeviceT], # noqa: UP046 ): """Describes Ring sensor entity.""" diff --git a/homeassistant/components/ring/siren.py b/homeassistant/components/ring/siren.py index 7f096c0e6436..e82189515557 100644 --- a/homeassistant/components/ring/siren.py +++ b/homeassistant/components/ring/siren.py @@ -43,7 +43,9 @@ PARALLEL_UPDATES = 1 @dataclass(frozen=True, kw_only=True) class RingSirenEntityDescription( - SirenEntityDescription, RingEntityDescription, Generic[RingDeviceT] + SirenEntityDescription, + RingEntityDescription, + Generic[RingDeviceT], # noqa: UP046 ): """Describes a Ring siren entity.""" diff --git a/homeassistant/components/ring/switch.py b/homeassistant/components/ring/switch.py index 5f90ae8a1b5f..625cae8b8ba9 100644 --- a/homeassistant/components/ring/switch.py +++ b/homeassistant/components/ring/switch.py @@ -36,7 +36,9 @@ IN_HOME_CHIME_IS_PRESENT = {v for k, v in DOORBELL_EXISTING_TYPE.items() if k != @dataclass(frozen=True, kw_only=True) class RingSwitchEntityDescription( - SwitchEntityDescription, RingEntityDescription, Generic[RingDeviceT] + SwitchEntityDescription, + RingEntityDescription, + Generic[RingDeviceT], # noqa: UP046 ): """Describes a Ring switch entity.""" diff --git a/homeassistant/components/smarla/sensor.py b/homeassistant/components/smarla/sensor.py index 5c90ef227e20..30fa95b20a3b 100644 --- a/homeassistant/components/smarla/sensor.py +++ b/homeassistant/components/smarla/sensor.py @@ -2,7 +2,7 @@ from collections.abc import Callable from dataclasses import dataclass -from typing import Any, Generic, TypeVar +from typing import Any from pysmarlaapi.federwiege.services.classes import Property from pysmarlaapi.federwiege.services.types import SpringStatus @@ -23,12 +23,10 @@ from .entity import SmarlaBaseEntity, SmarlaEntityDescription PARALLEL_UPDATES = 0 -_VT = TypeVar("_VT") - @dataclass(frozen=True, kw_only=True) -class SmarlaSensorEntityDescription( - SmarlaEntityDescription, SensorEntityDescription, Generic[_VT] +class SmarlaSensorEntityDescription[_VT]( + SmarlaEntityDescription, SensorEntityDescription ): """Class describing Swing2Sleep Smarla sensor entities.""" @@ -110,7 +108,7 @@ async def async_setup_entry( async_add_entities(SmarlaSensor(federwiege, desc) for desc in SENSORS) -class SmarlaSensor(SmarlaBaseEntity, SensorEntity, Generic[_VT]): +class SmarlaSensor[_VT](SmarlaBaseEntity, SensorEntity): """Representation of Smarla sensor.""" entity_description: SmarlaSensorEntityDescription[_VT] diff --git a/homeassistant/components/sonarr/sensor.py b/homeassistant/components/sonarr/sensor.py index 02139d743f6d..f796c6126a64 100644 --- a/homeassistant/components/sonarr/sensor.py +++ b/homeassistant/components/sonarr/sensor.py @@ -29,7 +29,7 @@ from .entity import SonarrEntity @dataclass(frozen=True) -class SonarrSensorEntityDescriptionMixIn(Generic[SonarrDataT]): +class SonarrSensorEntityDescriptionMixIn(Generic[SonarrDataT]): # noqa: UP046 """Mixin for Sonarr sensor.""" attributes_fn: Callable[[SonarrDataT], dict[str, str]] diff --git a/homeassistant/components/tesla_fleet/entity.py b/homeassistant/components/tesla_fleet/entity.py index 833d6988cc57..7d3f25967133 100644 --- a/homeassistant/components/tesla_fleet/entity.py +++ b/homeassistant/components/tesla_fleet/entity.py @@ -1,7 +1,7 @@ """Tesla Fleet parent entity class.""" from abc import abstractmethod -from typing import Any, Generic, TypeVar +from typing import Any from tesla_fleet_api.const import Scope from tesla_fleet_api.tesla.energysite import EnergySite @@ -21,17 +21,14 @@ from .coordinator import ( from .helpers import wake_up_vehicle from .models import TeslaFleetEnergyData, TeslaFleetVehicleData -_ApiT = TypeVar("_ApiT", bound=VehicleFleet | EnergySite) - -class TeslaFleetEntity( +class TeslaFleetEntity[_ApiT: VehicleFleet | EnergySite]( CoordinatorEntity[ TeslaFleetVehicleDataCoordinator | TeslaFleetEnergySiteLiveCoordinator | TeslaFleetEnergySiteHistoryCoordinator | TeslaFleetEnergySiteInfoCoordinator - ], - Generic[_ApiT], + ] ): """Parent class for all TeslaFleet entities.""" diff --git a/homeassistant/components/tplink_omada/switch.py b/homeassistant/components/tplink_omada/switch.py index 9dd1fff2b152..4d9aba10d8a5 100644 --- a/homeassistant/components/tplink_omada/switch.py +++ b/homeassistant/components/tplink_omada/switch.py @@ -3,7 +3,7 @@ from collections.abc import Awaitable, Callable from dataclasses import dataclass from functools import partial -from typing import Any, Generic, TypeVar +from typing import Any from tplink_omada_client import ( GatewayPortSettings, @@ -38,10 +38,6 @@ from .controller import OmadaGatewayCoordinator, OmadaSwitchPortCoordinator from .coordinator import OmadaCoordinator from .entity import OmadaDeviceEntity -TPort = TypeVar("TPort") -TDevice = TypeVar("TDevice", bound="OmadaDevice") -TCoordinator = TypeVar("TCoordinator", bound="OmadaCoordinator[Any]") - PARALLEL_UPDATES = 0 @@ -132,9 +128,11 @@ def _get_switch_port_base_name(port: OmadaSwitchPortDetails) -> str: @dataclass(frozen=True, kw_only=True) -class OmadaDevicePortSwitchEntityDescription( - SwitchEntityDescription, Generic[TCoordinator, TDevice, TPort] -): +class OmadaDevicePortSwitchEntityDescription[ + TCoordinator: OmadaCoordinator[Any], + TDevice: OmadaDevice, + TPort, +](SwitchEntityDescription): """Entity description for a toggle switch derived from a network port on an Omada device.""" exists_func: Callable[[TDevice, TPort], bool] = lambda _, p: True @@ -262,12 +260,15 @@ GATEWAY_PORT_CONFIG_SWITCHES: list[OmadaGatewayPortConfigSwitchEntityDescription ] -class OmadaDevicePortSwitchEntity( +class OmadaDevicePortSwitchEntity[ + TCoordinator: OmadaCoordinator[Any], + TDevice: OmadaDevice, + TPort, +]( OmadaDeviceEntity[TCoordinator], SwitchEntity, - Generic[TCoordinator, TDevice, TPort], ): - """Generic toggle switch entity for a Netork Port of an Omada Device.""" + """Generic toggle switch entity for a Network Port of an Omada Device.""" entity_description: OmadaDevicePortSwitchEntityDescription[ TCoordinator, TDevice, TPort diff --git a/homeassistant/components/unifiprotect/entity.py b/homeassistant/components/unifiprotect/entity.py index 8115ddc124d2..d8f6251b6cb2 100644 --- a/homeassistant/components/unifiprotect/entity.py +++ b/homeassistant/components/unifiprotect/entity.py @@ -369,7 +369,7 @@ class EventEntityMixin(ProtectDeviceEntity): @dataclass(frozen=True, kw_only=True) -class ProtectEntityDescription(EntityDescription, Generic[T]): +class ProtectEntityDescription(EntityDescription, Generic[T]): # noqa: UP046 """Base class for protect entity descriptions.""" ufp_required_field: str | None = None diff --git a/homeassistant/helpers/event.py b/homeassistant/helpers/event.py index ccc7e4b9bc29..03ce51864d1f 100644 --- a/homeassistant/helpers/event.py +++ b/homeassistant/helpers/event.py @@ -91,7 +91,7 @@ _TypedDictT = TypeVar("_TypedDictT", bound=Mapping[str, Any]) @dataclass(slots=True, frozen=True) -class _KeyedEventTracker(Generic[_TypedDictT]): +class _KeyedEventTracker(Generic[_TypedDictT]): # noqa: UP046 """Class to track events by key.""" key: HassKey[_KeyedEventData[_TypedDictT]] @@ -115,7 +115,7 @@ class _KeyedEventTracker(Generic[_TypedDictT]): @dataclass(slots=True, frozen=True) -class _KeyedEventData(Generic[_TypedDictT]): +class _KeyedEventData(Generic[_TypedDictT]): # noqa: UP046 """Class to track data for events by key.""" listener: CALLBACK_TYPE diff --git a/homeassistant/util/hass_dict.pyi b/homeassistant/util/hass_dict.pyi index 5e48c1c01440..5dccf1684a55 100644 --- a/homeassistant/util/hass_dict.pyi +++ b/homeassistant/util/hass_dict.pyi @@ -11,7 +11,7 @@ __all__ = [ _T = TypeVar("_T") # needs to be invariant -class _Key(Generic[_T]): +class _Key(Generic[_T]): # noqa: UP046 """Base class for Hass key types. At runtime delegated to str.""" def __init__(self, value: str, /) -> None: ... diff --git a/pyproject.toml b/pyproject.toml index 5588740757f1..3deabcd9beba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -823,7 +823,6 @@ ignore = [ "TRY003", # Avoid specifying long messages outside the exception class "TRY400", # Use `logging.exception` instead of `logging.error` - "UP046", # Non PEP 695 generic class "UP047", # Non PEP 696 generic function "UP049", # Avoid private type parameter names