From 2453f95b2442036200a07d862d98bfd3a401e726 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Thu, 17 Nov 2022 10:58:46 +0100 Subject: [PATCH] Adjust HumidifierEntity type hints (#82248) --- .../generic_hygrostat/humidifier.py | 1 - .../components/humidifier/__init__.py | 6 ++ homeassistant/components/mqtt/humidifier.py | 2 - homeassistant/components/tuya/humidifier.py | 1 - .../components/xiaomi_miio/humidifier.py | 1 - pylint/plugins/hass_enforce_type_hints.py | 55 +++++++++++++++++++ 6 files changed, 61 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/generic_hygrostat/humidifier.py b/homeassistant/components/generic_hygrostat/humidifier.py index 720c76e766d..e6caf2ca097 100644 --- a/homeassistant/components/generic_hygrostat/humidifier.py +++ b/homeassistant/components/generic_hygrostat/humidifier.py @@ -147,7 +147,6 @@ class GenericHygrostat(HumidifierEntity, RestoreEntity): self._min_humidity = min_humidity self._max_humidity = max_humidity self._target_humidity = target_humidity - self._attr_supported_features = 0 if away_humidity: self._attr_supported_features |= HumidifierEntityFeature.MODES self._away_humidity = away_humidity diff --git a/homeassistant/components/humidifier/__init__.py b/homeassistant/components/humidifier/__init__.py index 1077e133b3a..ef1620b3922 100644 --- a/homeassistant/components/humidifier/__init__.py +++ b/homeassistant/components/humidifier/__init__.py @@ -137,6 +137,7 @@ class HumidifierEntity(ToggleEntity): _attr_max_humidity: int = DEFAULT_MAX_HUMIDITY _attr_min_humidity: int = DEFAULT_MIN_HUMIDITY _attr_mode: str | None + _attr_supported_features: HumidifierEntityFeature | int = 0 _attr_target_humidity: int | None = None @property @@ -223,3 +224,8 @@ class HumidifierEntity(ToggleEntity): def max_humidity(self) -> int: """Return the maximum humidity.""" return self._attr_max_humidity + + @property + def supported_features(self) -> HumidifierEntityFeature | int: + """Return the list of supported features.""" + return self._attr_supported_features diff --git a/homeassistant/components/mqtt/humidifier.py b/homeassistant/components/mqtt/humidifier.py index 69b6d3e3e89..c8bb469ed2e 100644 --- a/homeassistant/components/mqtt/humidifier.py +++ b/homeassistant/components/mqtt/humidifier.py @@ -271,8 +271,6 @@ class MqttHumidifier(MqttEntity, HumidifierEntity): self._attr_available_modes = [] if self._attr_available_modes: self._attr_supported_features = HumidifierEntityFeature.MODES - else: - self._attr_supported_features = 0 optimistic: bool = config[CONF_OPTIMISTIC] self._optimistic = optimistic or self._topic[CONF_STATE_TOPIC] is None diff --git a/homeassistant/components/tuya/humidifier.py b/homeassistant/components/tuya/humidifier.py index 9891c81a456..765de4d860a 100644 --- a/homeassistant/components/tuya/humidifier.py +++ b/homeassistant/components/tuya/humidifier.py @@ -93,7 +93,6 @@ class TuyaHumidifierEntity(TuyaEntity, HumidifierEntity): super().__init__(device, device_manager) self.entity_description = description self._attr_unique_id = f"{super().unique_id}{description.key}" - self._attr_supported_features = 0 # Determine main switch DPCode self._switch_dpcode = self.find_dpcode( diff --git a/homeassistant/components/xiaomi_miio/humidifier.py b/homeassistant/components/xiaomi_miio/humidifier.py index b5a5e738ea0..2cf3944bb91 100644 --- a/homeassistant/components/xiaomi_miio/humidifier.py +++ b/homeassistant/components/xiaomi_miio/humidifier.py @@ -115,7 +115,6 @@ class XiaomiGenericHumidifier(XiaomiCoordinatedMiioEntity, HumidifierEntity): _attr_device_class = HumidifierDeviceClass.HUMIDIFIER _attr_supported_features = HumidifierEntityFeature.MODES - supported_features: int def __init__(self, device, entry, unique_id, coordinator): """Initialize the generic Xiaomi device.""" diff --git a/pylint/plugins/hass_enforce_type_hints.py b/pylint/plugins/hass_enforce_type_hints.py index 5da1c563c0f..3da5a537435 100644 --- a/pylint/plugins/hass_enforce_type_hints.py +++ b/pylint/plugins/hass_enforce_type_hints.py @@ -1395,6 +1395,61 @@ _INHERITANCE_MATCH: dict[str, list[ClassTypeHintMatch]] = { ], ), ], + "humidifier": [ + ClassTypeHintMatch( + base_class="Entity", + matches=_ENTITY_MATCH, + ), + ClassTypeHintMatch( + base_class="ToggleEntity", + matches=_TOGGLE_ENTITY_MATCH, + ), + ClassTypeHintMatch( + base_class="HumidifierEntity", + matches=[ + TypeHintMatch( + function_name="available_modes", + return_type=["list[str]", None], + ), + TypeHintMatch( + function_name="device_class", + return_type=["HumidifierDeviceClass", "str", None], + ), + TypeHintMatch( + function_name="min_humidity", + return_type=["int"], + ), + TypeHintMatch( + function_name="max_humidity", + return_type=["int"], + ), + TypeHintMatch( + function_name="mode", + return_type=["str", None], + ), + TypeHintMatch( + function_name="supported_features", + return_type=["HumidifierEntityFeature", "int"], + ), + TypeHintMatch( + function_name="target_humidity", + return_type=["int", None], + ), + TypeHintMatch( + function_name="set_humidity", + arg_types={1: "str"}, + return_type=None, + has_async_counterpart=True, + ), + TypeHintMatch( + function_name="set_mode", + arg_types={1: "str"}, + return_type=None, + has_async_counterpart=True, + ), + ], + ), + ], "light": [ ClassTypeHintMatch( base_class="Entity",