From 0ccabe9f2c9833ee34a5841702ea9667f3b84047 Mon Sep 17 00:00:00 2001 From: G Johansson Date: Wed, 2 Jul 2025 06:41:39 +0000 Subject: [PATCH] Allow use of Selector in ObjectSelector fields --- homeassistant/helpers/selector.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/homeassistant/helpers/selector.py b/homeassistant/helpers/selector.py index e4277aac98e..b3bdba39d91 100644 --- a/homeassistant/helpers/selector.py +++ b/homeassistant/helpers/selector.py @@ -3,6 +3,7 @@ from __future__ import annotations from collections.abc import Callable, Mapping, Sequence +from copy import deepcopy from enum import StrEnum from functools import cache import importlib @@ -1133,7 +1134,7 @@ class ObjectSelectorField(TypedDict): label: str required: bool - selector: dict[str, Any] + selector: Required[Selector | dict[str, Any]] class ObjectSelectorConfig(BaseSelectorConfig): @@ -1142,7 +1143,7 @@ class ObjectSelectorConfig(BaseSelectorConfig): fields: dict[str, ObjectSelectorField] multiple: bool label_field: str - description_field: bool + description_field: str translation_key: str @@ -1156,7 +1157,7 @@ class ObjectSelector(Selector[ObjectSelectorConfig]): { vol.Optional("fields"): { str: { - vol.Required("selector"): dict, + vol.Required("selector"): vol.Any(Selector, dict), vol.Optional("required"): bool, vol.Optional("label"): str, } @@ -1172,6 +1173,17 @@ class ObjectSelector(Selector[ObjectSelectorConfig]): """Instantiate a selector.""" super().__init__(config) + def serialize(self) -> dict[str, dict[str, ObjectSelectorConfig]]: + """Serialize ObjectSelector for voluptuous_serialize.""" + _config = deepcopy(self.config) + if "fields" in _config: + for items in _config["fields"].values(): + if isinstance(items["selector"], Selector): + items["selector"] = { + items["selector"].selector_type: items["selector"].config + } + return {"selector": {self.selector_type: _config}} + def __call__(self, data: Any) -> Any: """Validate the passed selection.""" return data