mirror of
https://github.com/home-assistant/core.git
synced 2025-07-08 05:47:10 +00:00
Fix homeassistant/expose_entity/list (#138872)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
This commit is contained in:
parent
eb26a2124b
commit
cab6ec0363
@ -437,18 +437,21 @@ def ws_expose_entity(
|
|||||||
def ws_list_exposed_entities(
|
def ws_list_exposed_entities(
|
||||||
hass: HomeAssistant, connection: websocket_api.ActiveConnection, msg: dict[str, Any]
|
hass: HomeAssistant, connection: websocket_api.ActiveConnection, msg: dict[str, Any]
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Expose an entity to an assistant."""
|
"""List entities which are exposed to assistants."""
|
||||||
result: dict[str, Any] = {}
|
result: dict[str, Any] = {}
|
||||||
|
|
||||||
exposed_entities = hass.data[DATA_EXPOSED_ENTITIES]
|
exposed_entities = hass.data[DATA_EXPOSED_ENTITIES]
|
||||||
entity_registry = er.async_get(hass)
|
entity_registry = er.async_get(hass)
|
||||||
for entity_id in chain(exposed_entities.entities, entity_registry.entities):
|
for entity_id in chain(exposed_entities.entities, entity_registry.entities):
|
||||||
result[entity_id] = {}
|
exposed_to = {}
|
||||||
entity_settings = async_get_entity_settings(hass, entity_id)
|
entity_settings = async_get_entity_settings(hass, entity_id)
|
||||||
for assistant, settings in entity_settings.items():
|
for assistant, settings in entity_settings.items():
|
||||||
if "should_expose" not in settings:
|
if "should_expose" not in settings or not settings["should_expose"]:
|
||||||
continue
|
continue
|
||||||
result[entity_id][assistant] = settings["should_expose"]
|
exposed_to[assistant] = True
|
||||||
|
if not exposed_to:
|
||||||
|
continue
|
||||||
|
result[entity_id] = exposed_to
|
||||||
connection.send_result(msg["id"], {"exposed_entities": result})
|
connection.send_result(msg["id"], {"exposed_entities": result})
|
||||||
|
|
||||||
|
|
||||||
|
@ -497,28 +497,48 @@ async def test_list_exposed_entities(
|
|||||||
|
|
||||||
entry1 = entity_registry.async_get_or_create("test", "test", "unique1")
|
entry1 = entity_registry.async_get_or_create("test", "test", "unique1")
|
||||||
entry2 = entity_registry.async_get_or_create("test", "test", "unique2")
|
entry2 = entity_registry.async_get_or_create("test", "test", "unique2")
|
||||||
|
entity_registry.async_get_or_create("test", "test", "unique3")
|
||||||
|
|
||||||
# Set options for registered entities
|
# Set options for registered entities
|
||||||
await ws_client.send_json_auto_id(
|
await ws_client.send_json_auto_id(
|
||||||
{
|
{
|
||||||
"type": "homeassistant/expose_entity",
|
"type": "homeassistant/expose_entity",
|
||||||
"assistants": ["cloud.alexa", "cloud.google_assistant"],
|
"assistants": ["cloud.alexa", "cloud.google_assistant"],
|
||||||
"entity_ids": [entry1.entity_id, entry2.entity_id],
|
"entity_ids": [entry1.entity_id],
|
||||||
"should_expose": True,
|
"should_expose": True,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
response = await ws_client.receive_json()
|
response = await ws_client.receive_json()
|
||||||
assert response["success"]
|
assert response["success"]
|
||||||
|
|
||||||
|
await ws_client.send_json_auto_id(
|
||||||
|
{
|
||||||
|
"type": "homeassistant/expose_entity",
|
||||||
|
"assistants": ["cloud.alexa", "cloud.google_assistant"],
|
||||||
|
"entity_ids": [entry2.entity_id],
|
||||||
|
"should_expose": False,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
response = await ws_client.receive_json()
|
||||||
|
assert response["success"]
|
||||||
|
|
||||||
# Set options for entities not in the entity registry
|
# Set options for entities not in the entity registry
|
||||||
await ws_client.send_json_auto_id(
|
await ws_client.send_json_auto_id(
|
||||||
{
|
{
|
||||||
"type": "homeassistant/expose_entity",
|
"type": "homeassistant/expose_entity",
|
||||||
"assistants": ["cloud.alexa", "cloud.google_assistant"],
|
"assistants": ["cloud.alexa", "cloud.google_assistant"],
|
||||||
"entity_ids": [
|
"entity_ids": ["test.test"],
|
||||||
"test.test",
|
"should_expose": True,
|
||||||
"test.test2",
|
}
|
||||||
],
|
)
|
||||||
|
response = await ws_client.receive_json()
|
||||||
|
assert response["success"]
|
||||||
|
|
||||||
|
await ws_client.send_json_auto_id(
|
||||||
|
{
|
||||||
|
"type": "homeassistant/expose_entity",
|
||||||
|
"assistants": ["cloud.alexa", "cloud.google_assistant"],
|
||||||
|
"entity_ids": ["test.test2"],
|
||||||
"should_expose": False,
|
"should_expose": False,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -531,10 +551,8 @@ async def test_list_exposed_entities(
|
|||||||
assert response["success"]
|
assert response["success"]
|
||||||
assert response["result"] == {
|
assert response["result"] == {
|
||||||
"exposed_entities": {
|
"exposed_entities": {
|
||||||
"test.test": {"cloud.alexa": False, "cloud.google_assistant": False},
|
"test.test": {"cloud.alexa": True, "cloud.google_assistant": True},
|
||||||
"test.test2": {"cloud.alexa": False, "cloud.google_assistant": False},
|
|
||||||
"test.test_unique1": {"cloud.alexa": True, "cloud.google_assistant": True},
|
"test.test_unique1": {"cloud.alexa": True, "cloud.google_assistant": True},
|
||||||
"test.test_unique2": {"cloud.alexa": True, "cloud.google_assistant": True},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user