From 597045149f0c0ffbf8c40fe6803781fb3fc76ba5 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Thu, 16 Dec 2021 17:11:27 +0100 Subject: [PATCH] Minor refactor of template select (#62091) --- homeassistant/components/template/select.py | 77 ++++++++------------- 1 file changed, 29 insertions(+), 48 deletions(-) diff --git a/homeassistant/components/template/select.py b/homeassistant/components/template/select.py index c3312ac2375..074dda8f4fb 100644 --- a/homeassistant/components/template/select.py +++ b/homeassistant/components/template/select.py @@ -13,22 +13,20 @@ from homeassistant.components.select.const import ( ATTR_OPTIONS, DOMAIN as SELECT_DOMAIN, ) -from homeassistant.const import ( - CONF_ICON, - CONF_NAME, - CONF_OPTIMISTIC, - CONF_STATE, - CONF_UNIQUE_ID, -) +from homeassistant.const import CONF_NAME, CONF_OPTIMISTIC, CONF_STATE, CONF_UNIQUE_ID from homeassistant.core import Config, HomeAssistant import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.script import Script -from homeassistant.helpers.template import Template, TemplateError +from homeassistant.helpers.template import TemplateError from . import TriggerUpdateCoordinator -from .const import CONF_AVAILABILITY, DOMAIN -from .template_entity import TemplateEntity +from .const import DOMAIN +from .template_entity import ( + TEMPLATE_ENTITY_AVAILABILITY_SCHEMA, + TEMPLATE_ENTITY_ICON_SCHEMA, + TemplateEntity, +) from .trigger_entity import TriggerEntity _LOGGER = logging.getLogger(__name__) @@ -38,17 +36,19 @@ CONF_SELECT_OPTION = "select_option" DEFAULT_NAME = "Template Select" DEFAULT_OPTIMISTIC = False -SELECT_SCHEMA = vol.Schema( - { - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.template, - vol.Required(CONF_STATE): cv.template, - vol.Required(CONF_SELECT_OPTION): cv.SCRIPT_SCHEMA, - vol.Required(ATTR_OPTIONS): cv.template, - vol.Optional(CONF_AVAILABILITY): cv.template, - vol.Optional(CONF_OPTIMISTIC, default=DEFAULT_OPTIMISTIC): cv.boolean, - vol.Optional(CONF_UNIQUE_ID): cv.string, - vol.Optional(CONF_ICON): cv.template, - } +SELECT_SCHEMA = ( + vol.Schema( + { + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.template, + vol.Required(CONF_STATE): cv.template, + vol.Required(CONF_SELECT_OPTION): cv.SCRIPT_SCHEMA, + vol.Required(ATTR_OPTIONS): cv.template, + vol.Optional(CONF_OPTIMISTIC, default=DEFAULT_OPTIMISTIC): cv.boolean, + vol.Optional(CONF_UNIQUE_ID): cv.string, + } + ) + .extend(TEMPLATE_ENTITY_AVAILABILITY_SCHEMA.schema) + .extend(TEMPLATE_ENTITY_ICON_SCHEMA.schema) ) @@ -61,19 +61,7 @@ async def _async_create_entities( unique_id = definition.get(CONF_UNIQUE_ID) if unique_id and unique_id_prefix: unique_id = f"{unique_id_prefix}-{unique_id}" - entities.append( - TemplateSelect( - hass, - definition.get(CONF_NAME, DEFAULT_NAME), - definition[CONF_STATE], - definition.get(CONF_AVAILABILITY), - definition[CONF_SELECT_OPTION], - definition[ATTR_OPTIONS], - definition.get(CONF_OPTIMISTIC, DEFAULT_OPTIMISTIC), - unique_id, - definition.get(CONF_ICON), - ) - ) + entities.append(TemplateSelect(hass, definition, unique_id)) return entities @@ -110,30 +98,23 @@ class TemplateSelect(TemplateEntity, SelectEntity): def __init__( self, hass: HomeAssistant, - name_template: Template | None, - value_template: Template, - availability_template: Template | None, - command_select_option: dict[str, Any], - options_template: Template, - optimistic: bool, + config: dict[str, Any], unique_id: str | None, - icon_template: Template | None, ) -> None: """Initialize the select.""" - super().__init__( - availability_template=availability_template, icon_template=icon_template - ) + super().__init__(config=config) self._attr_name = DEFAULT_NAME + name_template = config[CONF_NAME] name_template.hass = hass with contextlib.suppress(TemplateError): self._attr_name = name_template.async_render(parse_result=False) self._name_template = name_template - self._value_template = value_template + self._value_template = config[CONF_STATE] self._command_select_option = Script( - hass, command_select_option, self._attr_name, DOMAIN + hass, config[CONF_SELECT_OPTION], self._attr_name, DOMAIN ) - self._options_template = options_template - self._attr_assumed_state = self._optimistic = optimistic + self._options_template = config[ATTR_OPTIONS] + self._attr_assumed_state = self._optimistic = config[CONF_OPTIMISTIC] self._attr_unique_id = unique_id self._attr_options = None self._attr_current_option = None