Migrate humidifier device classes to StrEnum (#60706)
Co-authored-by: Joakim Sørensen <joasoe@gmail.com>pull/60729/head
parent
eeafa36abc
commit
c6cbfe8c37
|
@ -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
|
||||
|
|
|
@ -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]:
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
Loading…
Reference in New Issue