From bd6a4d10ea99d757b8b1f19602f4810be8ed2f93 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Thu, 2 Feb 2023 12:34:01 +0100 Subject: [PATCH] Use try_parse_enum in integrations (#87085) --- .../components/abode/binary_sensor.py | 6 ++---- homeassistant/components/dynalite/cover.py | 8 +++----- .../components/esphome/binary_sensor.py | 7 ++----- homeassistant/components/esphome/button.py | 7 ++----- homeassistant/components/esphome/cover.py | 6 ++---- homeassistant/components/esphome/number.py | 6 ++---- homeassistant/components/esphome/sensor.py | 6 ++---- homeassistant/components/esphome/switch.py | 6 ++---- homeassistant/components/knx/sensor.py | 10 +++++----- .../components/onvif/binary_sensor.py | 19 +++++++------------ homeassistant/components/onvif/sensor.py | 16 +++++++--------- 11 files changed, 36 insertions(+), 61 deletions(-) diff --git a/homeassistant/components/abode/binary_sensor.py b/homeassistant/components/abode/binary_sensor.py index 60a09e13bef..402b636e5d6 100644 --- a/homeassistant/components/abode/binary_sensor.py +++ b/homeassistant/components/abode/binary_sensor.py @@ -1,7 +1,6 @@ """Support for Abode Security System binary sensors.""" from __future__ import annotations -from contextlib import suppress from typing import cast from jaraco.abode.devices.sensor import BinarySensor as ABBinarySensor @@ -14,6 +13,7 @@ from homeassistant.components.binary_sensor import ( from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.util.enum import try_parse_enum from . import AbodeDevice, AbodeSystem from .const import DOMAIN @@ -54,6 +54,4 @@ class AbodeBinarySensor(AbodeDevice, BinarySensorEntity): """Return the class of the binary sensor.""" if self._device.get_value("is_window") == "1": return BinarySensorDeviceClass.WINDOW - with suppress(ValueError): - return BinarySensorDeviceClass(cast(str, self._device.generic_type)) - return None + return try_parse_enum(BinarySensorDeviceClass, self._device.generic_type) diff --git a/homeassistant/components/dynalite/cover.py b/homeassistant/components/dynalite/cover.py index 98005ccee0a..96a1f41f9e3 100644 --- a/homeassistant/components/dynalite/cover.py +++ b/homeassistant/components/dynalite/cover.py @@ -1,6 +1,5 @@ """Support for the Dynalite channels as covers.""" -from contextlib import suppress from typing import Any from homeassistant.components.cover import ( @@ -11,6 +10,7 @@ from homeassistant.components.cover import ( from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.util.enum import try_parse_enum from .dynalitebase import DynaliteBase, async_setup_entry_base @@ -39,10 +39,8 @@ class DynaliteCover(DynaliteBase, CoverEntity): @property def device_class(self) -> CoverDeviceClass: """Return the class of the device.""" - if device_class := self._device.device_class: - with suppress(ValueError): - return CoverDeviceClass(device_class) - return CoverDeviceClass.SHUTTER + device_class = try_parse_enum(CoverDeviceClass, self._device.device_class) + return device_class or CoverDeviceClass.SHUTTER @property def current_cover_position(self) -> int: diff --git a/homeassistant/components/esphome/binary_sensor.py b/homeassistant/components/esphome/binary_sensor.py index 96ad9d05238..1a930435e6d 100644 --- a/homeassistant/components/esphome/binary_sensor.py +++ b/homeassistant/components/esphome/binary_sensor.py @@ -1,8 +1,6 @@ """Support for ESPHome binary sensors.""" from __future__ import annotations -from contextlib import suppress - from aioesphomeapi import BinarySensorInfo, BinarySensorState from homeassistant.components.binary_sensor import ( @@ -12,6 +10,7 @@ from homeassistant.components.binary_sensor import ( from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.util.enum import try_parse_enum from . import EsphomeEntity, platform_async_setup_entry @@ -52,9 +51,7 @@ class EsphomeBinarySensor( @property def device_class(self) -> BinarySensorDeviceClass | None: """Return the class of this device, from component DEVICE_CLASSES.""" - with suppress(ValueError): - return BinarySensorDeviceClass(self._static_info.device_class) - return None + return try_parse_enum(BinarySensorDeviceClass, self._static_info.device_class) @property def available(self) -> bool: diff --git a/homeassistant/components/esphome/button.py b/homeassistant/components/esphome/button.py index 3f610c8bbfa..0cb577f30c9 100644 --- a/homeassistant/components/esphome/button.py +++ b/homeassistant/components/esphome/button.py @@ -1,14 +1,13 @@ """Support for ESPHome buttons.""" from __future__ import annotations -from contextlib import suppress - from aioesphomeapi import ButtonInfo, EntityState from homeassistant.components.button import ButtonDeviceClass, ButtonEntity from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.util.enum import try_parse_enum from . import EsphomeEntity, platform_async_setup_entry @@ -34,9 +33,7 @@ class EsphomeButton(EsphomeEntity[ButtonInfo, EntityState], ButtonEntity): @property def device_class(self) -> ButtonDeviceClass | None: """Return the class of this entity.""" - with suppress(ValueError): - return ButtonDeviceClass(self._static_info.device_class) - return None + return try_parse_enum(ButtonDeviceClass, self._static_info.device_class) @callback def _on_device_update(self) -> None: diff --git a/homeassistant/components/esphome/cover.py b/homeassistant/components/esphome/cover.py index 8c28639ff34..99d5f16b271 100644 --- a/homeassistant/components/esphome/cover.py +++ b/homeassistant/components/esphome/cover.py @@ -1,7 +1,6 @@ """Support for ESPHome covers.""" from __future__ import annotations -from contextlib import suppress from typing import Any from aioesphomeapi import CoverInfo, CoverOperation, CoverState @@ -16,6 +15,7 @@ from homeassistant.components.cover import ( from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.util.enum import try_parse_enum from . import EsphomeEntity, esphome_state_property, platform_async_setup_entry @@ -57,9 +57,7 @@ class EsphomeCover(EsphomeEntity[CoverInfo, CoverState], CoverEntity): @property def device_class(self) -> CoverDeviceClass | None: """Return the class of this device, from component DEVICE_CLASSES.""" - with suppress(ValueError): - return CoverDeviceClass(self._static_info.device_class) - return None + return try_parse_enum(CoverDeviceClass, self._static_info.device_class) @property def assumed_state(self) -> bool: diff --git a/homeassistant/components/esphome/number.py b/homeassistant/components/esphome/number.py index 4111a616439..7379be33da2 100644 --- a/homeassistant/components/esphome/number.py +++ b/homeassistant/components/esphome/number.py @@ -1,7 +1,6 @@ """Support for esphome numbers.""" from __future__ import annotations -from contextlib import suppress import math from aioesphomeapi import NumberInfo, NumberMode as EsphomeNumberMode, NumberState @@ -10,6 +9,7 @@ from homeassistant.components.number import NumberDeviceClass, NumberEntity, Num from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.util.enum import try_parse_enum from . import ( EsphomeEntity, @@ -51,9 +51,7 @@ class EsphomeNumber(EsphomeEntity[NumberInfo, NumberState], NumberEntity): @property def device_class(self) -> NumberDeviceClass | None: """Return the class of this entity.""" - with suppress(ValueError): - return NumberDeviceClass(self._static_info.device_class) - return None + return try_parse_enum(NumberDeviceClass, self._static_info.device_class) @property def native_min_value(self) -> float: diff --git a/homeassistant/components/esphome/sensor.py b/homeassistant/components/esphome/sensor.py index 282bcb1fbee..863096cb3b1 100644 --- a/homeassistant/components/esphome/sensor.py +++ b/homeassistant/components/esphome/sensor.py @@ -1,7 +1,6 @@ """Support for esphome sensors.""" from __future__ import annotations -from contextlib import suppress from datetime import datetime import math @@ -23,6 +22,7 @@ from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.util import dt +from homeassistant.util.enum import try_parse_enum from . import ( EsphomeEntity, @@ -98,9 +98,7 @@ class EsphomeSensor(EsphomeEntity[SensorInfo, SensorState], SensorEntity): @property def device_class(self) -> SensorDeviceClass | None: """Return the class of this device, from component DEVICE_CLASSES.""" - with suppress(ValueError): - return SensorDeviceClass(self._static_info.device_class) - return None + return try_parse_enum(SensorDeviceClass, self._static_info.device_class) @property def state_class(self) -> SensorStateClass | None: diff --git a/homeassistant/components/esphome/switch.py b/homeassistant/components/esphome/switch.py index 3888053d3fb..83148542435 100644 --- a/homeassistant/components/esphome/switch.py +++ b/homeassistant/components/esphome/switch.py @@ -1,7 +1,6 @@ """Support for ESPHome switches.""" from __future__ import annotations -from contextlib import suppress from typing import Any from aioesphomeapi import SwitchInfo, SwitchState @@ -10,6 +9,7 @@ from homeassistant.components.switch import SwitchDeviceClass, SwitchEntity from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.util.enum import try_parse_enum from . import EsphomeEntity, esphome_state_property, platform_async_setup_entry @@ -46,9 +46,7 @@ class EsphomeSwitch(EsphomeEntity[SwitchInfo, SwitchState], SwitchEntity): @property def device_class(self) -> SwitchDeviceClass | None: """Return the class of this device.""" - with suppress(ValueError): - return SwitchDeviceClass(self._static_info.device_class) - return None + return try_parse_enum(SwitchDeviceClass, self._static_info.device_class) async def async_turn_on(self, **kwargs: Any) -> None: """Turn the entity on.""" diff --git a/homeassistant/components/knx/sensor.py b/homeassistant/components/knx/sensor.py index 395b17e44a6..64cd6151f7c 100644 --- a/homeassistant/components/knx/sensor.py +++ b/homeassistant/components/knx/sensor.py @@ -1,7 +1,6 @@ """Support for KNX/IP sensors.""" from __future__ import annotations -from contextlib import suppress from typing import Any from xknx import XKNX @@ -23,6 +22,7 @@ from homeassistant.const import ( from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import ConfigType, StateType +from homeassistant.util.enum import try_parse_enum from .const import ATTR_SOURCE, DATA_KNX_CONFIG, DOMAIN from .knx_entity import KnxEntity @@ -64,10 +64,10 @@ class KNXSensor(KnxEntity, SensorEntity): if device_class := config.get(CONF_DEVICE_CLASS): self._attr_device_class = device_class else: - with suppress(ValueError): - self._attr_device_class = SensorDeviceClass( - str(self._device.ha_device_class()) - ) + self._attr_device_class = try_parse_enum( + SensorDeviceClass, self._device.ha_device_class() + ) + self._attr_force_update = self._device.always_callback self._attr_entity_category = config.get(CONF_ENTITY_CATEGORY) self._attr_unique_id = str(self._device.sensor_value.group_address_state) diff --git a/homeassistant/components/onvif/binary_sensor.py b/homeassistant/components/onvif/binary_sensor.py index 93298c0cc63..8f79b43296f 100644 --- a/homeassistant/components/onvif/binary_sensor.py +++ b/homeassistant/components/onvif/binary_sensor.py @@ -1,8 +1,6 @@ """Support for ONVIF binary sensors.""" from __future__ import annotations -from contextlib import suppress - from homeassistant.components.binary_sensor import ( BinarySensorDeviceClass, BinarySensorEntity, @@ -13,6 +11,7 @@ from homeassistant.core import HomeAssistant, callback from homeassistant.helpers import entity_registry as er from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.restore_state import RestoreEntity +from homeassistant.util.enum import try_parse_enum from .base import ONVIFBaseEntity from .const import DOMAIN @@ -66,21 +65,17 @@ class ONVIFBinarySensor(ONVIFBaseEntity, RestoreEntity, BinarySensorEntity): """Initialize the ONVIF binary sensor.""" self._attr_unique_id = uid if entry is not None: - if entry.original_device_class: - with suppress(ValueError): - self._attr_device_class = BinarySensorDeviceClass( - entry.original_device_class - ) + self._attr_device_class = try_parse_enum( + BinarySensorDeviceClass, entry.original_device_class + ) self._attr_entity_category = entry.entity_category self._attr_name = entry.name else: event = device.events.get_uid(uid) assert event - if event.device_class: - with suppress(ValueError): - self._attr_device_class = BinarySensorDeviceClass( - event.device_class - ) + self._attr_device_class = try_parse_enum( + BinarySensorDeviceClass, event.device_class + ) self._attr_entity_category = event.entity_category self._attr_entity_registry_enabled_default = event.entity_enabled self._attr_name = f"{device.name} {event.name}" diff --git a/homeassistant/components/onvif/sensor.py b/homeassistant/components/onvif/sensor.py index 0a2932a8094..5f63f9b7132 100644 --- a/homeassistant/components/onvif/sensor.py +++ b/homeassistant/components/onvif/sensor.py @@ -1,7 +1,6 @@ """Support for ONVIF binary sensors.""" from __future__ import annotations -from contextlib import suppress from datetime import date, datetime from decimal import Decimal @@ -11,6 +10,7 @@ from homeassistant.core import HomeAssistant, callback from homeassistant.helpers import entity_registry as er from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import StateType +from homeassistant.util.enum import try_parse_enum from .base import ONVIFBaseEntity from .const import DOMAIN @@ -59,20 +59,18 @@ class ONVIFSensor(ONVIFBaseEntity, RestoreSensor): """Initialize the ONVIF binary sensor.""" self._attr_unique_id = uid if entry is not None: - if entry.original_device_class: - with suppress(ValueError): - self._attr_device_class = SensorDeviceClass( - entry.original_device_class - ) + self._attr_device_class = try_parse_enum( + SensorDeviceClass, entry.original_device_class + ) self._attr_entity_category = entry.entity_category self._attr_name = entry.name self._attr_native_unit_of_measurement = entry.unit_of_measurement else: event = device.events.get_uid(uid) assert event - if event.device_class: - with suppress(ValueError): - self._attr_device_class = SensorDeviceClass(event.device_class) + self._attr_device_class = try_parse_enum( + SensorDeviceClass, event.device_class + ) self._attr_entity_category = event.entity_category self._attr_entity_registry_enabled_default = event.entity_enabled self._attr_name = f"{device.name} {event.name}"