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:
Erik Montnemery 2023-04-20 14:58:43 +02:00 committed by GitHub
parent 768c499b6f
commit 0429b321b8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 138 additions and 10 deletions

View file

@ -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)

View file

@ -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([
]),
}),
]),
})

View file

@ -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