Remove support for deprecated light attributes from light scenes (#104254)

This commit is contained in:
Erik Montnemery 2023-11-21 07:51:41 +01:00 committed by GitHub
parent d4ca9843e2
commit 645f916cf4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 109 deletions

View File

@ -17,15 +17,10 @@ from homeassistant.core import Context, HomeAssistant, State
from . import ( from . import (
ATTR_BRIGHTNESS, ATTR_BRIGHTNESS,
ATTR_BRIGHTNESS_PCT,
ATTR_COLOR_MODE, ATTR_COLOR_MODE,
ATTR_COLOR_NAME,
ATTR_COLOR_TEMP, ATTR_COLOR_TEMP,
ATTR_EFFECT, ATTR_EFFECT,
ATTR_FLASH,
ATTR_HS_COLOR, ATTR_HS_COLOR,
ATTR_KELVIN,
ATTR_PROFILE,
ATTR_RGB_COLOR, ATTR_RGB_COLOR,
ATTR_RGBW_COLOR, ATTR_RGBW_COLOR,
ATTR_RGBWW_COLOR, ATTR_RGBWW_COLOR,
@ -40,13 +35,7 @@ _LOGGER = logging.getLogger(__name__)
VALID_STATES = {STATE_ON, STATE_OFF} VALID_STATES = {STATE_ON, STATE_OFF}
ATTR_GROUP = [ ATTR_GROUP = [ATTR_BRIGHTNESS, ATTR_EFFECT]
ATTR_BRIGHTNESS,
ATTR_BRIGHTNESS_PCT,
ATTR_EFFECT,
ATTR_FLASH,
ATTR_TRANSITION,
]
COLOR_GROUP = [ COLOR_GROUP = [
ATTR_HS_COLOR, ATTR_HS_COLOR,
@ -55,10 +44,6 @@ COLOR_GROUP = [
ATTR_RGBW_COLOR, ATTR_RGBW_COLOR,
ATTR_RGBWW_COLOR, ATTR_RGBWW_COLOR,
ATTR_XY_COLOR, ATTR_XY_COLOR,
# The following color attributes are deprecated
ATTR_PROFILE,
ATTR_COLOR_NAME,
ATTR_KELVIN,
] ]
@ -79,21 +64,6 @@ COLOR_MODE_TO_ATTRIBUTE = {
ColorMode.XY: ColorModeAttr(ATTR_XY_COLOR, ATTR_XY_COLOR), ColorMode.XY: ColorModeAttr(ATTR_XY_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. Invalid attributes are %s. Read the logs for further"
" details: https://www.home-assistant.io/integrations/scene/"
)
def _color_mode_same(cur_state: State, state: State) -> bool: def _color_mode_same(cur_state: State, state: State) -> bool:
"""Test if color_mode is same.""" """Test if color_mode is same."""
@ -124,11 +94,6 @@ async def _async_reproduce_state(
) )
return return
# Warn if deprecated attributes are used
deprecated_attrs = [attr for attr in state.attributes if attr in DEPRECATED_GROUP]
if deprecated_attrs:
_LOGGER.warning(DEPRECATION_WARNING, deprecated_attrs)
# Return if we are already at the right state. # Return if we are already at the right state.
if ( if (
cur_state.state == state.state cur_state.state == state.state

View File

@ -2,35 +2,24 @@
import pytest import pytest
from homeassistant.components import light from homeassistant.components import light
from homeassistant.components.light.reproduce_state import DEPRECATION_WARNING
from homeassistant.core import HomeAssistant, State from homeassistant.core import HomeAssistant, State
from homeassistant.helpers.state import async_reproduce_state from homeassistant.helpers.state import async_reproduce_state
from tests.common import async_mock_service from tests.common import async_mock_service
VALID_BRIGHTNESS = {"brightness": 180} VALID_BRIGHTNESS = {"brightness": 180}
VALID_FLASH = {"flash": "short"}
VALID_EFFECT = {"effect": "random"} VALID_EFFECT = {"effect": "random"}
VALID_TRANSITION = {"transition": 15}
VALID_COLOR_NAME = {"color_name": "red"}
VALID_COLOR_TEMP = {"color_temp": 240} VALID_COLOR_TEMP = {"color_temp": 240}
VALID_HS_COLOR = {"hs_color": (345, 75)} VALID_HS_COLOR = {"hs_color": (345, 75)}
VALID_KELVIN = {"kelvin": 4000}
VALID_PROFILE = {"profile": "relax"}
VALID_RGB_COLOR = {"rgb_color": (255, 63, 111)} VALID_RGB_COLOR = {"rgb_color": (255, 63, 111)}
VALID_RGBW_COLOR = {"rgbw_color": (255, 63, 111, 10)} VALID_RGBW_COLOR = {"rgbw_color": (255, 63, 111, 10)}
VALID_RGBWW_COLOR = {"rgbww_color": (255, 63, 111, 10, 20)} VALID_RGBWW_COLOR = {"rgbww_color": (255, 63, 111, 10, 20)}
VALID_XY_COLOR = {"xy_color": (0.59, 0.274)} VALID_XY_COLOR = {"xy_color": (0.59, 0.274)}
NONE_BRIGHTNESS = {"brightness": None} NONE_BRIGHTNESS = {"brightness": None}
NONE_FLASH = {"flash": None}
NONE_EFFECT = {"effect": None} NONE_EFFECT = {"effect": None}
NONE_TRANSITION = {"transition": None}
NONE_COLOR_NAME = {"color_name": None}
NONE_COLOR_TEMP = {"color_temp": None} NONE_COLOR_TEMP = {"color_temp": None}
NONE_HS_COLOR = {"hs_color": None} NONE_HS_COLOR = {"hs_color": None}
NONE_KELVIN = {"kelvin": None}
NONE_PROFILE = {"profile": None}
NONE_RGB_COLOR = {"rgb_color": None} NONE_RGB_COLOR = {"rgb_color": None}
NONE_RGBW_COLOR = {"rgbw_color": None} NONE_RGBW_COLOR = {"rgbw_color": None}
NONE_RGBWW_COLOR = {"rgbww_color": None} NONE_RGBWW_COLOR = {"rgbww_color": None}
@ -43,14 +32,9 @@ async def test_reproducing_states(
"""Test reproducing Light states.""" """Test reproducing Light states."""
hass.states.async_set("light.entity_off", "off", {}) hass.states.async_set("light.entity_off", "off", {})
hass.states.async_set("light.entity_bright", "on", VALID_BRIGHTNESS) hass.states.async_set("light.entity_bright", "on", VALID_BRIGHTNESS)
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_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_temp", "on", VALID_COLOR_TEMP)
hass.states.async_set("light.entity_hs", "on", VALID_HS_COLOR) 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_rgb", "on", VALID_RGB_COLOR)
hass.states.async_set("light.entity_xy", "on", VALID_XY_COLOR) hass.states.async_set("light.entity_xy", "on", VALID_XY_COLOR)
@ -63,14 +47,9 @@ async def test_reproducing_states(
[ [
State("light.entity_off", "off"), State("light.entity_off", "off"),
State("light.entity_bright", "on", VALID_BRIGHTNESS), State("light.entity_bright", "on", VALID_BRIGHTNESS),
State("light.entity_flash", "on", VALID_FLASH),
State("light.entity_effect", "on", VALID_EFFECT), 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_temp", "on", VALID_COLOR_TEMP),
State("light.entity_hs", "on", VALID_HS_COLOR), 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_rgb", "on", VALID_RGB_COLOR),
State("light.entity_xy", "on", VALID_XY_COLOR), State("light.entity_xy", "on", VALID_XY_COLOR),
], ],
@ -92,20 +71,15 @@ async def test_reproducing_states(
[ [
State("light.entity_xy", "off"), State("light.entity_xy", "off"),
State("light.entity_off", "on", VALID_BRIGHTNESS), State("light.entity_off", "on", VALID_BRIGHTNESS),
State("light.entity_bright", "on", VALID_FLASH), State("light.entity_bright", "on", VALID_EFFECT),
State("light.entity_flash", "on", VALID_EFFECT), State("light.entity_effect", "on", VALID_COLOR_TEMP),
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_temp", "on", VALID_HS_COLOR),
State("light.entity_hs", "on", VALID_KELVIN), State("light.entity_hs", "on", VALID_RGB_COLOR),
State("light.entity_kelvin", "on", VALID_PROFILE),
State("light.entity_profile", "on", VALID_RGB_COLOR),
State("light.entity_rgb", "on", VALID_XY_COLOR), State("light.entity_rgb", "on", VALID_XY_COLOR),
], ],
) )
assert len(turn_on_calls) == 11 assert len(turn_on_calls) == 6
expected_calls = [] expected_calls = []
@ -113,42 +87,22 @@ async def test_reproducing_states(
expected_off["entity_id"] = "light.entity_off" expected_off["entity_id"] = "light.entity_off"
expected_calls.append(expected_off) expected_calls.append(expected_off)
expected_bright = dict(VALID_FLASH) expected_bright = dict(VALID_EFFECT)
expected_bright["entity_id"] = "light.entity_bright" expected_bright["entity_id"] = "light.entity_bright"
expected_calls.append(expected_bright) expected_calls.append(expected_bright)
expected_flash = dict(VALID_EFFECT) expected_effect = dict(VALID_COLOR_TEMP)
expected_flash["entity_id"] = "light.entity_flash"
expected_calls.append(expected_flash)
expected_effect = dict(VALID_TRANSITION)
expected_effect["entity_id"] = "light.entity_effect" expected_effect["entity_id"] = "light.entity_effect"
expected_calls.append(expected_effect) expected_calls.append(expected_effect)
expected_trans = dict(VALID_COLOR_NAME)
expected_trans["entity_id"] = "light.entity_trans"
expected_calls.append(expected_trans)
expected_name = dict(VALID_COLOR_TEMP)
expected_name["entity_id"] = "light.entity_name"
expected_calls.append(expected_name)
expected_temp = dict(VALID_HS_COLOR) expected_temp = dict(VALID_HS_COLOR)
expected_temp["entity_id"] = "light.entity_temp" expected_temp["entity_id"] = "light.entity_temp"
expected_calls.append(expected_temp) expected_calls.append(expected_temp)
expected_hs = dict(VALID_KELVIN) expected_hs = dict(VALID_RGB_COLOR)
expected_hs["entity_id"] = "light.entity_hs" expected_hs["entity_id"] = "light.entity_hs"
expected_calls.append(expected_hs) expected_calls.append(expected_hs)
expected_kelvin = dict(VALID_PROFILE)
expected_kelvin["entity_id"] = "light.entity_kelvin"
expected_calls.append(expected_kelvin)
expected_profile = dict(VALID_RGB_COLOR)
expected_profile["entity_id"] = "light.entity_profile"
expected_calls.append(expected_profile)
expected_rgb = dict(VALID_XY_COLOR) expected_rgb = dict(VALID_XY_COLOR)
expected_rgb["entity_id"] = "light.entity_rgb" expected_rgb["entity_id"] = "light.entity_rgb"
expected_calls.append(expected_rgb) expected_calls.append(expected_rgb)
@ -191,10 +145,8 @@ async def test_filter_color_modes(
"""Test filtering of parameters according to color mode.""" """Test filtering of parameters according to color mode."""
hass.states.async_set("light.entity", "off", {}) hass.states.async_set("light.entity", "off", {})
all_colors = { all_colors = {
**VALID_COLOR_NAME,
**VALID_COLOR_TEMP, **VALID_COLOR_TEMP,
**VALID_HS_COLOR, **VALID_HS_COLOR,
**VALID_KELVIN,
**VALID_RGB_COLOR, **VALID_RGB_COLOR,
**VALID_RGBW_COLOR, **VALID_RGBW_COLOR,
**VALID_RGBWW_COLOR, **VALID_RGBWW_COLOR,
@ -240,31 +192,13 @@ async def test_filter_color_modes(
assert len(turn_on_calls) == 1 assert len(turn_on_calls) == 1
async def test_deprecation_warning(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test deprecation warning."""
hass.states.async_set("light.entity_off", "off", {})
turn_on_calls = async_mock_service(hass, "light", "turn_on")
await async_reproduce_state(
hass, [State("light.entity_off", "on", {"brightness_pct": 80})]
)
assert len(turn_on_calls) == 1
assert DEPRECATION_WARNING % ["brightness_pct"] in caplog.text
@pytest.mark.parametrize( @pytest.mark.parametrize(
"saved_state", "saved_state",
( (
NONE_BRIGHTNESS, NONE_BRIGHTNESS,
NONE_FLASH,
NONE_EFFECT, NONE_EFFECT,
NONE_TRANSITION,
NONE_COLOR_NAME,
NONE_COLOR_TEMP, NONE_COLOR_TEMP,
NONE_HS_COLOR, NONE_HS_COLOR,
NONE_KELVIN,
NONE_PROFILE,
NONE_RGB_COLOR, NONE_RGB_COLOR,
NONE_RGBW_COLOR, NONE_RGBW_COLOR,
NONE_RGBWW_COLOR, NONE_RGBWW_COLOR,