Allow use of Selector in ObjectSelector fields

This commit is contained in:
G Johansson 2025-07-02 06:41:39 +00:00
parent afb247c907
commit 0ccabe9f2c

View File

@ -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