mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 12:17:07 +00:00
Handle unavailable input_select in Google Assistant (#38611)
This commit is contained in:
parent
6d0d5548e5
commit
881b6a831d
@ -1285,46 +1285,49 @@ class ModesTrait(_Trait):
|
|||||||
|
|
||||||
return features & media_player.SUPPORT_SELECT_SOUND_MODE
|
return features & media_player.SUPPORT_SELECT_SOUND_MODE
|
||||||
|
|
||||||
|
def _generate(self, name, settings):
|
||||||
|
"""Generate a list of modes."""
|
||||||
|
mode = {
|
||||||
|
"name": name,
|
||||||
|
"name_values": [
|
||||||
|
{"name_synonym": self.SYNONYMS.get(name, [name]), "lang": "en"}
|
||||||
|
],
|
||||||
|
"settings": [],
|
||||||
|
"ordered": False,
|
||||||
|
}
|
||||||
|
for setting in settings:
|
||||||
|
mode["settings"].append(
|
||||||
|
{
|
||||||
|
"setting_name": setting,
|
||||||
|
"setting_values": [
|
||||||
|
{
|
||||||
|
"setting_synonym": self.SYNONYMS.get(setting, [setting]),
|
||||||
|
"lang": "en",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return mode
|
||||||
|
|
||||||
def sync_attributes(self):
|
def sync_attributes(self):
|
||||||
"""Return mode attributes for a sync request."""
|
"""Return mode attributes for a sync request."""
|
||||||
|
|
||||||
def _generate(name, settings):
|
|
||||||
mode = {
|
|
||||||
"name": name,
|
|
||||||
"name_values": [
|
|
||||||
{"name_synonym": self.SYNONYMS.get(name, [name]), "lang": "en"}
|
|
||||||
],
|
|
||||||
"settings": [],
|
|
||||||
"ordered": False,
|
|
||||||
}
|
|
||||||
for setting in settings:
|
|
||||||
mode["settings"].append(
|
|
||||||
{
|
|
||||||
"setting_name": setting,
|
|
||||||
"setting_values": [
|
|
||||||
{
|
|
||||||
"setting_synonym": self.SYNONYMS.get(
|
|
||||||
setting, [setting]
|
|
||||||
),
|
|
||||||
"lang": "en",
|
|
||||||
}
|
|
||||||
],
|
|
||||||
}
|
|
||||||
)
|
|
||||||
return mode
|
|
||||||
|
|
||||||
attrs = self.state.attributes
|
|
||||||
modes = []
|
modes = []
|
||||||
if self.state.domain == media_player.DOMAIN:
|
|
||||||
if media_player.ATTR_SOUND_MODE_LIST in attrs:
|
for domain, attr, name in (
|
||||||
modes.append(
|
(media_player.DOMAIN, media_player.ATTR_SOUND_MODE_LIST, "sound mode"),
|
||||||
_generate("sound mode", attrs[media_player.ATTR_SOUND_MODE_LIST])
|
(input_select.DOMAIN, input_select.ATTR_OPTIONS, "option"),
|
||||||
)
|
(humidifier.DOMAIN, humidifier.ATTR_AVAILABLE_MODES, "mode"),
|
||||||
elif self.state.domain == input_select.DOMAIN:
|
):
|
||||||
modes.append(_generate("option", attrs[input_select.ATTR_OPTIONS]))
|
if self.state.domain != domain:
|
||||||
elif self.state.domain == humidifier.DOMAIN:
|
continue
|
||||||
if humidifier.ATTR_AVAILABLE_MODES in attrs:
|
|
||||||
modes.append(_generate("mode", attrs[humidifier.ATTR_AVAILABLE_MODES]))
|
items = self.state.attributes.get(attr)
|
||||||
|
|
||||||
|
if items is not None:
|
||||||
|
modes.append(self._generate(name, items))
|
||||||
|
|
||||||
|
# Shortcut since all domains are currently unique
|
||||||
|
break
|
||||||
|
|
||||||
payload = {"availableModes": modes}
|
payload = {"availableModes": modes}
|
||||||
|
|
||||||
|
@ -337,8 +337,6 @@ async def test_execute(hass):
|
|||||||
const.SOURCE_CLOUD,
|
const.SOURCE_CLOUD,
|
||||||
)
|
)
|
||||||
|
|
||||||
print(result)
|
|
||||||
|
|
||||||
assert result == {
|
assert result == {
|
||||||
"requestId": REQ_ID,
|
"requestId": REQ_ID,
|
||||||
"payload": {
|
"payload": {
|
||||||
|
@ -1515,6 +1515,11 @@ async def test_modes_input_select(hass):
|
|||||||
assert helpers.get_google_type(input_select.DOMAIN, None) is not None
|
assert helpers.get_google_type(input_select.DOMAIN, None) is not None
|
||||||
assert trait.ModesTrait.supported(input_select.DOMAIN, None, None)
|
assert trait.ModesTrait.supported(input_select.DOMAIN, None, None)
|
||||||
|
|
||||||
|
trt = trait.ModesTrait(
|
||||||
|
hass, State("input_select.bla", "unavailable"), BASIC_CONFIG,
|
||||||
|
)
|
||||||
|
assert trt.sync_attributes() == {"availableModes": []}
|
||||||
|
|
||||||
trt = trait.ModesTrait(
|
trt = trait.ModesTrait(
|
||||||
hass,
|
hass,
|
||||||
State(
|
State(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user