Add schema supports to object selector

This commit is contained in:
Paul Bottein
2025-06-20 11:17:18 +02:00
parent 956f726ef3
commit 272837205c
2 changed files with 42 additions and 2 deletions

View File

@@ -1113,9 +1113,21 @@ class NumberSelector(Selector[NumberSelectorConfig]):
return value
class ObjectSchemaDict(TypedDict):
"""Class to represent a select option dict."""
name: str
selector: dict[str, Any]
class ObjectSelectorConfig(BaseSelectorConfig):
"""Class to represent an object selector config."""
schema: list[ObjectSchemaDict]
multiple: bool
label_key: str
description: bool
@SELECTORS.register("object")
class ObjectSelector(Selector[ObjectSelectorConfig]):
@@ -1123,7 +1135,19 @@ class ObjectSelector(Selector[ObjectSelectorConfig]):
selector_type = "object"
CONFIG_SCHEMA = BASE_SELECTOR_CONFIG_SCHEMA
CONFIG_SCHEMA = BASE_SELECTOR_CONFIG_SCHEMA.extend(
{
vol.Optional("schema"): [
{
vol.Required("name"): str,
vol.Required("selector"): dict,
}
],
vol.Optional("label_key"): str,
vol.Optional("description_key"): str,
vol.Optional("multiple", default=False): bool,
}
)
def __init__(self, config: ObjectSelectorConfig | None = None) -> None:
"""Instantiate a selector."""

View File

@@ -590,7 +590,23 @@ def test_action_selector_schema(schema, valid_selections, invalid_selections) ->
@pytest.mark.parametrize(
("schema", "valid_selections", "invalid_selections"),
[({}, ("abc123",), ())],
[
({}, ("abc123",), ()),
(
{
"schema": [
{"name": "name", "selector": {"text": {}}},
{"name": "percentage", "selector": {"number": {}}},
],
"multiple": True,
"label_key": "name",
"description_key": "percentage",
},
(),
(),
),
],
[],
)
def test_object_selector_schema(schema, valid_selections, invalid_selections) -> None:
"""Test object selector."""