From 7f1fff12effa5d35c32c950bde1c59dfe572f5e8 Mon Sep 17 00:00:00 2001
From: Robert Svensson <Kane610@users.noreply.github.com>
Date: Sat, 25 Mar 2023 00:27:16 +0100
Subject: [PATCH] Bump aiounifi to v45 (#90250)

* Bump aiounifi to v45

* Replace local TypeVar with library TypeVar
---
 .../components/unifi/device_tracker.py        | 10 ++++----
 homeassistant/components/unifi/entity.py      | 23 ++++++++-----------
 homeassistant/components/unifi/manifest.json  |  2 +-
 homeassistant/components/unifi/sensor.py      | 14 +++++------
 homeassistant/components/unifi/switch.py      | 14 +++++------
 requirements_all.txt                          |  2 +-
 requirements_test_all.txt                     |  2 +-
 7 files changed, 31 insertions(+), 36 deletions(-)

diff --git a/homeassistant/components/unifi/device_tracker.py b/homeassistant/components/unifi/device_tracker.py
index f891416c635..f31176afe38 100644
--- a/homeassistant/components/unifi/device_tracker.py
+++ b/homeassistant/components/unifi/device_tracker.py
@@ -12,6 +12,7 @@ import aiounifi
 from aiounifi.interfaces.api_handlers import ItemEvent
 from aiounifi.interfaces.clients import Clients
 from aiounifi.interfaces.devices import Devices
+from aiounifi.models.api import ApiItemT
 from aiounifi.models.client import Client
 from aiounifi.models.device import Device
 from aiounifi.models.event import Event, EventKey
@@ -26,7 +27,6 @@ import homeassistant.util.dt as dt_util
 from .const import DOMAIN as UNIFI_DOMAIN
 from .controller import UniFiController
 from .entity import (
-    DataT,
     HandlerT,
     UnifiEntity,
     UnifiEntityDescription,
@@ -136,7 +136,7 @@ def async_device_heartbeat_timedelta_fn(
 
 
 @dataclass
-class UnifiEntityTrackerDescriptionMixin(Generic[HandlerT, DataT]):
+class UnifiEntityTrackerDescriptionMixin(Generic[HandlerT, ApiItemT]):
     """Device tracker local functions."""
 
     heartbeat_timedelta_fn: Callable[[UniFiController, str], timedelta]
@@ -147,8 +147,8 @@ class UnifiEntityTrackerDescriptionMixin(Generic[HandlerT, DataT]):
 
 @dataclass
 class UnifiTrackerEntityDescription(
-    UnifiEntityDescription[HandlerT, DataT],
-    UnifiEntityTrackerDescriptionMixin[HandlerT, DataT],
+    UnifiEntityDescription[HandlerT, ApiItemT],
+    UnifiEntityTrackerDescriptionMixin[HandlerT, ApiItemT],
 ):
     """Class describing UniFi device tracker entity."""
 
@@ -211,7 +211,7 @@ async def async_setup_entry(
     )
 
 
-class UnifiScannerEntity(UnifiEntity[HandlerT, DataT], ScannerEntity):
+class UnifiScannerEntity(UnifiEntity[HandlerT, ApiItemT], ScannerEntity):
     """Representation of a UniFi scanner."""
 
     entity_description: UnifiTrackerEntityDescription
diff --git a/homeassistant/components/unifi/entity.py b/homeassistant/components/unifi/entity.py
index 5d763ecfe8a..18a132be6a8 100644
--- a/homeassistant/components/unifi/entity.py
+++ b/homeassistant/components/unifi/entity.py
@@ -13,12 +13,8 @@ from aiounifi.interfaces.api_handlers import (
     ItemEvent,
     UnsubscribeType,
 )
-from aiounifi.interfaces.outlets import Outlets
-from aiounifi.interfaces.ports import Ports
-from aiounifi.models.api import APIItem
+from aiounifi.models.api import ApiItemT
 from aiounifi.models.event import Event, EventKey
-from aiounifi.models.outlet import Outlet
-from aiounifi.models.port import Port
 
 from homeassistant.core import callback
 from homeassistant.helpers import entity_registry as er
@@ -31,8 +27,7 @@ from .const import ATTR_MANUFACTURER
 if TYPE_CHECKING:
     from .controller import UniFiController
 
-DataT = TypeVar("DataT", bound=APIItem | Outlet | Port)
-HandlerT = TypeVar("HandlerT", bound=APIHandler | Outlets | Ports)
+HandlerT = TypeVar("HandlerT", bound=APIHandler)
 SubscriptionT = Callable[[CallbackType, ItemEvent], UnsubscribeType]
 
 
@@ -64,7 +59,7 @@ def async_device_device_info_fn(api: aiounifi.Controller, obj_id: str) -> Device
 
 
 @dataclass
-class UnifiDescription(Generic[HandlerT, DataT]):
+class UnifiDescription(Generic[HandlerT, ApiItemT]):
     """Validate and load entities from different UniFi handlers."""
 
     allowed_fn: Callable[[UniFiController, str], bool]
@@ -73,21 +68,21 @@ class UnifiDescription(Generic[HandlerT, DataT]):
     device_info_fn: Callable[[aiounifi.Controller, str], DeviceInfo | None]
     event_is_on: tuple[EventKey, ...] | None
     event_to_subscribe: tuple[EventKey, ...] | None
-    name_fn: Callable[[DataT], str | None]
-    object_fn: Callable[[aiounifi.Controller, str], DataT]
+    name_fn: Callable[[ApiItemT], str | None]
+    object_fn: Callable[[aiounifi.Controller, str], ApiItemT]
     supported_fn: Callable[[UniFiController, str], bool | None]
     unique_id_fn: Callable[[UniFiController, str], str]
 
 
 @dataclass
-class UnifiEntityDescription(EntityDescription, UnifiDescription[HandlerT, DataT]):
+class UnifiEntityDescription(EntityDescription, UnifiDescription[HandlerT, ApiItemT]):
     """UniFi Entity Description."""
 
 
-class UnifiEntity(Entity, Generic[HandlerT, DataT]):
+class UnifiEntity(Entity, Generic[HandlerT, ApiItemT]):
     """Representation of a UniFi entity."""
 
-    entity_description: UnifiEntityDescription[HandlerT, DataT]
+    entity_description: UnifiEntityDescription[HandlerT, ApiItemT]
     _attr_should_poll = False
 
     _attr_unique_id: str
@@ -96,7 +91,7 @@ class UnifiEntity(Entity, Generic[HandlerT, DataT]):
         self,
         obj_id: str,
         controller: UniFiController,
-        description: UnifiEntityDescription[HandlerT, DataT],
+        description: UnifiEntityDescription[HandlerT, ApiItemT],
     ) -> None:
         """Set up UniFi switch entity."""
         self._obj_id = obj_id
diff --git a/homeassistant/components/unifi/manifest.json b/homeassistant/components/unifi/manifest.json
index 92f879c1047..7fde8a2ad7e 100644
--- a/homeassistant/components/unifi/manifest.json
+++ b/homeassistant/components/unifi/manifest.json
@@ -8,7 +8,7 @@
   "iot_class": "local_push",
   "loggers": ["aiounifi"],
   "quality_scale": "platinum",
-  "requirements": ["aiounifi==44"],
+  "requirements": ["aiounifi==45"],
   "ssdp": [
     {
       "manufacturer": "Ubiquiti Networks",
diff --git a/homeassistant/components/unifi/sensor.py b/homeassistant/components/unifi/sensor.py
index 420fc3803c3..3682fa0bf6c 100644
--- a/homeassistant/components/unifi/sensor.py
+++ b/homeassistant/components/unifi/sensor.py
@@ -14,6 +14,7 @@ import aiounifi
 from aiounifi.interfaces.api_handlers import ItemEvent
 from aiounifi.interfaces.clients import Clients
 from aiounifi.interfaces.ports import Ports
+from aiounifi.models.api import ApiItemT
 from aiounifi.models.client import Client
 from aiounifi.models.port import Port
 
@@ -33,7 +34,6 @@ import homeassistant.util.dt as dt_util
 from .const import DOMAIN as UNIFI_DOMAIN
 from .controller import UniFiController
 from .entity import (
-    DataT,
     HandlerT,
     UnifiEntity,
     UnifiEntityDescription,
@@ -80,17 +80,17 @@ def async_client_device_info_fn(api: aiounifi.Controller, obj_id: str) -> Device
 
 
 @dataclass
-class UnifiSensorEntityDescriptionMixin(Generic[HandlerT, DataT]):
+class UnifiSensorEntityDescriptionMixin(Generic[HandlerT, ApiItemT]):
     """Validate and load entities from different UniFi handlers."""
 
-    value_fn: Callable[[UniFiController, DataT], datetime | float | str | None]
+    value_fn: Callable[[UniFiController, ApiItemT], datetime | float | str | None]
 
 
 @dataclass
 class UnifiSensorEntityDescription(
     SensorEntityDescription,
-    UnifiEntityDescription[HandlerT, DataT],
-    UnifiSensorEntityDescriptionMixin[HandlerT, DataT],
+    UnifiEntityDescription[HandlerT, ApiItemT],
+    UnifiSensorEntityDescriptionMixin[HandlerT, ApiItemT],
 ):
     """Class describing UniFi sensor entity."""
 
@@ -182,10 +182,10 @@ async def async_setup_entry(
     )
 
 
-class UnifiSensorEntity(UnifiEntity[HandlerT, DataT], SensorEntity):
+class UnifiSensorEntity(UnifiEntity[HandlerT, ApiItemT], SensorEntity):
     """Base representation of a UniFi sensor."""
 
-    entity_description: UnifiSensorEntityDescription[HandlerT, DataT]
+    entity_description: UnifiSensorEntityDescription[HandlerT, ApiItemT]
 
     @callback
     def async_update_state(self, event: ItemEvent, obj_id: str) -> None:
diff --git a/homeassistant/components/unifi/switch.py b/homeassistant/components/unifi/switch.py
index bf724cec1fd..bd0166516dc 100644
--- a/homeassistant/components/unifi/switch.py
+++ b/homeassistant/components/unifi/switch.py
@@ -17,6 +17,7 @@ from aiounifi.interfaces.clients import Clients
 from aiounifi.interfaces.dpi_restriction_groups import DPIRestrictionGroups
 from aiounifi.interfaces.outlets import Outlets
 from aiounifi.interfaces.ports import Ports
+from aiounifi.models.api import ApiItemT
 from aiounifi.models.client import Client, ClientBlockRequest
 from aiounifi.models.device import (
     DeviceSetOutletRelayRequest,
@@ -47,7 +48,6 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
 from .const import ATTR_MANUFACTURER, DOMAIN as UNIFI_DOMAIN
 from .controller import UniFiController
 from .entity import (
-    DataT,
     HandlerT,
     SubscriptionT,
     UnifiEntity,
@@ -136,18 +136,18 @@ async def async_poe_port_control_fn(
 
 
 @dataclass
-class UnifiSwitchEntityDescriptionMixin(Generic[HandlerT, DataT]):
+class UnifiSwitchEntityDescriptionMixin(Generic[HandlerT, ApiItemT]):
     """Validate and load entities from different UniFi handlers."""
 
     control_fn: Callable[[aiounifi.Controller, str, bool], Coroutine[Any, Any, None]]
-    is_on_fn: Callable[[UniFiController, DataT], bool]
+    is_on_fn: Callable[[UniFiController, ApiItemT], bool]
 
 
 @dataclass
 class UnifiSwitchEntityDescription(
     SwitchEntityDescription,
-    UnifiEntityDescription[HandlerT, DataT],
-    UnifiSwitchEntityDescriptionMixin[HandlerT, DataT],
+    UnifiEntityDescription[HandlerT, ApiItemT],
+    UnifiSwitchEntityDescriptionMixin[HandlerT, ApiItemT],
 ):
     """Class describing UniFi switch entity."""
 
@@ -255,10 +255,10 @@ async def async_setup_entry(
     )
 
 
-class UnifiSwitchEntity(UnifiEntity[HandlerT, DataT], SwitchEntity):
+class UnifiSwitchEntity(UnifiEntity[HandlerT, ApiItemT], SwitchEntity):
     """Base representation of a UniFi switch."""
 
-    entity_description: UnifiSwitchEntityDescription[HandlerT, DataT]
+    entity_description: UnifiSwitchEntityDescription[HandlerT, ApiItemT]
     only_event_for_state_change = False
 
     @callback
diff --git a/requirements_all.txt b/requirements_all.txt
index 7d1670833f2..e4b5a9999d7 100644
--- a/requirements_all.txt
+++ b/requirements_all.txt
@@ -291,7 +291,7 @@ aiosyncthing==0.5.1
 aiotractive==0.5.5
 
 # homeassistant.components.unifi
-aiounifi==44
+aiounifi==45
 
 # homeassistant.components.vlc_telnet
 aiovlc==0.1.0
diff --git a/requirements_test_all.txt b/requirements_test_all.txt
index 3bb56a1be49..2e31358bca9 100644
--- a/requirements_test_all.txt
+++ b/requirements_test_all.txt
@@ -272,7 +272,7 @@ aiosyncthing==0.5.1
 aiotractive==0.5.5
 
 # homeassistant.components.unifi
-aiounifi==44
+aiounifi==45
 
 # homeassistant.components.vlc_telnet
 aiovlc==0.1.0