From 7b86f0f9265dc8cdcf7ed92c0db7340604134569 Mon Sep 17 00:00:00 2001 From: Santobert Date: Tue, 5 Nov 2019 15:43:50 +0100 Subject: [PATCH] Add deprecated attributes to light.reproduce_state (#28557) * Add deprecated attributes to light.reproduce_state * Add blank line * fix minor bug * Typo --- .../components/light/reproduce_state.py | 42 +++++++++++- .../components/light/test_reproduce_state.py | 66 +++++++++++++++++-- 2 files changed, 99 insertions(+), 9 deletions(-) diff --git a/homeassistant/components/light/reproduce_state.py b/homeassistant/components/light/reproduce_state.py index ae618f7a8ef..c84b3627bed 100644 --- a/homeassistant/components/light/reproduce_state.py +++ b/homeassistant/components/light/reproduce_state.py @@ -17,10 +17,16 @@ from homeassistant.helpers.typing import HomeAssistantType from . import ( DOMAIN, ATTR_BRIGHTNESS, + ATTR_BRIGHTNESS_PCT, + ATTR_COLOR_NAME, ATTR_COLOR_TEMP, ATTR_EFFECT, + ATTR_FLASH, ATTR_HS_COLOR, + ATTR_KELVIN, + ATTR_PROFILE, ATTR_RGB_COLOR, + ATTR_TRANSITION, ATTR_WHITE_VALUE, ATTR_XY_COLOR, ) @@ -28,8 +34,36 @@ from . import ( _LOGGER = logging.getLogger(__name__) VALID_STATES = {STATE_ON, STATE_OFF} -ATTR_GROUP = [ATTR_BRIGHTNESS, ATTR_EFFECT, ATTR_WHITE_VALUE] -COLOR_GROUP = [ATTR_COLOR_TEMP, ATTR_HS_COLOR, ATTR_RGB_COLOR, ATTR_XY_COLOR] + +ATTR_GROUP = [ + ATTR_BRIGHTNESS, + ATTR_BRIGHTNESS_PCT, + ATTR_EFFECT, + ATTR_FLASH, + ATTR_WHITE_VALUE, + ATTR_TRANSITION, +] + +COLOR_GROUP = [ + ATTR_COLOR_NAME, + ATTR_COLOR_TEMP, + ATTR_HS_COLOR, + ATTR_KELVIN, + ATTR_PROFILE, + ATTR_RGB_COLOR, + ATTR_XY_COLOR, +] + +DEPRECATED_GROUP = [ + ATTR_BRIGHTNESS_PCT, + ATTR_COLOR_NAME, + ATTR_FLASH, + ATTR_KELVIN, + ATTR_PROFILE, + ATTR_TRANSITION, +] + +DEPRECATION_WARNING = "The use of other attributes than device state attributes is deprecated and will be removed in a future release. Read the logs for further details: https://www.home-assistant.io/integrations/scene/" async def _async_reproduce_state( @@ -48,6 +82,10 @@ async def _async_reproduce_state( ) return + # Warn if deprecated attributes are used + if any(attr in DEPRECATED_GROUP for attr in state.attributes): + _LOGGER.warning(DEPRECATION_WARNING) + # Return if we are already at the right state. if cur_state.state == state.state and all( check_attr_equal(cur_state.attributes, state.attributes, attr) diff --git a/tests/components/light/test_reproduce_state.py b/tests/components/light/test_reproduce_state.py index 92790890a4c..250a0fe26a8 100644 --- a/tests/components/light/test_reproduce_state.py +++ b/tests/components/light/test_reproduce_state.py @@ -1,13 +1,19 @@ """Test reproduce state for Light.""" +from homeassistant.components.light.reproduce_state import DEPRECATION_WARNING from homeassistant.core import State from tests.common import async_mock_service VALID_BRIGHTNESS = {"brightness": 180} VALID_WHITE_VALUE = {"white_value": 200} +VALID_FLASH = {"flash": "short"} VALID_EFFECT = {"effect": "random"} +VALID_TRANSITION = {"transition": 15} +VALID_COLOR_NAME = {"color_name": "red"} VALID_COLOR_TEMP = {"color_temp": 240} VALID_HS_COLOR = {"hs_color": (345, 75)} +VALID_KELVIN = {"kelvin": 4000} +VALID_PROFILE = {"profile": "relax"} VALID_RGB_COLOR = {"rgb_color": (255, 63, 111)} VALID_XY_COLOR = {"xy_color": (0.59, 0.274)} @@ -17,9 +23,14 @@ async def test_reproducing_states(hass, caplog): hass.states.async_set("light.entity_off", "off", {}) hass.states.async_set("light.entity_bright", "on", VALID_BRIGHTNESS) hass.states.async_set("light.entity_white", "on", VALID_WHITE_VALUE) + hass.states.async_set("light.entity_flash", "on", VALID_FLASH) hass.states.async_set("light.entity_effect", "on", VALID_EFFECT) + hass.states.async_set("light.entity_trans", "on", VALID_TRANSITION) + hass.states.async_set("light.entity_name", "on", VALID_COLOR_NAME) hass.states.async_set("light.entity_temp", "on", VALID_COLOR_TEMP) hass.states.async_set("light.entity_hs", "on", VALID_HS_COLOR) + hass.states.async_set("light.entity_kelvin", "on", VALID_KELVIN) + hass.states.async_set("light.entity_profile", "on", VALID_PROFILE) hass.states.async_set("light.entity_rgb", "on", VALID_RGB_COLOR) hass.states.async_set("light.entity_xy", "on", VALID_XY_COLOR) @@ -32,9 +43,14 @@ async def test_reproducing_states(hass, caplog): State("light.entity_off", "off"), State("light.entity_bright", "on", VALID_BRIGHTNESS), State("light.entity_white", "on", VALID_WHITE_VALUE), + State("light.entity_flash", "on", VALID_FLASH), State("light.entity_effect", "on", VALID_EFFECT), + State("light.entity_trans", "on", VALID_TRANSITION), + State("light.entity_name", "on", VALID_COLOR_NAME), State("light.entity_temp", "on", VALID_COLOR_TEMP), State("light.entity_hs", "on", VALID_HS_COLOR), + State("light.entity_kelvin", "on", VALID_KELVIN), + State("light.entity_profile", "on", VALID_PROFILE), State("light.entity_rgb", "on", VALID_RGB_COLOR), State("light.entity_xy", "on", VALID_XY_COLOR), ], @@ -59,16 +75,21 @@ async def test_reproducing_states(hass, caplog): State("light.entity_xy", "off"), State("light.entity_off", "on", VALID_BRIGHTNESS), State("light.entity_bright", "on", VALID_WHITE_VALUE), - State("light.entity_white", "on", VALID_EFFECT), - State("light.entity_effect", "on", VALID_COLOR_TEMP), + State("light.entity_white", "on", VALID_FLASH), + State("light.entity_flash", "on", VALID_EFFECT), + State("light.entity_effect", "on", VALID_TRANSITION), + State("light.entity_trans", "on", VALID_COLOR_NAME), + State("light.entity_name", "on", VALID_COLOR_TEMP), State("light.entity_temp", "on", VALID_HS_COLOR), - State("light.entity_hs", "on", VALID_RGB_COLOR), + State("light.entity_hs", "on", VALID_KELVIN), + State("light.entity_kelvin", "on", VALID_PROFILE), + State("light.entity_profile", "on", VALID_RGB_COLOR), State("light.entity_rgb", "on", VALID_XY_COLOR), ], blocking=True, ) - assert len(turn_on_calls) == 7 + assert len(turn_on_calls) == 12 expected_calls = [] @@ -80,22 +101,42 @@ async def test_reproducing_states(hass, caplog): expected_bright["entity_id"] = "light.entity_bright" expected_calls.append(expected_bright) - expected_white = VALID_EFFECT + expected_white = VALID_FLASH expected_white["entity_id"] = "light.entity_white" expected_calls.append(expected_white) - expected_effect = VALID_COLOR_TEMP + expected_flash = VALID_EFFECT + expected_flash["entity_id"] = "light.entity_flash" + expected_calls.append(expected_flash) + + expected_effect = VALID_TRANSITION expected_effect["entity_id"] = "light.entity_effect" expected_calls.append(expected_effect) + expected_trans = VALID_COLOR_NAME + expected_trans["entity_id"] = "light.entity_trans" + expected_calls.append(expected_trans) + + expected_name = VALID_COLOR_TEMP + expected_name["entity_id"] = "light.entity_name" + expected_calls.append(expected_name) + expected_temp = VALID_HS_COLOR expected_temp["entity_id"] = "light.entity_temp" expected_calls.append(expected_temp) - expected_hs = VALID_RGB_COLOR + expected_hs = VALID_KELVIN expected_hs["entity_id"] = "light.entity_hs" expected_calls.append(expected_hs) + expected_kelvin = VALID_PROFILE + expected_kelvin["entity_id"] = "light.entity_kelvin" + expected_calls.append(expected_kelvin) + + expected_profile = VALID_RGB_COLOR + expected_profile["entity_id"] = "light.entity_profile" + expected_calls.append(expected_profile) + expected_rgb = VALID_XY_COLOR expected_rgb["entity_id"] = "light.entity_rgb" expected_calls.append(expected_rgb) @@ -115,3 +156,14 @@ async def test_reproducing_states(hass, caplog): assert len(turn_off_calls) == 1 assert turn_off_calls[0].domain == "light" assert turn_off_calls[0].data == {"entity_id": "light.entity_xy"} + + +async def test_deprecation_warning(hass, caplog): + """Test deprecation warning.""" + hass.states.async_set("light.entity_off", "off", {}) + turn_on_calls = async_mock_service(hass, "light", "turn_on") + await hass.helpers.state.async_reproduce_state( + [State("light.entity_off", "on", {"brightness_pct": 80})], blocking=True + ) + assert len(turn_on_calls) == 1 + assert DEPRECATION_WARNING in caplog.text