diff --git a/homeassistant/components/homeassistant/triggers/numeric_state.py b/homeassistant/components/homeassistant/triggers/numeric_state.py index 823bb608b4d..2d73f38d110 100644 --- a/homeassistant/components/homeassistant/triggers/numeric_state.py +++ b/homeassistant/components/homeassistant/triggers/numeric_state.py @@ -74,7 +74,7 @@ async def async_validate_trigger_config( """Validate trigger config.""" config = _TRIGGER_SCHEMA(config) registry = er.async_get(hass) - config[CONF_ENTITY_ID] = er.async_resolve_entity_ids( + config[CONF_ENTITY_ID] = er.async_validate_entity_ids( registry, cv.entity_ids_or_uuids(config[CONF_ENTITY_ID]) ) return config diff --git a/homeassistant/components/homeassistant/triggers/state.py b/homeassistant/components/homeassistant/triggers/state.py index cafaea40c31..91629cc9933 100644 --- a/homeassistant/components/homeassistant/triggers/state.py +++ b/homeassistant/components/homeassistant/triggers/state.py @@ -77,7 +77,7 @@ async def async_validate_trigger_config( config = TRIGGER_STATE_SCHEMA(config) registry = er.async_get(hass) - config[CONF_ENTITY_ID] = er.async_resolve_entity_ids( + config[CONF_ENTITY_ID] = er.async_validate_entity_ids( registry, cv.entity_ids_or_uuids(config[CONF_ENTITY_ID]) ) diff --git a/homeassistant/components/zone/trigger.py b/homeassistant/components/zone/trigger.py index 5a11bf2068d..8c5af3a0ac2 100644 --- a/homeassistant/components/zone/trigger.py +++ b/homeassistant/components/zone/trigger.py @@ -49,7 +49,7 @@ async def async_validate_trigger_config( """Validate trigger config.""" config = _TRIGGER_SCHEMA(config) registry = er.async_get(hass) - config[CONF_ENTITY_ID] = er.async_resolve_entity_ids( + config[CONF_ENTITY_ID] = er.async_validate_entity_ids( registry, config[CONF_ENTITY_ID] ) return config diff --git a/homeassistant/helpers/condition.py b/homeassistant/helpers/condition.py index 3355424b710..71e238938cb 100644 --- a/homeassistant/helpers/condition.py +++ b/homeassistant/helpers/condition.py @@ -897,7 +897,7 @@ def numeric_state_validate_config( registry = er.async_get(hass) config = dict(config) - config[CONF_ENTITY_ID] = er.async_resolve_entity_ids( + config[CONF_ENTITY_ID] = er.async_validate_entity_ids( registry, cv.entity_ids_or_uuids(config[CONF_ENTITY_ID]) ) return config @@ -908,7 +908,7 @@ def state_validate_config(hass: HomeAssistant, config: ConfigType) -> ConfigType registry = er.async_get(hass) config = dict(config) - config[CONF_ENTITY_ID] = er.async_resolve_entity_ids( + config[CONF_ENTITY_ID] = er.async_validate_entity_ids( registry, cv.entity_ids_or_uuids(config[CONF_ENTITY_ID]) ) return config diff --git a/homeassistant/helpers/entity_registry.py b/homeassistant/helpers/entity_registry.py index 4d4fce6e685..5cce811b4b3 100644 --- a/homeassistant/helpers/entity_registry.py +++ b/homeassistant/helpers/entity_registry.py @@ -924,13 +924,22 @@ async def async_migrate_entries( @callback -def async_resolve_entity_ids( +def async_validate_entity_ids( registry: EntityRegistry, entity_ids_or_uuids: list[str] ) -> list[str]: - """Resolve a list of entity ids or UUIDs to a list of entity ids.""" + """Validate and resolve a list of entity ids or UUIDs to a list of entity ids. - def resolve_entity(entity_id_or_uuid: str) -> str | None: - """Resolve an entity id or UUID to an entity id or None.""" + Returns a list with UUID resolved to entity_ids. + Raises vol.Invalid if any item is invalid, or if any a UUID is not associated with + an entity registry item. + """ + + def async_validate_entity_id(entity_id_or_uuid: str) -> str | None: + """Resolve an entity id or UUID to an entity id. + + Raises vol.Invalid if the entity or UUID is invalid, or if the UUID is not + associated with an entity registry item. + """ if valid_entity_id(entity_id_or_uuid): return entity_id_or_uuid if (entry := registry.entities.get_entry(entity_id_or_uuid)) is None: @@ -940,6 +949,6 @@ def async_resolve_entity_ids( tmp = [ resolved_item for item in entity_ids_or_uuids - if (resolved_item := resolve_entity(item)) is not None + if (resolved_item := async_validate_entity_id(item)) is not None ] return tmp diff --git a/homeassistant/helpers/service.py b/homeassistant/helpers/service.py index e638288a58c..82c98c37b84 100644 --- a/homeassistant/helpers/service.py +++ b/homeassistant/helpers/service.py @@ -218,7 +218,7 @@ def async_prepare_call_from_config( if CONF_ENTITY_ID in target: registry = entity_registry.async_get(hass) - target[CONF_ENTITY_ID] = entity_registry.async_resolve_entity_ids( + target[CONF_ENTITY_ID] = entity_registry.async_validate_entity_ids( registry, cv.comp_entity_ids_or_uuids(target[CONF_ENTITY_ID]) ) except TemplateError as ex: diff --git a/tests/helpers/test_entity_registry.py b/tests/helpers/test_entity_registry.py index bad19bf78cb..7dc749b8592 100644 --- a/tests/helpers/test_entity_registry.py +++ b/tests/helpers/test_entity_registry.py @@ -1174,19 +1174,19 @@ async def test_resolve_entity_ids(hass, registry): assert entry2.entity_id == "light.milk" expected = ["light.beer", "light.milk"] - assert er.async_resolve_entity_ids(registry, [entry1.id, entry2.id]) == expected + assert er.async_validate_entity_ids(registry, [entry1.id, entry2.id]) == expected expected = ["light.beer", "light.milk"] - assert er.async_resolve_entity_ids(registry, ["light.beer", entry2.id]) == expected + assert er.async_validate_entity_ids(registry, ["light.beer", entry2.id]) == expected with pytest.raises(vol.Invalid): - er.async_resolve_entity_ids(registry, ["light.beer", "bad_uuid"]) + er.async_validate_entity_ids(registry, ["light.beer", "bad_uuid"]) expected = ["light.unknown"] - assert er.async_resolve_entity_ids(registry, ["light.unknown"]) == expected + assert er.async_validate_entity_ids(registry, ["light.unknown"]) == expected with pytest.raises(vol.Invalid): - er.async_resolve_entity_ids(registry, ["unknown_uuid"]) + er.async_validate_entity_ids(registry, ["unknown_uuid"]) def test_entity_registry_items():