From 426a620084c75e98804ea03266b86041819f62ed Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Wed, 17 Aug 2022 13:53:56 +0200 Subject: [PATCH] Remove deprecated white_value support from template light (#76923) --- homeassistant/components/template/light.py | 68 +--------------- tests/components/template/test_light.py | 93 ---------------------- 2 files changed, 2 insertions(+), 159 deletions(-) diff --git a/homeassistant/components/template/light.py b/homeassistant/components/template/light.py index f4ad971c1d6..f10e6c2ea09 100644 --- a/homeassistant/components/template/light.py +++ b/homeassistant/components/template/light.py @@ -12,12 +12,10 @@ from homeassistant.components.light import ( ATTR_EFFECT, ATTR_HS_COLOR, ATTR_TRANSITION, - ATTR_WHITE_VALUE, ENTITY_ID_FORMAT, SUPPORT_BRIGHTNESS, SUPPORT_COLOR, SUPPORT_COLOR_TEMP, - SUPPORT_WHITE_VALUE, LightEntity, LightEntityFeature, ) @@ -88,16 +86,14 @@ LIGHT_SCHEMA = vol.All( vol.Optional(CONF_TEMPERATURE_TEMPLATE): cv.template, vol.Optional(CONF_UNIQUE_ID): cv.string, vol.Optional(CONF_VALUE_TEMPLATE): cv.template, - vol.Optional(CONF_WHITE_VALUE_ACTION): cv.SCRIPT_SCHEMA, - vol.Optional(CONF_WHITE_VALUE_TEMPLATE): cv.template, } ).extend(TEMPLATE_ENTITY_COMMON_SCHEMA_LEGACY.schema), ) PLATFORM_SCHEMA = vol.All( # CONF_WHITE_VALUE_* is deprecated, support will be removed in release 2022.9 - cv.deprecated(CONF_WHITE_VALUE_ACTION), - cv.deprecated(CONF_WHITE_VALUE_TEMPLATE), + cv.removed(CONF_WHITE_VALUE_ACTION), + cv.removed(CONF_WHITE_VALUE_TEMPLATE), PLATFORM_SCHEMA.extend( {vol.Required(CONF_LIGHTS): cv.schema_with_slug_keys(LIGHT_SCHEMA)} ), @@ -171,12 +167,6 @@ class LightTemplate(TemplateEntity, LightEntity): if (color_action := config.get(CONF_COLOR_ACTION)) is not None: self._color_script = Script(hass, color_action, friendly_name, DOMAIN) self._color_template = config.get(CONF_COLOR_TEMPLATE) - self._white_value_script = None - if (white_value_action := config.get(CONF_WHITE_VALUE_ACTION)) is not None: - self._white_value_script = Script( - hass, white_value_action, friendly_name, DOMAIN - ) - self._white_value_template = config.get(CONF_WHITE_VALUE_TEMPLATE) self._effect_script = None if (effect_action := config.get(CONF_EFFECT_ACTION)) is not None: self._effect_script = Script(hass, effect_action, friendly_name, DOMAIN) @@ -190,7 +180,6 @@ class LightTemplate(TemplateEntity, LightEntity): self._brightness = None self._temperature = None self._color = None - self._white_value = None self._effect = None self._effect_list = None self._max_mireds = None @@ -223,11 +212,6 @@ class LightTemplate(TemplateEntity, LightEntity): return super().min_mireds - @property - def white_value(self) -> int | None: - """Return the white value.""" - return self._white_value - @property def hs_color(self) -> tuple[float, float] | None: """Return the hue and saturation color value [float, float].""" @@ -253,8 +237,6 @@ class LightTemplate(TemplateEntity, LightEntity): supported_features |= SUPPORT_COLOR_TEMP if self._color_script is not None: supported_features |= SUPPORT_COLOR - if self._white_value_script is not None: - supported_features |= SUPPORT_WHITE_VALUE if self._effect_script is not None: supported_features |= LightEntityFeature.EFFECT if self._supports_transition is True: @@ -312,14 +294,6 @@ class LightTemplate(TemplateEntity, LightEntity): self._update_color, none_on_template_error=True, ) - if self._white_value_template: - self.add_template_attribute( - "_white_value", - self._white_value_template, - None, - self._update_white_value, - none_on_template_error=True, - ) if self._effect_list_template: self.add_template_attribute( "_effect_list", @@ -361,13 +335,6 @@ class LightTemplate(TemplateEntity, LightEntity): self._brightness = kwargs[ATTR_BRIGHTNESS] optimistic_set = True - if self._white_value_template is None and ATTR_WHITE_VALUE in kwargs: - _LOGGER.debug( - "Optimistically setting white value to %s", kwargs[ATTR_WHITE_VALUE] - ) - self._white_value = kwargs[ATTR_WHITE_VALUE] - optimistic_set = True - if self._temperature_template is None and ATTR_COLOR_TEMP in kwargs: _LOGGER.debug( "Optimistically setting color temperature to %s", @@ -404,14 +371,6 @@ class LightTemplate(TemplateEntity, LightEntity): run_variables=common_params, context=self._context, ) - elif ATTR_WHITE_VALUE in kwargs and self._white_value_script: - common_params["white_value"] = kwargs[ATTR_WHITE_VALUE] - - await self.async_run_script( - self._white_value_script, - run_variables=common_params, - context=self._context, - ) elif ATTR_EFFECT in kwargs and self._effect_script: effect = kwargs[ATTR_EFFECT] if effect not in self._effect_list: @@ -486,29 +445,6 @@ class LightTemplate(TemplateEntity, LightEntity): ) self._brightness = None - @callback - def _update_white_value(self, white_value): - """Update the white value from the template.""" - try: - if white_value in (None, "None", ""): - self._white_value = None - return - if 0 <= int(white_value) <= 255: - self._white_value = int(white_value) - else: - _LOGGER.error( - "Received invalid white value: %s for entity %s. Expected: 0-255", - white_value, - self.entity_id, - ) - self._white_value = None - except ValueError: - _LOGGER.error( - "Template must supply an integer white_value from 0-255, or 'None'", - exc_info=True, - ) - self._white_value = None - @callback def _update_effect_list(self, effect_list): """Update the effect list from the template.""" diff --git a/tests/components/template/test_light.py b/tests/components/template/test_light.py index ca03c6f5d82..9b0ad613120 100644 --- a/tests/components/template/test_light.py +++ b/tests/components/template/test_light.py @@ -9,12 +9,10 @@ from homeassistant.components.light import ( ATTR_EFFECT, ATTR_HS_COLOR, ATTR_TRANSITION, - ATTR_WHITE_VALUE, SUPPORT_BRIGHTNESS, SUPPORT_COLOR, SUPPORT_COLOR_TEMP, SUPPORT_TRANSITION, - SUPPORT_WHITE_VALUE, ColorMode, LightEntityFeature, ) @@ -616,97 +614,6 @@ async def test_off_action_optimistic( assert state.attributes["supported_features"] == supported_features -@pytest.mark.parametrize("count", [1]) -@pytest.mark.parametrize( - "supported_features,supported_color_modes,expected_color_mode", - [(SUPPORT_WHITE_VALUE, [ColorMode.RGBW], ColorMode.UNKNOWN)], -) -@pytest.mark.parametrize( - "light_config", - [ - { - "test_template_light": { - **OPTIMISTIC_WHITE_VALUE_LIGHT_CONFIG, - "value_template": "{{1 == 1}}", - } - }, - ], -) -async def test_white_value_action_no_template( - hass, - setup_light, - calls, - supported_color_modes, - supported_features, - expected_color_mode, -): - """Test setting white value with optimistic template.""" - state = hass.states.get("light.test_template_light") - assert state.attributes.get("white_value") is None - - await hass.services.async_call( - light.DOMAIN, - SERVICE_TURN_ON, - {ATTR_ENTITY_ID: "light.test_template_light", ATTR_WHITE_VALUE: 124}, - blocking=True, - ) - - assert len(calls) == 1 - assert calls[-1].data["action"] == "set_white_value" - assert calls[-1].data["caller"] == "light.test_template_light" - assert calls[-1].data["white_value"] == 124 - - state = hass.states.get("light.test_template_light") - assert state.attributes.get("white_value") == 124 - assert state.state == STATE_ON - assert state.attributes["color_mode"] == expected_color_mode # hs_color is None - assert state.attributes["supported_color_modes"] == supported_color_modes - assert state.attributes["supported_features"] == supported_features - - -@pytest.mark.parametrize("count", [1]) -@pytest.mark.parametrize( - "supported_features,supported_color_modes,expected_color_mode", - [(SUPPORT_WHITE_VALUE, [ColorMode.RGBW], ColorMode.UNKNOWN)], -) -@pytest.mark.parametrize( - "expected_white_value,white_value_template", - [ - (255, "{{255}}"), - (None, "{{256}}"), - (None, "{{x-12}}"), - (None, "{{ none }}"), - (None, ""), - ], -) -async def test_white_value_template( - hass, - expected_white_value, - supported_features, - supported_color_modes, - expected_color_mode, - count, - white_value_template, -): - """Test the template for the white value.""" - light_config = { - "test_template_light": { - **OPTIMISTIC_WHITE_VALUE_LIGHT_CONFIG, - "value_template": "{{ 1 == 1 }}", - "white_value_template": white_value_template, - } - } - await async_setup_light(hass, count, light_config) - - state = hass.states.get("light.test_template_light") - assert state is not None - assert state.attributes.get("white_value") == expected_white_value - assert state.state == STATE_ON - assert state.attributes["color_mode"] == expected_color_mode # hs_color is None - assert state.attributes["supported_color_modes"] == supported_color_modes - assert state.attributes["supported_features"] == supported_features - - @pytest.mark.parametrize("count", [1]) @pytest.mark.parametrize( "supported_features,supported_color_modes,expected_color_mode",