mirror of
https://github.com/home-assistant/core.git
synced 2025-11-17 06:50:12 +00:00
110 lines
2.9 KiB
Python
110 lines
2.9 KiB
Python
"""Shared schemas for config entry and YAML config items."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import voluptuous as vol
|
|
|
|
from homeassistant.const import (
|
|
CONF_DEVICE_ID,
|
|
CONF_ENTITY_PICTURE_TEMPLATE,
|
|
CONF_ICON,
|
|
CONF_ICON_TEMPLATE,
|
|
CONF_NAME,
|
|
CONF_OPTIMISTIC,
|
|
CONF_UNIQUE_ID,
|
|
CONF_VARIABLES,
|
|
)
|
|
from homeassistant.helpers import config_validation as cv, selector
|
|
|
|
from .const import (
|
|
CONF_ATTRIBUTE_TEMPLATES,
|
|
CONF_ATTRIBUTES,
|
|
CONF_AVAILABILITY,
|
|
CONF_AVAILABILITY_TEMPLATE,
|
|
CONF_DEFAULT_ENTITY_ID,
|
|
CONF_PICTURE,
|
|
)
|
|
|
|
TEMPLATE_ENTITY_AVAILABILITY_SCHEMA = vol.Schema(
|
|
{
|
|
vol.Optional(CONF_AVAILABILITY): cv.template,
|
|
}
|
|
)
|
|
|
|
TEMPLATE_ENTITY_ATTRIBUTES_SCHEMA = vol.Schema(
|
|
{
|
|
vol.Optional(CONF_ATTRIBUTES): vol.Schema({cv.string: cv.template}),
|
|
}
|
|
)
|
|
|
|
TEMPLATE_ENTITY_COMMON_CONFIG_ENTRY_SCHEMA = vol.Schema(
|
|
{
|
|
vol.Required(CONF_NAME): cv.template,
|
|
vol.Optional(CONF_DEVICE_ID): selector.DeviceSelector(),
|
|
}
|
|
).extend(TEMPLATE_ENTITY_AVAILABILITY_SCHEMA.schema)
|
|
|
|
|
|
TEMPLATE_ENTITY_OPTIMISTIC_SCHEMA = {
|
|
vol.Optional(CONF_OPTIMISTIC): cv.boolean,
|
|
}
|
|
|
|
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)
|
|
|
|
|
|
def make_template_entity_base_schema(domain: str, default_name: str) -> vol.Schema:
|
|
"""Return a schema with default name."""
|
|
return vol.Schema(
|
|
{
|
|
vol.Optional(CONF_DEFAULT_ENTITY_ID): vol.All(
|
|
cv.entity_id, cv.entity_domain(domain)
|
|
),
|
|
vol.Optional(CONF_ICON): cv.template,
|
|
vol.Optional(CONF_NAME, default=default_name): cv.template,
|
|
vol.Optional(CONF_PICTURE): cv.template,
|
|
vol.Optional(CONF_UNIQUE_ID): cv.string,
|
|
}
|
|
)
|
|
|
|
|
|
def make_template_entity_common_modern_schema(
|
|
domain: str,
|
|
default_name: str,
|
|
) -> vol.Schema:
|
|
"""Return a schema with default name."""
|
|
return vol.Schema(
|
|
{
|
|
vol.Optional(CONF_AVAILABILITY): cv.template,
|
|
vol.Optional(CONF_VARIABLES): cv.SCRIPT_VARIABLES_SCHEMA,
|
|
}
|
|
).extend(make_template_entity_base_schema(domain, default_name).schema)
|
|
|
|
|
|
def make_template_entity_common_modern_attributes_schema(
|
|
domain: str,
|
|
default_name: str,
|
|
) -> vol.Schema:
|
|
"""Return a schema with default name."""
|
|
return make_template_entity_common_modern_schema(domain, default_name).extend(
|
|
TEMPLATE_ENTITY_ATTRIBUTES_SCHEMA.schema
|
|
)
|