From be88a1f14ad0b1be608bac17a4022bca1eeecbe9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20=C4=8Cerm=C3=A1k?= Date: Tue, 27 Jan 2026 16:35:34 +0100 Subject: [PATCH] Add app selector as replacement for addon selector (#161684) --- homeassistant/helpers/selector.py | 34 +++++++++++++++++++++++++------ tests/helpers/test_selector.py | 9 ++++++++ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/homeassistant/helpers/selector.py b/homeassistant/helpers/selector.py index a8a29f4e490..df5adf2da9f 100644 --- a/homeassistant/helpers/selector.py +++ b/homeassistant/helpers/selector.py @@ -243,18 +243,18 @@ class ActionSelector(Selector[ActionSelectorConfig]): return data -class AddonSelectorConfig(BaseSelectorConfig, total=False): - """Class to represent an addon selector config.""" +class AppSelectorConfig(BaseSelectorConfig, total=False): + """Class to represent an app selector config.""" name: str slug: str -@SELECTORS.register("addon") -class AddonSelector(Selector[AddonSelectorConfig]): - """Selector of a add-on.""" +@SELECTORS.register("app") +class AppSelector(Selector[AppSelectorConfig]): + """Selector of an app.""" - selector_type = "addon" + selector_type = "app" CONFIG_SCHEMA = make_selector_config_schema( { @@ -263,6 +263,28 @@ class AddonSelector(Selector[AddonSelectorConfig]): } ) + def __init__(self, config: AppSelectorConfig | None = None) -> None: + """Instantiate a selector.""" + super().__init__(config) + + def __call__(self, data: Any) -> str: + """Validate the passed selection.""" + app: str = vol.Schema(str)(data) + return app + + +# AddonSelectorConfig as an alias of AppSelectorConfig +AddonSelectorConfig = AppSelectorConfig + + +@SELECTORS.register("addon") +class AddonSelector(Selector[AddonSelectorConfig]): + """Selector of an add-on, kept for backward compatibility after add-ons -> apps rename.""" + + selector_type = "addon" + + CONFIG_SCHEMA = AppSelector.CONFIG_SCHEMA + def __init__(self, config: AddonSelectorConfig | None = None) -> None: """Instantiate a selector.""" super().__init__(config) diff --git a/tests/helpers/test_selector.py b/tests/helpers/test_selector.py index dc7e2637bd9..fba9018b698 100644 --- a/tests/helpers/test_selector.py +++ b/tests/helpers/test_selector.py @@ -487,6 +487,15 @@ def test_addon_selector_schema(schema, valid_selections, invalid_selections) -> _test_selector("addon", schema, valid_selections, invalid_selections) +@pytest.mark.parametrize( + ("schema", "valid_selections", "invalid_selections"), + [({}, ("abc123",), (None,))], +) +def test_app_selector_schema(schema, valid_selections, invalid_selections) -> None: + """Test app selector.""" + _test_selector("app", schema, valid_selections, invalid_selections) + + @pytest.mark.parametrize( ("schema", "valid_selections", "invalid_selections"), [({}, ("abc123", "/backup"), (None, "abc@123", "abc 123", ""))],