Migrate alarm control panel entity attributes to StrEnum (#174590)

This commit is contained in:
epenet
2026-06-24 09:06:16 +02:00
committed by GitHub
parent f9bf7ab122
commit dbdcb1a91e
12 changed files with 67 additions and 56 deletions
@@ -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
@@ -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."""
@@ -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,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: None,
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: False,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: None,
'friendly_name': 'Area1',
'supported_features': <AlarmControlPanelEntityFeature: 3>,
}),
@@ -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,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: None,
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: False,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: None,
'friendly_name': 'Area1',
'supported_features': <AlarmControlPanelEntityFeature: 3>,
}),
@@ -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,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: None,
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: False,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: None,
'friendly_name': 'Area1',
'supported_features': <AlarmControlPanelEntityFeature: 3>,
}),
@@ -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': <CodeFormat.NUMBER: 'number'>,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: None,
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: True,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: <CodeFormat.NUMBER: 'number'>,
'friendly_name': 'Keypad',
'supported_features': <AlarmControlPanelEntityFeature: 7>,
}),
@@ -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': <CodeFormat.NUMBER: 'number'>,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: None,
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: False,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: <CodeFormat.NUMBER: 'number'>,
'friendly_name': 'Direct Panel https://1.1.1.1:443/api/v2 AREA 1',
'supported_features': <AlarmControlPanelEntityFeature: 2>,
}),
@@ -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': <CodeFormat.NUMBER: 'number'>,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: None,
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: False,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: <CodeFormat.NUMBER: 'number'>,
'friendly_name': 'Direct Panel https://1.1.1.1:443/api/v2 AREA 2',
'supported_features': <AlarmControlPanelEntityFeature: 2>,
}),
@@ -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': <CodeFormat.NUMBER: 'number'>,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: None,
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: False,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: <CodeFormat.NUMBER: 'number'>,
'friendly_name': 'Direct Panel https://1.1.1.1:443/api/v2 AREA 3',
'supported_features': <AlarmControlPanelEntityFeature: 2>,
}),
@@ -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,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: 'user - 4',
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: False,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: None,
'friendly_name': 'TestHomee Status',
'supported_features': <AlarmControlPanelEntityFeature: 39>,
}),
@@ -1587,9 +1587,9 @@
}),
'state': dict({
'attributes': dict({
'changed_by': None,
'code_arm_required': False,
'code_format': None,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: None,
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: False,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: None,
'friendly_name': 'Aqara-Hub-E1-00A0 Security System',
'supported_features': <AlarmControlPanelEntityFeature: 7>,
}),
@@ -1987,9 +1987,9 @@
}),
'state': dict({
'attributes': dict({
'changed_by': None,
'code_arm_required': False,
'code_format': None,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: None,
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: False,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: None,
'friendly_name': 'Aqara Hub-1563 Security System',
'supported_features': <AlarmControlPanelEntityFeature: 7>,
}),
@@ -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': <CodeFormat.NUMBER: 'number'>,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: None,
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: True,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: <CodeFormat.NUMBER: 'number'>,
'friendly_name': 'Home',
'supported_features': <AlarmControlPanelEntityFeature: 3>,
}),
@@ -2,9 +2,9 @@
# name: test_setup_config_entry
StateSnapshot({
'attributes': ReadOnlyDict({
'changed_by': None,
'code_arm_required': True,
'code_format': <CodeFormat.NUMBER: 'number'>,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: None,
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: True,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: <CodeFormat.NUMBER: 'number'>,
'friendly_name': 'My template',
'supported_features': <AlarmControlPanelEntityFeature: 0>,
}),
@@ -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,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: None,
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: False,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: None,
'friendly_name': 'test',
'supported_features': <AlarmControlPanelEntityFeature: 7>,
}),
@@ -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,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: None,
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: False,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: None,
'friendly_name': 'test Partition 2',
'supported_features': <AlarmControlPanelEntityFeature: 7>,
}),
@@ -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,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: None,
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: False,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: None,
'friendly_name': 'C30',
'supported_features': <AlarmControlPanelEntityFeature: 11>,
}),
@@ -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,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: None,
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: False,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: None,
'friendly_name': 'Multifunction alarm',
'supported_features': <AlarmControlPanelEntityFeature: 11>,
}),
@@ -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,
<AlarmControlPanelEntityStateAttribute.CHANGED_BY: 'changed_by'>: None,
<AlarmControlPanelEntityStateAttribute.CODE_ARM_REQUIRED: 'code_arm_required'>: False,
<AlarmControlPanelEntityStateAttribute.CODE_FORMAT: 'code_format'>: None,
'friendly_name': 'test-username',
'supported_features': <AlarmControlPanelEntityFeature: 3>,
}),