104 lines
2.7 KiB
Python
104 lines
2.7 KiB
Python
"""TemplateEntity utility class."""
|
|
from __future__ import annotations
|
|
|
|
import itertools
|
|
from typing import Any
|
|
|
|
import voluptuous as vol
|
|
|
|
from homeassistant.const import (
|
|
CONF_ENTITY_PICTURE_TEMPLATE,
|
|
CONF_FRIENDLY_NAME,
|
|
CONF_ICON,
|
|
CONF_ICON_TEMPLATE,
|
|
CONF_NAME,
|
|
)
|
|
import homeassistant.helpers.config_validation as cv
|
|
from homeassistant.helpers.template import Template
|
|
from homeassistant.helpers.template_entity import ( # noqa: F401 pylint: disable=unused-import
|
|
TEMPLATE_ENTITY_BASE_SCHEMA,
|
|
TemplateEntity,
|
|
)
|
|
|
|
from .const import (
|
|
CONF_ATTRIBUTE_TEMPLATES,
|
|
CONF_ATTRIBUTES,
|
|
CONF_AVAILABILITY,
|
|
CONF_AVAILABILITY_TEMPLATE,
|
|
CONF_PICTURE,
|
|
)
|
|
|
|
TEMPLATE_ENTITY_AVAILABILITY_SCHEMA = vol.Schema(
|
|
{
|
|
vol.Optional(CONF_AVAILABILITY): cv.template,
|
|
}
|
|
)
|
|
|
|
TEMPLATE_ENTITY_ICON_SCHEMA = vol.Schema(
|
|
{
|
|
vol.Optional(CONF_ICON): cv.template,
|
|
}
|
|
)
|
|
|
|
TEMPLATE_ENTITY_COMMON_SCHEMA = vol.Schema(
|
|
{
|
|
vol.Optional(CONF_ATTRIBUTES): vol.Schema({cv.string: cv.template}),
|
|
vol.Optional(CONF_AVAILABILITY): cv.template,
|
|
}
|
|
).extend(TEMPLATE_ENTITY_BASE_SCHEMA.schema)
|
|
|
|
TEMPLATE_ENTITY_ATTRIBUTES_SCHEMA_LEGACY = vol.Schema(
|
|
{
|
|
vol.Optional(CONF_ATTRIBUTE_TEMPLATES, default={}): vol.Schema(
|
|
{cv.string: cv.template}
|
|
),
|
|
}
|
|
)
|
|
|
|
TEMPLATE_ENTITY_AVAILABILITY_SCHEMA_LEGACY = vol.Schema(
|
|
{
|
|
vol.Optional(CONF_AVAILABILITY_TEMPLATE): cv.template,
|
|
}
|
|
)
|
|
|
|
TEMPLATE_ENTITY_COMMON_SCHEMA_LEGACY = vol.Schema(
|
|
{
|
|
vol.Optional(CONF_ENTITY_PICTURE_TEMPLATE): cv.template,
|
|
vol.Optional(CONF_ICON_TEMPLATE): cv.template,
|
|
}
|
|
).extend(TEMPLATE_ENTITY_AVAILABILITY_SCHEMA_LEGACY.schema)
|
|
|
|
|
|
LEGACY_FIELDS = {
|
|
CONF_ICON_TEMPLATE: CONF_ICON,
|
|
CONF_ENTITY_PICTURE_TEMPLATE: CONF_PICTURE,
|
|
CONF_AVAILABILITY_TEMPLATE: CONF_AVAILABILITY,
|
|
CONF_ATTRIBUTE_TEMPLATES: CONF_ATTRIBUTES,
|
|
CONF_FRIENDLY_NAME: CONF_NAME,
|
|
}
|
|
|
|
|
|
def rewrite_common_legacy_to_modern_conf(
|
|
entity_cfg: dict[str, Any], extra_legacy_fields: dict[str, str] | None = None
|
|
) -> dict[str, Any]:
|
|
"""Rewrite legacy config."""
|
|
entity_cfg = {**entity_cfg}
|
|
if extra_legacy_fields is None:
|
|
extra_legacy_fields = {}
|
|
|
|
for from_key, to_key in itertools.chain(
|
|
LEGACY_FIELDS.items(), extra_legacy_fields.items()
|
|
):
|
|
if from_key not in entity_cfg or to_key in entity_cfg:
|
|
continue
|
|
|
|
val = entity_cfg.pop(from_key)
|
|
if isinstance(val, str):
|
|
val = Template(val)
|
|
entity_cfg[to_key] = val
|
|
|
|
if CONF_NAME in entity_cfg and isinstance(entity_cfg[CONF_NAME], str):
|
|
entity_cfg[CONF_NAME] = Template(entity_cfg[CONF_NAME])
|
|
|
|
return entity_cfg
|