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

View File

@ -1103,6 +1103,24 @@ async def test_extraction_functions(hass):
"event_type": "state_changed",
"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": "state",
@ -1151,6 +1169,18 @@ async def test_extraction_functions(hass):
"event_type": "esphome.button_pressed",
"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": "device",