From 3596771af16d12268828d04e155dfb8e1d7cf73a Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Tue, 31 Mar 2026 14:10:57 +0200 Subject: [PATCH] Migrate nzbget to use runtime_data (#166947) --- homeassistant/components/nzbget/__init__.py | 28 ++++++------------- homeassistant/components/nzbget/const.py | 4 --- .../components/nzbget/coordinator.py | 7 +++-- homeassistant/components/nzbget/sensor.py | 10 ++----- homeassistant/components/nzbget/services.py | 3 +- homeassistant/components/nzbget/switch.py | 12 +++----- 6 files changed, 21 insertions(+), 43 deletions(-) diff --git a/homeassistant/components/nzbget/__init__.py b/homeassistant/components/nzbget/__init__.py index 5060e6ad024..d24aaeb8620 100644 --- a/homeassistant/components/nzbget/__init__.py +++ b/homeassistant/components/nzbget/__init__.py @@ -1,13 +1,12 @@ """The NZBGet integration.""" -from homeassistant.config_entries import ConfigEntry from homeassistant.const import Platform from homeassistant.core import HomeAssistant from homeassistant.helpers import config_validation as cv from homeassistant.helpers.typing import ConfigType -from .const import DATA_COORDINATOR, DATA_UNDO_UPDATE_LISTENER, DOMAIN -from .coordinator import NZBGetDataUpdateCoordinator +from .const import DOMAIN +from .coordinator import NZBGetConfigEntry, NZBGetDataUpdateCoordinator from .services import async_setup_services CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN) @@ -22,37 +21,26 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: return True -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_setup_entry(hass: HomeAssistant, entry: NZBGetConfigEntry) -> bool: """Set up NZBGet from a config entry.""" - hass.data.setdefault(DOMAIN, {}) - coordinator = NZBGetDataUpdateCoordinator(hass, entry) await coordinator.async_config_entry_first_refresh() - undo_listener = entry.add_update_listener(_async_update_listener) + entry.runtime_data = coordinator - hass.data[DOMAIN][entry.entry_id] = { - DATA_COORDINATOR: coordinator, - DATA_UNDO_UPDATE_LISTENER: undo_listener, - } + entry.async_on_unload(entry.add_update_listener(_async_update_listener)) 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: NZBGetConfigEntry) -> bool: """Unload a config entry.""" - unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS) - - if unload_ok: - hass.data[DOMAIN][entry.entry_id][DATA_UNDO_UPDATE_LISTENER]() - hass.data[DOMAIN].pop(entry.entry_id) - - return unload_ok + return await hass.config_entries.async_unload_platforms(entry, PLATFORMS) -async def _async_update_listener(hass: HomeAssistant, entry: ConfigEntry) -> None: +async def _async_update_listener(hass: HomeAssistant, entry: NZBGetConfigEntry) -> None: """Handle options update.""" await hass.config_entries.async_reload(entry.entry_id) diff --git a/homeassistant/components/nzbget/const.py b/homeassistant/components/nzbget/const.py index 6742567bbf2..cc704e9ae86 100644 --- a/homeassistant/components/nzbget/const.py +++ b/homeassistant/components/nzbget/const.py @@ -5,10 +5,6 @@ DOMAIN = "nzbget" # Attributes ATTR_SPEED = "speed" -# Data -DATA_COORDINATOR = "coordinator" -DATA_UNDO_UPDATE_LISTENER = "undo_update_listener" - # Defaults DEFAULT_NAME = "NZBGet" DEFAULT_PORT = 6789 diff --git a/homeassistant/components/nzbget/coordinator.py b/homeassistant/components/nzbget/coordinator.py index 9e6b06da760..1fdad398d57 100644 --- a/homeassistant/components/nzbget/coordinator.py +++ b/homeassistant/components/nzbget/coordinator.py @@ -23,15 +23,18 @@ from .const import DOMAIN _LOGGER = logging.getLogger(__name__) +type NZBGetConfigEntry = ConfigEntry[NZBGetDataUpdateCoordinator] + + class NZBGetDataUpdateCoordinator(DataUpdateCoordinator): """Class to manage fetching NZBGet data.""" - config_entry: ConfigEntry + config_entry: NZBGetConfigEntry def __init__( self, hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: NZBGetConfigEntry, ) -> None: """Initialize global NZBGet data updater.""" self.nzbget = NZBGetAPI( diff --git a/homeassistant/components/nzbget/sensor.py b/homeassistant/components/nzbget/sensor.py index 2328bf453f0..65d01aebf52 100644 --- a/homeassistant/components/nzbget/sensor.py +++ b/homeassistant/components/nzbget/sensor.py @@ -10,15 +10,13 @@ from homeassistant.components.sensor import ( SensorEntity, SensorEntityDescription, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_NAME, UnitOfDataRate, UnitOfInformation from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.typing import StateType from homeassistant.util.dt import utcnow -from .const import DATA_COORDINATOR, DOMAIN -from .coordinator import NZBGetDataUpdateCoordinator +from .coordinator import NZBGetConfigEntry, NZBGetDataUpdateCoordinator from .entity import NZBGetEntity _LOGGER = logging.getLogger(__name__) @@ -92,13 +90,11 @@ SENSOR_TYPES: tuple[SensorEntityDescription, ...] = ( async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: NZBGetConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up NZBGet sensor based on a config entry.""" - coordinator: NZBGetDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][ - DATA_COORDINATOR - ] + coordinator = entry.runtime_data entities = [ NZBGetSensor(coordinator, entry.entry_id, entry.data[CONF_NAME], description) for description in SENSOR_TYPES diff --git a/homeassistant/components/nzbget/services.py b/homeassistant/components/nzbget/services.py index ebcdd362b0c..0b5464c4f01 100644 --- a/homeassistant/components/nzbget/services.py +++ b/homeassistant/components/nzbget/services.py @@ -8,7 +8,6 @@ from homeassistant.helpers import config_validation as cv from .const import ( ATTR_SPEED, - DATA_COORDINATOR, DEFAULT_SPEED_LIMIT, DOMAIN, SERVICE_PAUSE, @@ -30,7 +29,7 @@ def _get_coordinator(call: ServiceCall) -> NZBGetDataUpdateCoordinator: translation_domain=DOMAIN, translation_key="invalid_config_entry", ) - return call.hass.data[DOMAIN][entries[0].entry_id][DATA_COORDINATOR] + return entries[0].runtime_data def pause(call: ServiceCall) -> None: diff --git a/homeassistant/components/nzbget/switch.py b/homeassistant/components/nzbget/switch.py index a4b2dde4c47..05373345494 100644 --- a/homeassistant/components/nzbget/switch.py +++ b/homeassistant/components/nzbget/switch.py @@ -5,25 +5,21 @@ from __future__ import annotations from typing import Any from homeassistant.components.switch import SwitchEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_NAME from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback -from .const import DATA_COORDINATOR, DOMAIN -from .coordinator import NZBGetDataUpdateCoordinator +from .coordinator import NZBGetConfigEntry, NZBGetDataUpdateCoordinator from .entity import NZBGetEntity async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: NZBGetConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: - """Set up NZBGet sensor based on a config entry.""" - coordinator: NZBGetDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][ - DATA_COORDINATOR - ] + """Set up NZBGet switch based on a config entry.""" + coordinator = entry.runtime_data switches = [ NZBGetDownloadSwitch(