Correct referenced entities and devices for event triggers (#76818)

This commit is contained in:
Erik Montnemery 2022-08-15 23:35:30 +02:00 committed by GitHub
parent f400a404cd
commit 1c1b23ef69
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 2 deletions

View File

@ -36,6 +36,7 @@ from homeassistant.core import (
HomeAssistant, HomeAssistant,
callback, callback,
split_entity_id, split_entity_id,
valid_entity_id,
) )
from homeassistant.exceptions import ( from homeassistant.exceptions import (
ConditionError, ConditionError,
@ -355,7 +356,7 @@ class AutomationEntity(ToggleEntity, RestoreEntity):
referenced |= condition.async_extract_devices(conf) referenced |= condition.async_extract_devices(conf)
for conf in self._trigger_config: for conf in self._trigger_config:
referenced |= set(_trigger_extract_device(conf)) referenced |= set(_trigger_extract_devices(conf))
self._referenced_devices = referenced self._referenced_devices = referenced
return referenced return referenced
@ -762,7 +763,7 @@ async def _async_process_if(hass, name, config, p_config):
@callback @callback
def _trigger_extract_device(trigger_conf: dict) -> list[str]: def _trigger_extract_devices(trigger_conf: dict) -> list[str]:
"""Extract devices from a trigger config.""" """Extract devices from a trigger config."""
if trigger_conf[CONF_PLATFORM] == "device": if trigger_conf[CONF_PLATFORM] == "device":
return [trigger_conf[CONF_DEVICE_ID]] return [trigger_conf[CONF_DEVICE_ID]]
@ -771,6 +772,7 @@ def _trigger_extract_device(trigger_conf: dict) -> list[str]:
trigger_conf[CONF_PLATFORM] == "event" trigger_conf[CONF_PLATFORM] == "event"
and CONF_EVENT_DATA in trigger_conf and CONF_EVENT_DATA in trigger_conf
and CONF_DEVICE_ID in trigger_conf[CONF_EVENT_DATA] and CONF_DEVICE_ID in trigger_conf[CONF_EVENT_DATA]
and isinstance(trigger_conf[CONF_EVENT_DATA][CONF_DEVICE_ID], str)
): ):
return [trigger_conf[CONF_EVENT_DATA][CONF_DEVICE_ID]] return [trigger_conf[CONF_EVENT_DATA][CONF_DEVICE_ID]]
@ -802,6 +804,8 @@ def _trigger_extract_entities(trigger_conf: dict) -> list[str]:
trigger_conf[CONF_PLATFORM] == "event" trigger_conf[CONF_PLATFORM] == "event"
and CONF_EVENT_DATA in trigger_conf and CONF_EVENT_DATA in trigger_conf
and CONF_ENTITY_ID in trigger_conf[CONF_EVENT_DATA] and CONF_ENTITY_ID in trigger_conf[CONF_EVENT_DATA]
and isinstance(trigger_conf[CONF_EVENT_DATA][CONF_ENTITY_ID], str)
and valid_entity_id(trigger_conf[CONF_EVENT_DATA][CONF_ENTITY_ID])
): ):
return [trigger_conf[CONF_EVENT_DATA][CONF_ENTITY_ID]] return [trigger_conf[CONF_EVENT_DATA][CONF_ENTITY_ID]]

View File

@ -1103,6 +1103,24 @@ async def test_extraction_functions(hass):
"event_type": "state_changed", "event_type": "state_changed",
"event_data": {"entity_id": "sensor.trigger_event"}, "event_data": {"entity_id": "sensor.trigger_event"},
}, },
# entity_id is a list of strings (not supported)
{
"platform": "event",
"event_type": "state_changed",
"event_data": {"entity_id": ["sensor.trigger_event2"]},
},
# entity_id is not a valid entity ID
{
"platform": "event",
"event_type": "state_changed",
"event_data": {"entity_id": "abc"},
},
# entity_id is not a string
{
"platform": "event",
"event_type": "state_changed",
"event_data": {"entity_id": 123},
},
], ],
"condition": { "condition": {
"condition": "state", "condition": "state",
@ -1151,6 +1169,18 @@ async def test_extraction_functions(hass):
"event_type": "esphome.button_pressed", "event_type": "esphome.button_pressed",
"event_data": {"device_id": "device-trigger-event"}, "event_data": {"device_id": "device-trigger-event"},
}, },
# device_id is a list of strings (not supported)
{
"platform": "event",
"event_type": "esphome.button_pressed",
"event_data": {"device_id": ["device-trigger-event"]},
},
# device_id is not a string
{
"platform": "event",
"event_type": "esphome.button_pressed",
"event_data": {"device_id": 123},
},
], ],
"condition": { "condition": {
"condition": "device", "condition": "device",