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
3 changed files with 138 additions and 10 deletions
|
@ -250,6 +250,7 @@ async def websocket_get_agent_info(
|
|||
{
|
||||
vol.Required("type"): "conversation/agent/list",
|
||||
vol.Optional("language"): str,
|
||||
vol.Optional("country"): str,
|
||||
}
|
||||
)
|
||||
@websocket_api.async_response
|
||||
|
@ -259,15 +260,20 @@ async def websocket_list_agents(
|
|||
"""List conversation agents and, optionally, if they support a given language."""
|
||||
manager = _get_agent_manager(hass)
|
||||
|
||||
country = msg.get("country")
|
||||
language = msg.get("language")
|
||||
agents = []
|
||||
|
||||
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:
|
||||
agent = await manager.async_get_agent(agent_info.id)
|
||||
agent_dict["language_supported"] = bool(
|
||||
language_util.matches(language, agent.supported_languages)
|
||||
agent_dict["supported_languages"] = language_util.matches(
|
||||
language, agent.supported_languages, country
|
||||
)
|
||||
agents.append(agent_dict)
|
||||
|
||||
|
|
|
@ -23,10 +23,67 @@
|
|||
dict({
|
||||
'id': 'homeassistant',
|
||||
'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({
|
||||
'id': 'mock-entry',
|
||||
'name': 'Mock Title',
|
||||
'supported_languages': list([
|
||||
'smurfish',
|
||||
]),
|
||||
}),
|
||||
]),
|
||||
})
|
||||
|
@ -36,13 +93,16 @@
|
|||
'agents': list([
|
||||
dict({
|
||||
'id': 'homeassistant',
|
||||
'language_supported': False,
|
||||
'name': 'Home Assistant',
|
||||
'supported_languages': list([
|
||||
]),
|
||||
}),
|
||||
dict({
|
||||
'id': 'mock-entry',
|
||||
'language_supported': True,
|
||||
'name': 'Mock Title',
|
||||
'supported_languages': list([
|
||||
'smurfish',
|
||||
]),
|
||||
}),
|
||||
]),
|
||||
})
|
||||
|
@ -52,13 +112,16 @@
|
|||
'agents': list([
|
||||
dict({
|
||||
'id': 'homeassistant',
|
||||
'language_supported': True,
|
||||
'name': 'Home Assistant',
|
||||
'supported_languages': list([
|
||||
'en',
|
||||
]),
|
||||
}),
|
||||
dict({
|
||||
'id': 'mock-entry',
|
||||
'language_supported': False,
|
||||
'name': 'Mock Title',
|
||||
'supported_languages': list([
|
||||
]),
|
||||
}),
|
||||
]),
|
||||
})
|
||||
|
@ -68,13 +131,56 @@
|
|||
'agents': list([
|
||||
dict({
|
||||
'id': 'homeassistant',
|
||||
'language_supported': True,
|
||||
'name': 'Home Assistant',
|
||||
'supported_languages': list([
|
||||
'en',
|
||||
]),
|
||||
}),
|
||||
dict({
|
||||
'id': 'mock-entry',
|
||||
'language_supported': False,
|
||||
'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["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(
|
||||
hass: HomeAssistant, init_components, mock_agent, snapshot: SnapshotAssertion
|
||||
|
|
Loading…
Add table
Reference in a new issue