parent
5c5f839119
commit
1c2bce9292
|
@ -55,6 +55,15 @@ async def async_setup(hass: ha.HomeAssistant, config: dict) -> Awaitable[bool]:
|
|||
tasks = []
|
||||
|
||||
for domain, ent_ids in by_domain:
|
||||
# This leads to endless loop.
|
||||
if domain == DOMAIN:
|
||||
_LOGGER.warning(
|
||||
"Called service homeassistant.%s with invalid entity IDs %s",
|
||||
service.service,
|
||||
", ".join(ent_ids),
|
||||
)
|
||||
continue
|
||||
|
||||
# We want to block for all calls and only return when all calls
|
||||
# have been processed. If a service does not exist it causes a 10
|
||||
# second delay while we're blocking waiting for a response.
|
||||
|
@ -73,7 +82,8 @@ async def async_setup(hass: ha.HomeAssistant, config: dict) -> Awaitable[bool]:
|
|||
hass.services.async_call(domain, service.service, data, blocking)
|
||||
)
|
||||
|
||||
await asyncio.wait(tasks)
|
||||
if tasks:
|
||||
await asyncio.gather(*tasks)
|
||||
|
||||
service_schema = vol.Schema({ATTR_ENTITY_ID: cv.entity_ids}, extra=vol.ALLOW_EXTRA)
|
||||
|
||||
|
|
|
@ -372,3 +372,17 @@ async def test_turn_on_off_toggle_schema(hass, hass_read_only_user):
|
|||
context=ha.Context(user_id=hass_read_only_user.id),
|
||||
blocking=True,
|
||||
)
|
||||
|
||||
|
||||
async def test_not_allowing_recursion(hass, caplog):
|
||||
"""Test we do not allow recursion."""
|
||||
await async_setup_component(hass, "homeassistant", {})
|
||||
|
||||
for service in SERVICE_TURN_ON, SERVICE_TURN_OFF, SERVICE_TOGGLE:
|
||||
await hass.services.async_call(
|
||||
ha.DOMAIN, service, {"entity_id": "homeassistant.light"}, blocking=True,
|
||||
)
|
||||
assert (
|
||||
f"Called service homeassistant.{service} with invalid entity IDs homeassistant.light"
|
||||
in caplog.text
|
||||
), service
|
||||
|
|
Loading…
Reference in New Issue