Migrate humidifier device classes to StrEnum (#60706)

Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
pull/60729/head
Franck Nijhof 2021-12-01 12:02:14 +01:00 committed by GitHub
parent eeafa36abc
commit c6cbfe8c37
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 12 deletions

View File

@ -1,12 +1,8 @@
"""Demo platform that offers a fake humidifier device."""
from __future__ import annotations
from homeassistant.components.humidifier import HumidifierEntity
from homeassistant.components.humidifier.const import (
DEVICE_CLASS_DEHUMIDIFIER,
DEVICE_CLASS_HUMIDIFIER,
SUPPORT_MODES,
)
from homeassistant.components.humidifier import HumidifierDeviceClass, HumidifierEntity
from homeassistant.components.humidifier.const import SUPPORT_MODES
SUPPORT_FLAGS = 0
@ -19,13 +15,13 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
name="Humidifier",
mode=None,
target_humidity=68,
device_class=DEVICE_CLASS_HUMIDIFIER,
device_class=HumidifierDeviceClass.HUMIDIFIER,
),
DemoHumidifier(
name="Dehumidifier",
mode=None,
target_humidity=54,
device_class=DEVICE_CLASS_DEHUMIDIFIER,
device_class=HumidifierDeviceClass.DEHUMIDIFIER,
),
DemoHumidifier(
name="Hygrostat",
@ -54,7 +50,7 @@ class DemoHumidifier(HumidifierEntity):
target_humidity: int,
available_modes: list[str] | None = None,
is_on: bool = True,
device_class: str | None = None,
device_class: HumidifierDeviceClass | None = None,
) -> None:
"""Initialize the humidifier device."""
self._attr_name = name

View File

@ -26,8 +26,9 @@ from homeassistant.helpers.entity import ToggleEntity, ToggleEntityDescription
from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.helpers.typing import ConfigType
from homeassistant.loader import bind_hass
from homeassistant.util.enum import StrEnum
from .const import (
from .const import ( # noqa: F401
ATTR_AVAILABLE_MODES,
ATTR_HUMIDITY,
ATTR_MAX_HUMIDITY,
@ -49,9 +50,19 @@ SCAN_INTERVAL = timedelta(seconds=60)
ENTITY_ID_FORMAT = DOMAIN + ".{}"
DEVICE_CLASSES = [DEVICE_CLASS_HUMIDIFIER, DEVICE_CLASS_DEHUMIDIFIER]
DEVICE_CLASSES_SCHEMA = vol.All(vol.Lower, vol.In(DEVICE_CLASSES))
class HumidifierDeviceClass(StrEnum):
"""Device class for humidifiers."""
HUMIDIFIER = "humidifier"
DEHUMIDIFIER = "dehumidifier"
DEVICE_CLASSES_SCHEMA = vol.All(vol.Lower, vol.Coerce(HumidifierDeviceClass))
# DEVICE_CLASSES below is deprecated as of 2021.12
# use the HumidifierDeviceClass enum instead.
DEVICE_CLASSES = [cls.value for cls in HumidifierDeviceClass]
@bind_hass
@ -108,12 +119,15 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
class HumidifierEntityDescription(ToggleEntityDescription):
"""A class that describes humidifier entities."""
device_class: HumidifierDeviceClass | str | None = None
class HumidifierEntity(ToggleEntity):
"""Base class for humidifier entities."""
entity_description: HumidifierEntityDescription
_attr_available_modes: list[str] | None
_attr_device_class: HumidifierDeviceClass | str | None
_attr_max_humidity: int = DEFAULT_MAX_HUMIDITY
_attr_min_humidity: int = DEFAULT_MIN_HUMIDITY
_attr_mode: str | None
@ -133,6 +147,15 @@ class HumidifierEntity(ToggleEntity):
return data
@property
def device_class(self) -> HumidifierDeviceClass | str | None:
"""Return the class of this entity."""
if hasattr(self, "_attr_device_class"):
return self._attr_device_class
if hasattr(self, "entity_description"):
return self.entity_description.device_class
return None
@final
@property
def state_attributes(self) -> dict[str, Any]:

View File

@ -19,6 +19,8 @@ DEFAULT_MAX_HUMIDITY = 100
DOMAIN = "humidifier"
# DEVICE_CLASS_* below are deprecated as of 2021.12
# use the HumidifierDeviceClass enum instead.
DEVICE_CLASS_HUMIDIFIER = "humidifier"
DEVICE_CLASS_DEHUMIDIFIER = "dehumidifier"