From a3b3c4ebad51226bc357814ba4008696fd315f61 Mon Sep 17 00:00:00 2001 From: Paul Monigatti Date: Sat, 23 Oct 2021 05:21:41 +1300 Subject: [PATCH] Consolidate ESPHome icon-handling code into EsphomeEntity (#57744) --- homeassistant/components/esphome/__init__.py | 11 +++++++++++ homeassistant/components/esphome/number.py | 12 ------------ homeassistant/components/esphome/select.py | 13 ------------- homeassistant/components/esphome/sensor.py | 17 ----------------- homeassistant/components/esphome/switch.py | 5 ----- 5 files changed, 11 insertions(+), 47 deletions(-) diff --git a/homeassistant/components/esphome/__init__.py b/homeassistant/components/esphome/__init__.py index cffb8dc8ad9..f5fd765dd71 100644 --- a/homeassistant/components/esphome/__init__.py +++ b/homeassistant/components/esphome/__init__.py @@ -637,6 +637,9 @@ class EsphomeEnumMapper(Generic[_EnumT, _ValT]): return self._inverse[value] +ICON_SCHEMA = vol.Schema(cv.icon) + + class EsphomeEntity(Entity, Generic[_InfoT, _StateT]): """Define a base esphome entity.""" @@ -761,6 +764,14 @@ class EsphomeEntity(Entity, Generic[_InfoT, _StateT]): """Return the name of the entity.""" return self._static_info.name + @property + def icon(self) -> str | None: + """Return the icon.""" + if not self._static_info.icon: + return None + + return cast(str, ICON_SCHEMA(self._static_info.icon)) + @property def should_poll(self) -> bool: """Disable polling.""" diff --git a/homeassistant/components/esphome/number.py b/homeassistant/components/esphome/number.py index 1a90cdbeb24..c8baa1f112e 100644 --- a/homeassistant/components/esphome/number.py +++ b/homeassistant/components/esphome/number.py @@ -2,21 +2,16 @@ from __future__ import annotations import math -from typing import cast from aioesphomeapi import NumberInfo, NumberState -import voluptuous as vol from homeassistant.components.number import NumberEntity from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant -import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity_platform import AddEntitiesCallback from . import EsphomeEntity, esphome_state_property, platform_async_setup_entry -ICON_SCHEMA = vol.Schema(cv.icon) - async def async_setup_entry( hass: HomeAssistant, @@ -42,13 +37,6 @@ async def async_setup_entry( class EsphomeNumber(EsphomeEntity[NumberInfo, NumberState], NumberEntity): """A number implementation for esphome.""" - @property - def icon(self) -> str | None: - """Return the icon.""" - if not self._static_info.icon: - return None - return cast(str, ICON_SCHEMA(self._static_info.icon)) - @property def min_value(self) -> float: """Return the minimum value.""" diff --git a/homeassistant/components/esphome/select.py b/homeassistant/components/esphome/select.py index 6ba6ba4c594..f3bfcb982ea 100644 --- a/homeassistant/components/esphome/select.py +++ b/homeassistant/components/esphome/select.py @@ -1,21 +1,15 @@ """Support for esphome selects.""" from __future__ import annotations -from typing import cast - from aioesphomeapi import SelectInfo, SelectState -import voluptuous as vol from homeassistant.components.select import SelectEntity from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant -import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity_platform import AddEntitiesCallback from . import EsphomeEntity, esphome_state_property, platform_async_setup_entry -ICON_SCHEMA = vol.Schema(cv.icon) - async def async_setup_entry( hass: HomeAssistant, @@ -41,13 +35,6 @@ async def async_setup_entry( class EsphomeSelect(EsphomeEntity[SelectInfo, SelectState], SelectEntity): """A select implementation for esphome.""" - @property - def icon(self) -> str | None: - """Return the icon.""" - if not self._static_info.icon: - return None - return cast(str, ICON_SCHEMA(self._static_info.icon)) - @property def options(self) -> list[str]: """Return a set of selectable options.""" diff --git a/homeassistant/components/esphome/sensor.py b/homeassistant/components/esphome/sensor.py index c0ea9f0f9c5..b2758c91b68 100644 --- a/homeassistant/components/esphome/sensor.py +++ b/homeassistant/components/esphome/sensor.py @@ -2,7 +2,6 @@ from __future__ import annotations import math -from typing import cast from aioesphomeapi import ( SensorInfo, @@ -12,7 +11,6 @@ from aioesphomeapi import ( TextSensorState, ) from aioesphomeapi.model import LastResetType -import voluptuous as vol from homeassistant.components.sensor import ( DEVICE_CLASS_TIMESTAMP, @@ -23,7 +21,6 @@ from homeassistant.components.sensor import ( ) from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant -import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.util import dt @@ -34,8 +31,6 @@ from . import ( platform_async_setup_entry, ) -ICON_SCHEMA = vol.Schema(cv.icon) - async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback @@ -77,13 +72,6 @@ _STATE_CLASSES: EsphomeEnumMapper[SensorStateClass, str | None] = EsphomeEnumMap class EsphomeSensor(EsphomeEntity[SensorInfo, SensorState], SensorEntity): """A sensor implementation for esphome.""" - @property - def icon(self) -> str | None: - """Return the icon.""" - if not self._static_info.icon or self._static_info.device_class: - return None - return cast(str, ICON_SCHEMA(self._static_info.icon)) - @property def force_update(self) -> bool: """Return if this sensor should force a state update.""" @@ -133,11 +121,6 @@ class EsphomeSensor(EsphomeEntity[SensorInfo, SensorState], SensorEntity): class EsphomeTextSensor(EsphomeEntity[TextSensorInfo, TextSensorState], SensorEntity): """A text sensor implementation for ESPHome.""" - @property - def icon(self) -> str: - """Return the icon.""" - return self._static_info.icon - @esphome_state_property def native_value(self) -> str | None: """Return the state of the entity.""" diff --git a/homeassistant/components/esphome/switch.py b/homeassistant/components/esphome/switch.py index 218cd3905b0..a8f0febf5b0 100644 --- a/homeassistant/components/esphome/switch.py +++ b/homeassistant/components/esphome/switch.py @@ -35,11 +35,6 @@ async def async_setup_entry( class EsphomeSwitch(EsphomeEntity[SwitchInfo, SwitchState], SwitchEntity): """A switch implementation for ESPHome.""" - @property - def icon(self) -> str: - """Return the icon.""" - return self._static_info.icon - @property def assumed_state(self) -> bool: """Return true if we do optimistic updates."""