From 5be48affcf0ba2d53d6119acdd34fd998cbc1127 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Wed, 8 Apr 2026 12:15:59 +0200 Subject: [PATCH] Use runtime_data in rova integration (#167661) Co-authored-by: Claude Opus 4.6 (1M context) --- homeassistant/components/rova/__init__.py | 15 +++++---------- homeassistant/components/rova/coordinator.py | 6 ++++-- homeassistant/components/rova/sensor.py | 7 +++---- tests/components/rova/test_init.py | 2 +- 4 files changed, 13 insertions(+), 17 deletions(-) diff --git a/homeassistant/components/rova/__init__.py b/homeassistant/components/rova/__init__.py index ecde0578772..dc78ec66104 100644 --- a/homeassistant/components/rova/__init__.py +++ b/homeassistant/components/rova/__init__.py @@ -5,19 +5,18 @@ from __future__ import annotations from requests.exceptions import ConnectTimeout, HTTPError from rova.rova import Rova -from homeassistant.config_entries import ConfigEntry from homeassistant.const import Platform from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryError, ConfigEntryNotReady from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue from .const import CONF_HOUSE_NUMBER, CONF_HOUSE_NUMBER_SUFFIX, CONF_ZIP_CODE, DOMAIN -from .coordinator import RovaCoordinator +from .coordinator import RovaConfigEntry, RovaCoordinator PLATFORMS: list[Platform] = [Platform.SENSOR] -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_setup_entry(hass: HomeAssistant, entry: RovaConfigEntry) -> bool: """Set up ROVA from a config entry.""" api = Rova( @@ -50,15 +49,11 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: await coordinator.async_config_entry_first_refresh() - hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator + entry.runtime_data = coordinator await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) return True -async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_unload_entry(hass: HomeAssistant, entry: RovaConfigEntry) -> bool: """Unload ROVA config entry.""" - - if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS): - hass.data[DOMAIN].pop(entry.entry_id) - - return unload_ok + return await hass.config_entries.async_unload_platforms(entry, PLATFORMS) diff --git a/homeassistant/components/rova/coordinator.py b/homeassistant/components/rova/coordinator.py index a48048d32c3..4240d4f3a46 100644 --- a/homeassistant/components/rova/coordinator.py +++ b/homeassistant/components/rova/coordinator.py @@ -11,16 +11,18 @@ from homeassistant.util.dt import get_time_zone from .const import DOMAIN, LOGGER +type RovaConfigEntry = ConfigEntry[RovaCoordinator] + EUROPE_AMSTERDAM_ZONE_INFO = get_time_zone("Europe/Amsterdam") class RovaCoordinator(DataUpdateCoordinator[dict[str, datetime]]): """Class to manage fetching Rova data.""" - config_entry: ConfigEntry + config_entry: RovaConfigEntry def __init__( - self, hass: HomeAssistant, config_entry: ConfigEntry, api: Rova + self, hass: HomeAssistant, config_entry: RovaConfigEntry, api: Rova ) -> None: """Initialize.""" super().__init__( diff --git a/homeassistant/components/rova/sensor.py b/homeassistant/components/rova/sensor.py index 59f9f28f8f5..a14e7016bb0 100644 --- a/homeassistant/components/rova/sensor.py +++ b/homeassistant/components/rova/sensor.py @@ -9,14 +9,13 @@ from homeassistant.components.sensor import ( SensorEntity, SensorEntityDescription, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.update_coordinator import CoordinatorEntity from .const import DOMAIN -from .coordinator import RovaCoordinator +from .coordinator import RovaConfigEntry, RovaCoordinator ISSUE_PLACEHOLDER = {"url": "/config/integrations/dashboard/add?domain=rova"} @@ -42,11 +41,11 @@ SENSOR_TYPES: tuple[SensorEntityDescription, ...] = ( async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: RovaConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Add Rova entry.""" - coordinator: RovaCoordinator = hass.data[DOMAIN][entry.entry_id] + coordinator = entry.runtime_data assert entry.unique_id unique_id = entry.unique_id diff --git a/tests/components/rova/test_init.py b/tests/components/rova/test_init.py index 5441a730bf6..cccfb32a083 100644 --- a/tests/components/rova/test_init.py +++ b/tests/components/rova/test_init.py @@ -6,7 +6,7 @@ import pytest from requests import ConnectTimeout from syrupy.assertion import SnapshotAssertion -from homeassistant.components.rova import DOMAIN +from homeassistant.components.rova.const import DOMAIN from homeassistant.config_entries import ConfigEntryState from homeassistant.const import Platform from homeassistant.core import HomeAssistant