From 3ec96f21d1d20de126ac317fa1b0a5c39f1eaac8 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Wed, 28 Jan 2026 13:03:27 +0100 Subject: [PATCH] Cleanup deprecated get access in Lovelace data (#161749) --- homeassistant/components/lovelace/__init__.py | 29 --------------- tests/components/lovelace/test_init.py | 36 ------------------- 2 files changed, 65 deletions(-) diff --git a/homeassistant/components/lovelace/__init__.py b/homeassistant/components/lovelace/__init__.py index 0519323d3d5..4e9442801df 100644 --- a/homeassistant/components/lovelace/__init__.py +++ b/homeassistant/components/lovelace/__init__.py @@ -21,7 +21,6 @@ from homeassistant.helpers import ( config_validation as cv, issue_registry as ir, ) -from homeassistant.helpers.frame import report_usage from homeassistant.helpers.service import async_register_admin_service from homeassistant.helpers.storage import Store from homeassistant.helpers.translation import async_get_translations @@ -109,34 +108,6 @@ class LovelaceData: resources: resources.ResourceYAMLCollection | resources.ResourceStorageCollection yaml_dashboards: dict[str | None, ConfigType] - def __getitem__(self, name: str) -> Any: - """Enable method for compatibility reason. - - Following migration from an untyped dict to a dataclass in - https://github.com/home-assistant/core/pull/136313 - """ - report_usage( - f"accessed lovelace_data['{name}'] instead of lovelace_data.{name}", - breaks_in_ha_version="2026.2", - exclude_integrations={DOMAIN}, - ) - return getattr(self, name) - - def get(self, name: str, default: Any = None) -> Any: - """Enable method for compatibility reason. - - Following migration from an untyped dict to a dataclass in - https://github.com/home-assistant/core/pull/136313 - """ - report_usage( - f"accessed lovelace_data.get('{name}') instead of lovelace_data.{name}", - breaks_in_ha_version="2026.2", - exclude_integrations={DOMAIN}, - ) - if hasattr(self, name): - return getattr(self, name) - return default - async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: """Set up the Lovelace commands.""" diff --git a/tests/components/lovelace/test_init.py b/tests/components/lovelace/test_init.py index 4c7cc96504b..14d93d8302f 100644 --- a/tests/components/lovelace/test_init.py +++ b/tests/components/lovelace/test_init.py @@ -7,7 +7,6 @@ from unittest.mock import MagicMock, patch import pytest from homeassistant.core import HomeAssistant -from homeassistant.helpers import frame from homeassistant.setup import async_setup_component from tests.typing import WebSocketGenerator @@ -97,38 +96,3 @@ async def test_create_dashboards_when_not_onboarded( response = await client.receive_json() assert response["success"] assert response["result"] == {"strategy": {"type": "map"}} - - -@pytest.mark.parametrize("integration_frame_path", ["custom_components/my_integration"]) -@pytest.mark.usefixtures("mock_integration_frame") -async def test_hass_data_compatibility( - hass: HomeAssistant, - caplog: pytest.LogCaptureFixture, -) -> None: - """Test compatibility for external access. - - See: - https://github.com/hacs/integration/blob/4a820e8b1b066bc54a1c9c61102038af6c030603 - /custom_components/hacs/repositories/plugin.py#L173 - """ - expected_prefix = ( - "Detected that custom integration 'my_integration' accessed lovelace_data" - ) - - assert await async_setup_component(hass, "lovelace", {}) - - assert (lovelace_data := hass.data.get("lovelace")) is not None - - # Direct access to resources is fine - assert lovelace_data.resources is not None - assert expected_prefix not in caplog.text - - # Dict compatibility logs warning - with patch.object(frame, "_REPORTED_INTEGRATIONS", set()): - assert lovelace_data["resources"] is not None - assert f"{expected_prefix}['resources']" in caplog.text - - # Dict get compatibility logs warning - with patch.object(frame, "_REPORTED_INTEGRATIONS", set()): - assert lovelace_data.get("resources") is not None - assert f"{expected_prefix}.get('resources')" in caplog.text