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,10 +1285,8 @@ class ModesTrait(_Trait):
|
||||
|
||||
return features & media_player.SUPPORT_SELECT_SOUND_MODE
|
||||
|
||||
def sync_attributes(self):
|
||||
"""Return mode attributes for a sync request."""
|
||||
|
||||
def _generate(name, settings):
|
||||
def _generate(self, name, settings):
|
||||
"""Generate a list of modes."""
|
||||
mode = {
|
||||
"name": name,
|
||||
"name_values": [
|
||||
@ -1303,9 +1301,7 @@ class ModesTrait(_Trait):
|
||||
"setting_name": setting,
|
||||
"setting_values": [
|
||||
{
|
||||
"setting_synonym": self.SYNONYMS.get(
|
||||
setting, [setting]
|
||||
),
|
||||
"setting_synonym": self.SYNONYMS.get(setting, [setting]),
|
||||
"lang": "en",
|
||||
}
|
||||
],
|
||||
@ -1313,18 +1309,25 @@ class ModesTrait(_Trait):
|
||||
)
|
||||
return mode
|
||||
|
||||
attrs = self.state.attributes
|
||||
def sync_attributes(self):
|
||||
"""Return mode attributes for a sync request."""
|
||||
modes = []
|
||||
if self.state.domain == media_player.DOMAIN:
|
||||
if media_player.ATTR_SOUND_MODE_LIST in attrs:
|
||||
modes.append(
|
||||
_generate("sound mode", attrs[media_player.ATTR_SOUND_MODE_LIST])
|
||||
)
|
||||
elif self.state.domain == input_select.DOMAIN:
|
||||
modes.append(_generate("option", attrs[input_select.ATTR_OPTIONS]))
|
||||
elif self.state.domain == humidifier.DOMAIN:
|
||||
if humidifier.ATTR_AVAILABLE_MODES in attrs:
|
||||
modes.append(_generate("mode", attrs[humidifier.ATTR_AVAILABLE_MODES]))
|
||||
|
||||
for domain, attr, name in (
|
||||
(media_player.DOMAIN, media_player.ATTR_SOUND_MODE_LIST, "sound mode"),
|
||||
(input_select.DOMAIN, input_select.ATTR_OPTIONS, "option"),
|
||||
(humidifier.DOMAIN, humidifier.ATTR_AVAILABLE_MODES, "mode"),
|
||||
):
|
||||
if self.state.domain != domain:
|
||||
continue
|
||||
|
||||
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}
|
||||
|
||||
|
@ -337,8 +337,6 @@ async def test_execute(hass):
|
||||
const.SOURCE_CLOUD,
|
||||
)
|
||||
|
||||
print(result)
|
||||
|
||||
assert result == {
|
||||
"requestId": REQ_ID,
|
||||
"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 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(
|
||||
hass,
|
||||
State(
|
||||
|
Loading…
x
Reference in New Issue
Block a user