diff --git a/homeassistant/components/harmony/select.py b/homeassistant/components/harmony/select.py index e19f6c3bc9c..3728c4b17a4 100644 --- a/homeassistant/components/harmony/select.py +++ b/homeassistant/components/harmony/select.py @@ -40,7 +40,7 @@ class HarmonyActivitySelect(HarmonyEntity, SelectEntity): self._attr_name = name @property - def icon(self): + def icon(self) -> str: """Return a representative icon.""" if not self.available or self.current_option == ACTIVITY_POWER_OFF: return "mdi:remote-tv-off" @@ -52,7 +52,7 @@ class HarmonyActivitySelect(HarmonyEntity, SelectEntity): return [ACTIVITY_POWER_OFF] + sorted(self._data.activity_names) @property - def current_option(self): + def current_option(self) -> str | None: """Return the current activity.""" _, activity_name = self._data.current_activity return activity_name @@ -61,18 +61,19 @@ class HarmonyActivitySelect(HarmonyEntity, SelectEntity): """Change the current activity.""" await self._data.async_start_activity(option) - async def async_added_to_hass(self): + async def async_added_to_hass(self) -> None: """Call when entity is added to hass.""" - - callbacks = { - "connected": self.async_got_connected, - "disconnected": self.async_got_disconnected, - "activity_starting": self._async_activity_update, - "activity_started": self._async_activity_update, - "config_updated": None, - } - - self.async_on_remove(self._data.async_subscribe(HarmonyCallback(**callbacks))) + self.async_on_remove( + self._data.async_subscribe( + HarmonyCallback( + connected=self.async_got_connected, + disconnected=self.async_got_disconnected, + activity_starting=self._async_activity_update, + activity_started=self._async_activity_update, + config_updated=None, + ) + ) + ) @callback def _async_activity_update(self, activity_info: tuple): diff --git a/homeassistant/components/harmony/subscriber.py b/homeassistant/components/harmony/subscriber.py index 2731d8555f0..efb46f5c6e6 100644 --- a/homeassistant/components/harmony/subscriber.py +++ b/homeassistant/components/harmony/subscriber.py @@ -7,12 +7,12 @@ import logging # https://bugs.python.org/issue42965 from typing import Any, Callable, NamedTuple, Optional -from homeassistant.core import callback +from homeassistant.core import CALLBACK_TYPE, HomeAssistant, callback _LOGGER = logging.getLogger(__name__) -NoParamCallback = Optional[Callable[[object], Any]] -ActivityCallback = Optional[Callable[[object, tuple], Any]] +NoParamCallback = Optional[Callable[[], Any]] +ActivityCallback = Optional[Callable[[tuple], Any]] class HarmonyCallback(NamedTuple): @@ -28,11 +28,11 @@ class HarmonyCallback(NamedTuple): class HarmonySubscriberMixin: """Base implementation for a subscriber.""" - def __init__(self, hass): + def __init__(self, hass: HomeAssistant) -> None: """Initialize an subscriber.""" super().__init__() self._hass = hass - self._subscriptions = [] + self._subscriptions: list[HarmonyCallback] = [] self._activity_lock = asyncio.Lock() async def async_lock_start_activity(self): @@ -40,23 +40,23 @@ class HarmonySubscriberMixin: await self._activity_lock.acquire() @callback - def async_unlock_start_activity(self): + def async_unlock_start_activity(self) -> None: """Release the lock.""" if self._activity_lock.locked(): self._activity_lock.release() @callback - def async_subscribe(self, update_callbacks: HarmonyCallback) -> Callable: + def async_subscribe(self, update_callbacks: HarmonyCallback) -> CALLBACK_TYPE: """Add a callback subscriber.""" self._subscriptions.append(update_callbacks) - def _unsubscribe(): + def _unsubscribe() -> None: self.async_unsubscribe(update_callbacks) return _unsubscribe @callback - def async_unsubscribe(self, update_callback: HarmonyCallback): + def async_unsubscribe(self, update_callback: HarmonyCallback) -> None: """Remove a callback subscriber.""" self._subscriptions.remove(update_callback) @@ -85,7 +85,7 @@ class HarmonySubscriberMixin: self.async_unlock_start_activity() self._call_callbacks("activity_started", activity_info) - def _call_callbacks(self, callback_func_name: str, argument: tuple = None): + def _call_callbacks(self, callback_func_name: str, argument: tuple = None) -> None: for subscription in self._subscriptions: current_callback = getattr(subscription, callback_func_name) if current_callback: