From 0089d3efa1bb7a7b8dcd39ac2fbadd8ba73ccb2d Mon Sep 17 00:00:00 2001 From: karwosts <32912880+karwosts@users.noreply.github.com> Date: Mon, 11 Aug 2025 01:24:20 -0700 Subject: [PATCH] Support `multiple` for StateSelector (#146288) --- homeassistant/helpers/selector.py | 12 +++++++++--- tests/helpers/test_selector.py | 7 ++++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/homeassistant/helpers/selector.py b/homeassistant/helpers/selector.py index ad0c909003e..1003991ccec 100644 --- a/homeassistant/helpers/selector.py +++ b/homeassistant/helpers/selector.py @@ -1333,6 +1333,7 @@ class StateSelectorConfig(BaseSelectorConfig, total=False): entity_id: str hide_states: list[str] + multiple: bool @SELECTORS.register("state") @@ -1350,6 +1351,7 @@ class StateSelector(Selector[StateSelectorConfig]): # selectors into two types: one for state and one for attribute. # Limiting the public use, prevents breaking changes in the future. # vol.Optional("attribute"): str, + vol.Optional("multiple", default=False): cv.boolean, } ) @@ -1357,10 +1359,14 @@ class StateSelector(Selector[StateSelectorConfig]): """Instantiate a selector.""" super().__init__(config) - def __call__(self, data: Any) -> str: + def __call__(self, data: Any) -> str | list[str]: """Validate the passed selection.""" - state: str = vol.Schema(str)(data) - return state + if not self.config["multiple"]: + state: str = vol.Schema(str)(data) + return state + if not isinstance(data, list): + raise vol.Invalid("Value should be a list") + return [vol.Schema(str)(val) for val in data] class StatisticSelectorConfig(BaseSelectorConfig, total=False): diff --git a/tests/helpers/test_selector.py b/tests/helpers/test_selector.py index 50d9da501c5..7f5255a203b 100644 --- a/tests/helpers/test_selector.py +++ b/tests/helpers/test_selector.py @@ -563,7 +563,12 @@ def test_time_selector_schema(schema, valid_selections, invalid_selections) -> N ( {"entity_id": "sensor.abc"}, ("on", "armed"), - (None, True, 1), + (None, True, 1, ["on"]), + ), + ( + {"entity_id": "sensor.abc", "multiple": True}, + (["on"], ["on", "off"], []), + (None, True, 1, [True], [1], "on"), ), ( {"hide_states": ["unknown", "unavailable"]},