Files
core/homeassistant/components/knx/storage/serialize.py
T

47 lines
1.5 KiB
Python

"""Custom serializer for KNX schemas."""
from typing import Any, cast
from probatio import UNSUPPORTED, to_field_list
from homeassistant.const import Platform
from homeassistant.helpers import selector
from .entity_store_schema import KNX_SCHEMA_FOR_PLATFORM
from .knx_selector import AllSerializeFirst, GroupSelectSchema, KNXSelectorBase
def knx_serializer(schema: Any) -> Any:
"""Serialize KNX schema."""
if isinstance(schema, GroupSelectSchema):
return [
cast(
dict[str, Any], # GroupSelectOption converts to a dict with subschema
to_field_list(option, custom_serializer=knx_serializer),
)
for option in schema.validators
]
if isinstance(schema, KNXSelectorBase):
result = schema.serialize()
if schema.serialize_subschema:
result["schema"] = to_field_list(
schema.schema, custom_serializer=knx_serializer
)
return result
if isinstance(schema, AllSerializeFirst):
return to_field_list(schema.validators[0], custom_serializer=knx_serializer)
if isinstance(schema, selector.Selector):
return schema.serialize() | {"type": "ha_selector"}
return UNSUPPORTED
def get_serialized_schema(
platform: Platform,
) -> dict[str, Any] | list[dict[str, Any]] | None:
"""Get the schema for a specific platform."""
if knx_schema := KNX_SCHEMA_FOR_PLATFORM.get(platform):
return to_field_list(knx_schema, custom_serializer=knx_serializer)
return None