From dbdcb1a91ecc09a8a4f5f5b0985bb9d5070cdb42 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Wed, 24 Jun 2026 09:06:16 +0200 Subject: [PATCH] Migrate alarm control panel entity attributes to StrEnum (#174590) --- .../components/alarm_control_panel/__init__.py | 13 ++++++++----- .../components/alarm_control_panel/const.py | 8 ++++++++ .../snapshots/test_alarm_control_panel.ambr | 18 +++++++++--------- .../snapshots/test_alarm_control_panel.ambr | 6 +++--- .../snapshots/test_alarm_control_panel.ambr | 18 +++++++++--------- .../snapshots/test_alarm_control_panel.ambr | 6 +++--- .../snapshots/test_init.ambr | 12 ++++++------ .../snapshots/test_alarm_control_panel.ambr | 6 +++--- .../snapshots/test_alarm_control_panel.ambr | 6 +++--- .../snapshots/test_alarm_control_panel.ambr | 12 ++++++------ .../snapshots/test_alarm_control_panel.ambr | 12 ++++++------ .../snapshots/test_alarm_control_panel.ambr | 6 +++--- 12 files changed, 67 insertions(+), 56 deletions(-) diff --git a/homeassistant/components/alarm_control_panel/__init__.py b/homeassistant/components/alarm_control_panel/__init__.py index d4de82ea7dc3..299de8a6bf65 100644 --- a/homeassistant/components/alarm_control_panel/__init__.py +++ b/homeassistant/components/alarm_control_panel/__init__.py @@ -8,7 +8,7 @@ from propcache.api import cached_property import voluptuous as vol from homeassistant.config_entries import ConfigEntry -from homeassistant.const import ( +from homeassistant.const import ( # noqa: F401 ATTR_CODE, ATTR_CODE_FORMAT, SERVICE_ALARM_ARM_AWAY, @@ -28,11 +28,12 @@ from homeassistant.helpers.entity_component import EntityComponent from homeassistant.helpers.typing import ConfigType from homeassistant.util.hass_dict import HassKey -from .const import ( +from .const import ( # noqa: F401 ATTR_CHANGED_BY, ATTR_CODE_ARM_REQUIRED, DOMAIN, AlarmControlPanelEntityFeature, + AlarmControlPanelEntityStateAttribute, AlarmControlPanelState, CodeFormat, ) @@ -303,9 +304,11 @@ class AlarmControlPanelEntity(Entity, cached_properties=CACHED_PROPERTIES_WITH_A def state_attributes(self) -> dict[str, Any] | None: """Return the state attributes.""" return { - ATTR_CODE_FORMAT: self.code_format, - ATTR_CHANGED_BY: self.changed_by, - ATTR_CODE_ARM_REQUIRED: self.code_arm_required, + AlarmControlPanelEntityStateAttribute.CODE_FORMAT: self.code_format, + AlarmControlPanelEntityStateAttribute.CHANGED_BY: self.changed_by, + AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: ( + self.code_arm_required + ), } @override diff --git a/homeassistant/components/alarm_control_panel/const.py b/homeassistant/components/alarm_control_panel/const.py index f9a5887513ca..e66f25c72f9d 100644 --- a/homeassistant/components/alarm_control_panel/const.py +++ b/homeassistant/components/alarm_control_panel/const.py @@ -9,6 +9,14 @@ ATTR_CHANGED_BY: Final = "changed_by" ATTR_CODE_ARM_REQUIRED: Final = "code_arm_required" +class AlarmControlPanelEntityStateAttribute(StrEnum): + """State attributes for alarm control panel entities.""" + + CODE_FORMAT = "code_format" + CHANGED_BY = "changed_by" + CODE_ARM_REQUIRED = "code_arm_required" + + class AlarmControlPanelState(StrEnum): """Alarm control panel entity states.""" diff --git a/tests/components/bosch_alarm/snapshots/test_alarm_control_panel.ambr b/tests/components/bosch_alarm/snapshots/test_alarm_control_panel.ambr index f659d5dd39fa..ea9938d95eaa 100644 --- a/tests/components/bosch_alarm/snapshots/test_alarm_control_panel.ambr +++ b/tests/components/bosch_alarm/snapshots/test_alarm_control_panel.ambr @@ -39,9 +39,9 @@ # name: test_alarm_control_panel[amax_3000-None][alarm_control_panel.area1-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'changed_by': None, - 'code_arm_required': False, - 'code_format': None, + : None, + : False, + : None, 'friendly_name': 'Area1', 'supported_features': , }), @@ -93,9 +93,9 @@ # name: test_alarm_control_panel[b5512-None][alarm_control_panel.area1-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'changed_by': None, - 'code_arm_required': False, - 'code_format': None, + : None, + : False, + : None, 'friendly_name': 'Area1', 'supported_features': , }), @@ -147,9 +147,9 @@ # name: test_alarm_control_panel[solution_3000-None][alarm_control_panel.area1-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'changed_by': None, - 'code_arm_required': False, - 'code_format': None, + : None, + : False, + : None, 'friendly_name': 'Area1', 'supported_features': , }), diff --git a/tests/components/deconz/snapshots/test_alarm_control_panel.ambr b/tests/components/deconz/snapshots/test_alarm_control_panel.ambr index 1e6ba2db58e2..96e440178fe1 100644 --- a/tests/components/deconz/snapshots/test_alarm_control_panel.ambr +++ b/tests/components/deconz/snapshots/test_alarm_control_panel.ambr @@ -39,9 +39,9 @@ # name: test_alarm_control_panel[sensor_payload0-alarm_system_payload0][alarm_control_panel.keypad-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'changed_by': None, - 'code_arm_required': True, - 'code_format': , + : None, + : True, + : , 'friendly_name': 'Keypad', 'supported_features': , }), diff --git a/tests/components/elmax/snapshots/test_alarm_control_panel.ambr b/tests/components/elmax/snapshots/test_alarm_control_panel.ambr index 5d30e0253d3f..a61f34546031 100644 --- a/tests/components/elmax/snapshots/test_alarm_control_panel.ambr +++ b/tests/components/elmax/snapshots/test_alarm_control_panel.ambr @@ -39,9 +39,9 @@ # name: test_alarm_control_panels[alarm_control_panel.direct_panel_https_1_1_1_1_443_api_v2_area_1-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'changed_by': None, - 'code_arm_required': False, - 'code_format': , + : None, + : False, + : , 'friendly_name': 'Direct Panel https://1.1.1.1:443/api/v2 AREA 1', 'supported_features': , }), @@ -93,9 +93,9 @@ # name: test_alarm_control_panels[alarm_control_panel.direct_panel_https_1_1_1_1_443_api_v2_area_2-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'changed_by': None, - 'code_arm_required': False, - 'code_format': , + : None, + : False, + : , 'friendly_name': 'Direct Panel https://1.1.1.1:443/api/v2 AREA 2', 'supported_features': , }), @@ -147,9 +147,9 @@ # name: test_alarm_control_panels[alarm_control_panel.direct_panel_https_1_1_1_1_443_api_v2_area_3-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'changed_by': None, - 'code_arm_required': False, - 'code_format': , + : None, + : False, + : , 'friendly_name': 'Direct Panel https://1.1.1.1:443/api/v2 AREA 3', 'supported_features': , }), diff --git a/tests/components/homee/snapshots/test_alarm_control_panel.ambr b/tests/components/homee/snapshots/test_alarm_control_panel.ambr index b38521e48b16..3f1b5decd4ce 100644 --- a/tests/components/homee/snapshots/test_alarm_control_panel.ambr +++ b/tests/components/homee/snapshots/test_alarm_control_panel.ambr @@ -39,9 +39,9 @@ # name: test_alarm_control_panel_snapshot[alarm_control_panel.testhomee_status-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'changed_by': 'user - 4', - 'code_arm_required': False, - 'code_format': None, + : 'user - 4', + : False, + : None, 'friendly_name': 'TestHomee Status', 'supported_features': , }), diff --git a/tests/components/homekit_controller/snapshots/test_init.ambr b/tests/components/homekit_controller/snapshots/test_init.ambr index 628027374a67..01a2d93743f7 100644 --- a/tests/components/homekit_controller/snapshots/test_init.ambr +++ b/tests/components/homekit_controller/snapshots/test_init.ambr @@ -1587,9 +1587,9 @@ }), 'state': dict({ 'attributes': dict({ - 'changed_by': None, - 'code_arm_required': False, - 'code_format': None, + : None, + : False, + : None, 'friendly_name': 'Aqara-Hub-E1-00A0 Security System', 'supported_features': , }), @@ -1987,9 +1987,9 @@ }), 'state': dict({ 'attributes': dict({ - 'changed_by': None, - 'code_arm_required': False, - 'code_format': None, + : None, + : False, + : None, 'friendly_name': 'Aqara Hub-1563 Security System', 'supported_features': , }), diff --git a/tests/components/satel_integra/snapshots/test_alarm_control_panel.ambr b/tests/components/satel_integra/snapshots/test_alarm_control_panel.ambr index 9b78602bc75b..6b29bf7431a0 100644 --- a/tests/components/satel_integra/snapshots/test_alarm_control_panel.ambr +++ b/tests/components/satel_integra/snapshots/test_alarm_control_panel.ambr @@ -39,9 +39,9 @@ # name: test_alarm_control_panel[alarm_control_panel.home-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'changed_by': None, - 'code_arm_required': True, - 'code_format': , + : None, + : True, + : , 'friendly_name': 'Home', 'supported_features': , }), diff --git a/tests/components/template/snapshots/test_alarm_control_panel.ambr b/tests/components/template/snapshots/test_alarm_control_panel.ambr index 9772c31220e8..74d585543ea3 100644 --- a/tests/components/template/snapshots/test_alarm_control_panel.ambr +++ b/tests/components/template/snapshots/test_alarm_control_panel.ambr @@ -2,9 +2,9 @@ # name: test_setup_config_entry StateSnapshot({ 'attributes': ReadOnlyDict({ - 'changed_by': None, - 'code_arm_required': True, - 'code_format': , + : None, + : True, + : , 'friendly_name': 'My template', 'supported_features': , }), diff --git a/tests/components/totalconnect/snapshots/test_alarm_control_panel.ambr b/tests/components/totalconnect/snapshots/test_alarm_control_panel.ambr index 10d246174cb9..43fb050bce98 100644 --- a/tests/components/totalconnect/snapshots/test_alarm_control_panel.ambr +++ b/tests/components/totalconnect/snapshots/test_alarm_control_panel.ambr @@ -39,9 +39,9 @@ # name: test_entities[alarm_control_panel.test-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'changed_by': None, - 'code_arm_required': False, - 'code_format': None, + : None, + : False, + : None, 'friendly_name': 'test', 'supported_features': , }), @@ -93,9 +93,9 @@ # name: test_entities[alarm_control_panel.test_partition_2-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'changed_by': None, - 'code_arm_required': False, - 'code_format': None, + : None, + : False, + : None, 'friendly_name': 'test Partition 2', 'supported_features': , }), diff --git a/tests/components/tuya/snapshots/test_alarm_control_panel.ambr b/tests/components/tuya/snapshots/test_alarm_control_panel.ambr index e6ac63c8e134..faac377987cc 100644 --- a/tests/components/tuya/snapshots/test_alarm_control_panel.ambr +++ b/tests/components/tuya/snapshots/test_alarm_control_panel.ambr @@ -39,9 +39,9 @@ # name: test_platform_setup_and_discovery[alarm_control_panel.c30-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'changed_by': None, - 'code_arm_required': False, - 'code_format': None, + : None, + : False, + : None, 'friendly_name': 'C30', 'supported_features': , }), @@ -93,9 +93,9 @@ # name: test_platform_setup_and_discovery[alarm_control_panel.multifunction_alarm-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'changed_by': None, - 'code_arm_required': False, - 'code_format': None, + : None, + : False, + : None, 'friendly_name': 'Multifunction alarm', 'supported_features': , }), diff --git a/tests/components/yale_smart_alarm/snapshots/test_alarm_control_panel.ambr b/tests/components/yale_smart_alarm/snapshots/test_alarm_control_panel.ambr index 2c4952b9d982..f9b36cfbdef1 100644 --- a/tests/components/yale_smart_alarm/snapshots/test_alarm_control_panel.ambr +++ b/tests/components/yale_smart_alarm/snapshots/test_alarm_control_panel.ambr @@ -39,9 +39,9 @@ # name: test_alarm_control_panel[load_platforms0][alarm_control_panel.test_username-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'changed_by': None, - 'code_arm_required': False, - 'code_format': None, + : None, + : False, + : None, 'friendly_name': 'test-username', 'supported_features': , }),