mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 14:17:45 +00:00
Include matching languages in WS conversation/agent/list (#91730)
* Include matching languages in WS conversation/agent/list * Allow specifying country
This commit is contained in:
parent
768c499b6f
commit
0429b321b8
@ -250,6 +250,7 @@ async def websocket_get_agent_info(
|
|||||||
{
|
{
|
||||||
vol.Required("type"): "conversation/agent/list",
|
vol.Required("type"): "conversation/agent/list",
|
||||||
vol.Optional("language"): str,
|
vol.Optional("language"): str,
|
||||||
|
vol.Optional("country"): str,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@websocket_api.async_response
|
@websocket_api.async_response
|
||||||
@ -259,15 +260,20 @@ async def websocket_list_agents(
|
|||||||
"""List conversation agents and, optionally, if they support a given language."""
|
"""List conversation agents and, optionally, if they support a given language."""
|
||||||
manager = _get_agent_manager(hass)
|
manager = _get_agent_manager(hass)
|
||||||
|
|
||||||
|
country = msg.get("country")
|
||||||
language = msg.get("language")
|
language = msg.get("language")
|
||||||
agents = []
|
agents = []
|
||||||
|
|
||||||
for agent_info in manager.async_get_agent_info():
|
for agent_info in manager.async_get_agent_info():
|
||||||
agent_dict: dict[str, Any] = {"id": agent_info.id, "name": agent_info.name}
|
agent = await manager.async_get_agent(agent_info.id)
|
||||||
|
agent_dict: dict[str, Any] = {
|
||||||
|
"id": agent_info.id,
|
||||||
|
"name": agent_info.name,
|
||||||
|
"supported_languages": agent.supported_languages,
|
||||||
|
}
|
||||||
if language:
|
if language:
|
||||||
agent = await manager.async_get_agent(agent_info.id)
|
agent_dict["supported_languages"] = language_util.matches(
|
||||||
agent_dict["language_supported"] = bool(
|
language, agent.supported_languages, country
|
||||||
language_util.matches(language, agent.supported_languages)
|
|
||||||
)
|
)
|
||||||
agents.append(agent_dict)
|
agents.append(agent_dict)
|
||||||
|
|
||||||
|
@ -23,10 +23,67 @@
|
|||||||
dict({
|
dict({
|
||||||
'id': 'homeassistant',
|
'id': 'homeassistant',
|
||||||
'name': 'Home Assistant',
|
'name': 'Home Assistant',
|
||||||
|
'supported_languages': list([
|
||||||
|
'ar',
|
||||||
|
'bg',
|
||||||
|
'bn',
|
||||||
|
'ca',
|
||||||
|
'cs',
|
||||||
|
'da',
|
||||||
|
'de',
|
||||||
|
'de-CH',
|
||||||
|
'el',
|
||||||
|
'en',
|
||||||
|
'es',
|
||||||
|
'fa',
|
||||||
|
'fi',
|
||||||
|
'fr',
|
||||||
|
'fr-CA',
|
||||||
|
'gl',
|
||||||
|
'gu',
|
||||||
|
'he',
|
||||||
|
'hi',
|
||||||
|
'hr',
|
||||||
|
'hu',
|
||||||
|
'id',
|
||||||
|
'is',
|
||||||
|
'it',
|
||||||
|
'ka',
|
||||||
|
'kn',
|
||||||
|
'lb',
|
||||||
|
'lt',
|
||||||
|
'lv',
|
||||||
|
'ml',
|
||||||
|
'mn',
|
||||||
|
'ms',
|
||||||
|
'nb',
|
||||||
|
'nl',
|
||||||
|
'pl',
|
||||||
|
'pt',
|
||||||
|
'pt-br',
|
||||||
|
'ro',
|
||||||
|
'ru',
|
||||||
|
'sk',
|
||||||
|
'sl',
|
||||||
|
'sr',
|
||||||
|
'sv',
|
||||||
|
'sw',
|
||||||
|
'te',
|
||||||
|
'tr',
|
||||||
|
'uk',
|
||||||
|
'ur',
|
||||||
|
'vi',
|
||||||
|
'zh-cn',
|
||||||
|
'zh-hk',
|
||||||
|
'zh-tw',
|
||||||
|
]),
|
||||||
}),
|
}),
|
||||||
dict({
|
dict({
|
||||||
'id': 'mock-entry',
|
'id': 'mock-entry',
|
||||||
'name': 'Mock Title',
|
'name': 'Mock Title',
|
||||||
|
'supported_languages': list([
|
||||||
|
'smurfish',
|
||||||
|
]),
|
||||||
}),
|
}),
|
||||||
]),
|
]),
|
||||||
})
|
})
|
||||||
@ -36,13 +93,16 @@
|
|||||||
'agents': list([
|
'agents': list([
|
||||||
dict({
|
dict({
|
||||||
'id': 'homeassistant',
|
'id': 'homeassistant',
|
||||||
'language_supported': False,
|
|
||||||
'name': 'Home Assistant',
|
'name': 'Home Assistant',
|
||||||
|
'supported_languages': list([
|
||||||
|
]),
|
||||||
}),
|
}),
|
||||||
dict({
|
dict({
|
||||||
'id': 'mock-entry',
|
'id': 'mock-entry',
|
||||||
'language_supported': True,
|
|
||||||
'name': 'Mock Title',
|
'name': 'Mock Title',
|
||||||
|
'supported_languages': list([
|
||||||
|
'smurfish',
|
||||||
|
]),
|
||||||
}),
|
}),
|
||||||
]),
|
]),
|
||||||
})
|
})
|
||||||
@ -52,13 +112,16 @@
|
|||||||
'agents': list([
|
'agents': list([
|
||||||
dict({
|
dict({
|
||||||
'id': 'homeassistant',
|
'id': 'homeassistant',
|
||||||
'language_supported': True,
|
|
||||||
'name': 'Home Assistant',
|
'name': 'Home Assistant',
|
||||||
|
'supported_languages': list([
|
||||||
|
'en',
|
||||||
|
]),
|
||||||
}),
|
}),
|
||||||
dict({
|
dict({
|
||||||
'id': 'mock-entry',
|
'id': 'mock-entry',
|
||||||
'language_supported': False,
|
|
||||||
'name': 'Mock Title',
|
'name': 'Mock Title',
|
||||||
|
'supported_languages': list([
|
||||||
|
]),
|
||||||
}),
|
}),
|
||||||
]),
|
]),
|
||||||
})
|
})
|
||||||
@ -68,13 +131,56 @@
|
|||||||
'agents': list([
|
'agents': list([
|
||||||
dict({
|
dict({
|
||||||
'id': 'homeassistant',
|
'id': 'homeassistant',
|
||||||
'language_supported': True,
|
|
||||||
'name': 'Home Assistant',
|
'name': 'Home Assistant',
|
||||||
|
'supported_languages': list([
|
||||||
|
'en',
|
||||||
|
]),
|
||||||
}),
|
}),
|
||||||
dict({
|
dict({
|
||||||
'id': 'mock-entry',
|
'id': 'mock-entry',
|
||||||
'language_supported': False,
|
|
||||||
'name': 'Mock Title',
|
'name': 'Mock Title',
|
||||||
|
'supported_languages': list([
|
||||||
|
]),
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
})
|
||||||
|
# ---
|
||||||
|
# name: test_get_agent_list.4
|
||||||
|
dict({
|
||||||
|
'agents': list([
|
||||||
|
dict({
|
||||||
|
'id': 'homeassistant',
|
||||||
|
'name': 'Home Assistant',
|
||||||
|
'supported_languages': list([
|
||||||
|
'de',
|
||||||
|
'de-CH',
|
||||||
|
]),
|
||||||
|
}),
|
||||||
|
dict({
|
||||||
|
'id': 'mock-entry',
|
||||||
|
'name': 'Mock Title',
|
||||||
|
'supported_languages': list([
|
||||||
|
]),
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
})
|
||||||
|
# ---
|
||||||
|
# name: test_get_agent_list.5
|
||||||
|
dict({
|
||||||
|
'agents': list([
|
||||||
|
dict({
|
||||||
|
'id': 'homeassistant',
|
||||||
|
'name': 'Home Assistant',
|
||||||
|
'supported_languages': list([
|
||||||
|
'de',
|
||||||
|
'de-CH',
|
||||||
|
]),
|
||||||
|
}),
|
||||||
|
dict({
|
||||||
|
'id': 'mock-entry',
|
||||||
|
'name': 'Mock Title',
|
||||||
|
'supported_languages': list([
|
||||||
|
]),
|
||||||
}),
|
}),
|
||||||
]),
|
]),
|
||||||
})
|
})
|
||||||
|
@ -1612,6 +1612,22 @@ async def test_get_agent_list(
|
|||||||
assert msg["success"]
|
assert msg["success"]
|
||||||
assert msg["result"] == snapshot
|
assert msg["result"] == snapshot
|
||||||
|
|
||||||
|
await client.send_json_auto_id(
|
||||||
|
{"type": "conversation/agent/list", "language": "de"}
|
||||||
|
)
|
||||||
|
msg = await client.receive_json()
|
||||||
|
assert msg["type"] == "result"
|
||||||
|
assert msg["success"]
|
||||||
|
assert msg["result"] == snapshot
|
||||||
|
|
||||||
|
await client.send_json_auto_id(
|
||||||
|
{"type": "conversation/agent/list", "language": "de", "country": "ch"}
|
||||||
|
)
|
||||||
|
msg = await client.receive_json()
|
||||||
|
assert msg["type"] == "result"
|
||||||
|
assert msg["success"]
|
||||||
|
assert msg["result"] == snapshot
|
||||||
|
|
||||||
|
|
||||||
async def test_get_agent_info(
|
async def test_get_agent_info(
|
||||||
hass: HomeAssistant, init_components, mock_agent, snapshot: SnapshotAssertion
|
hass: HomeAssistant, init_components, mock_agent, snapshot: SnapshotAssertion
|
||||||
|
Loading…
x
Reference in New Issue
Block a user