From ec46d4d6440d56b05c162b1acaf20058213df33d Mon Sep 17 00:00:00 2001 From: Michael <35783820+mib1185@users.noreply.github.com> Date: Sat, 4 May 2024 19:03:25 +0200 Subject: [PATCH] Store runtime data inside the config entry in Nextcloud (#116790) --- homeassistant/components/nextcloud/__init__.py | 14 ++++++-------- .../components/nextcloud/binary_sensor.py | 10 +++++----- homeassistant/components/nextcloud/entity.py | 4 ++-- homeassistant/components/nextcloud/sensor.py | 10 +++++----- homeassistant/components/nextcloud/update.py | 10 +++++----- 5 files changed, 23 insertions(+), 25 deletions(-) diff --git a/homeassistant/components/nextcloud/__init__.py b/homeassistant/components/nextcloud/__init__.py index 11d2a85d851..209a618ec3d 100644 --- a/homeassistant/components/nextcloud/__init__.py +++ b/homeassistant/components/nextcloud/__init__.py @@ -30,8 +30,10 @@ CONFIG_SCHEMA = cv.removed(DOMAIN, raise_if_present=False) _LOGGER = logging.getLogger(__name__) +NextcloudConfigEntry = ConfigEntry[NextcloudDataUpdateCoordinator] -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: + +async def async_setup_entry(hass: HomeAssistant, entry: NextcloudConfigEntry) -> bool: """Set up the Nextcloud integration.""" # migrate old entity unique ids @@ -71,17 +73,13 @@ 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: NextcloudConfigEntry) -> bool: """Unload Nextcloud integration.""" - if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS): - hass.data[DOMAIN].pop(entry.entry_id) - if not hass.data[DOMAIN]: - hass.data.pop(DOMAIN) - return unload_ok + return await hass.config_entries.async_unload_platforms(entry, PLATFORMS) diff --git a/homeassistant/components/nextcloud/binary_sensor.py b/homeassistant/components/nextcloud/binary_sensor.py index 6c6f6141975..c9d19efbd45 100644 --- a/homeassistant/components/nextcloud/binary_sensor.py +++ b/homeassistant/components/nextcloud/binary_sensor.py @@ -8,13 +8,11 @@ from homeassistant.components.binary_sensor import ( BinarySensorEntity, BinarySensorEntityDescription, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.const import EntityCategory from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback -from .const import DOMAIN -from .coordinator import NextcloudDataUpdateCoordinator +from . import NextcloudConfigEntry from .entity import NextcloudEntity BINARY_SENSORS: Final[list[BinarySensorEntityDescription]] = [ @@ -54,10 +52,12 @@ BINARY_SENSORS: Final[list[BinarySensorEntityDescription]] = [ async def async_setup_entry( - hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback + hass: HomeAssistant, + entry: NextcloudConfigEntry, + async_add_entities: AddEntitiesCallback, ) -> None: """Set up the Nextcloud binary sensors.""" - coordinator: NextcloudDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] + coordinator = entry.runtime_data async_add_entities( NextcloudBinarySensor(coordinator, entry, sensor) for sensor in BINARY_SENSORS diff --git a/homeassistant/components/nextcloud/entity.py b/homeassistant/components/nextcloud/entity.py index 19431756e43..6632b2674eb 100644 --- a/homeassistant/components/nextcloud/entity.py +++ b/homeassistant/components/nextcloud/entity.py @@ -2,11 +2,11 @@ from urllib.parse import urlparse -from homeassistant.config_entries import ConfigEntry from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.entity import EntityDescription from homeassistant.helpers.update_coordinator import CoordinatorEntity +from . import NextcloudConfigEntry from .const import DOMAIN from .coordinator import NextcloudDataUpdateCoordinator @@ -19,7 +19,7 @@ class NextcloudEntity(CoordinatorEntity[NextcloudDataUpdateCoordinator]): def __init__( self, coordinator: NextcloudDataUpdateCoordinator, - entry: ConfigEntry, + entry: NextcloudConfigEntry, description: EntityDescription, ) -> None: """Initialize the Nextcloud sensor.""" diff --git a/homeassistant/components/nextcloud/sensor.py b/homeassistant/components/nextcloud/sensor.py index d8a2a362ce0..19ac7bb0df7 100644 --- a/homeassistant/components/nextcloud/sensor.py +++ b/homeassistant/components/nextcloud/sensor.py @@ -13,7 +13,6 @@ from homeassistant.components.sensor import ( SensorEntityDescription, SensorStateClass, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( PERCENTAGE, EntityCategory, @@ -24,8 +23,7 @@ from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.util.dt import utc_from_timestamp -from .const import DOMAIN -from .coordinator import NextcloudDataUpdateCoordinator +from . import NextcloudConfigEntry from .entity import NextcloudEntity UNIT_OF_LOAD: Final[str] = "load" @@ -602,10 +600,12 @@ SENSORS: Final[list[NextcloudSensorEntityDescription]] = [ async def async_setup_entry( - hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback + hass: HomeAssistant, + entry: NextcloudConfigEntry, + async_add_entities: AddEntitiesCallback, ) -> None: """Set up the Nextcloud sensors.""" - coordinator: NextcloudDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] + coordinator = entry.runtime_data async_add_entities( NextcloudSensor(coordinator, entry, sensor) for sensor in SENSORS diff --git a/homeassistant/components/nextcloud/update.py b/homeassistant/components/nextcloud/update.py index 52583d690bf..8c292e1bba2 100644 --- a/homeassistant/components/nextcloud/update.py +++ b/homeassistant/components/nextcloud/update.py @@ -3,20 +3,20 @@ from __future__ import annotations from homeassistant.components.update import UpdateEntity, UpdateEntityDescription -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback -from .const import DOMAIN -from .coordinator import NextcloudDataUpdateCoordinator +from . import NextcloudConfigEntry from .entity import NextcloudEntity async def async_setup_entry( - hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback + hass: HomeAssistant, + entry: NextcloudConfigEntry, + async_add_entities: AddEntitiesCallback, ) -> None: """Set up the Nextcloud update entity.""" - coordinator: NextcloudDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] + coordinator = entry.runtime_data if coordinator.data.get("update_available") is None: return async_add_entities(