From 726857158754e17c229397fe7565dd4066f179dd Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Wed, 1 Apr 2026 11:33:55 +0200 Subject: [PATCH] Use runtime_data in opengarage integration (#167040) Co-authored-by: Claude Opus 4.6 (1M context) --- homeassistant/components/opengarage/__init__.py | 17 ++++++----------- .../components/opengarage/binary_sensor.py | 10 +++------- homeassistant/components/opengarage/button.py | 10 +++------- .../components/opengarage/coordinator.py | 7 +++++-- homeassistant/components/opengarage/cover.py | 8 +++----- homeassistant/components/opengarage/sensor.py | 10 +++------- 6 files changed, 23 insertions(+), 39 deletions(-) diff --git a/homeassistant/components/opengarage/__init__.py b/homeassistant/components/opengarage/__init__.py index f1f080b30f8..af494955375 100644 --- a/homeassistant/components/opengarage/__init__.py +++ b/homeassistant/components/opengarage/__init__.py @@ -4,18 +4,17 @@ from __future__ import annotations import opengarage -from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_HOST, CONF_PORT, CONF_VERIFY_SSL, Platform from homeassistant.core import HomeAssistant from homeassistant.helpers.aiohttp_client import async_get_clientsession -from .const import CONF_DEVICE_KEY, DOMAIN -from .coordinator import OpenGarageDataUpdateCoordinator +from .const import CONF_DEVICE_KEY +from .coordinator import OpenGarageConfigEntry, OpenGarageDataUpdateCoordinator PLATFORMS = [Platform.BINARY_SENSOR, Platform.BUTTON, Platform.COVER, Platform.SENSOR] -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_setup_entry(hass: HomeAssistant, entry: OpenGarageConfigEntry) -> bool: """Set up OpenGarage from a config entry.""" open_garage_connection = opengarage.OpenGarage( f"{entry.data[CONF_HOST]}:{entry.data[CONF_PORT]}", @@ -27,17 +26,13 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: hass, entry, open_garage_connection ) await open_garage_data_coordinator.async_config_entry_first_refresh() - hass.data.setdefault(DOMAIN, {})[entry.entry_id] = open_garage_data_coordinator + entry.runtime_data = open_garage_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: OpenGarageConfigEntry) -> bool: """Unload a config entry.""" - unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS) - if unload_ok: - 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/opengarage/binary_sensor.py b/homeassistant/components/opengarage/binary_sensor.py index 33420ab3fd5..d538f261db9 100644 --- a/homeassistant/components/opengarage/binary_sensor.py +++ b/homeassistant/components/opengarage/binary_sensor.py @@ -9,12 +9,10 @@ from homeassistant.components.binary_sensor import ( BinarySensorEntity, BinarySensorEntityDescription, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback -from .const import DOMAIN -from .coordinator import OpenGarageDataUpdateCoordinator +from .coordinator import OpenGarageConfigEntry, OpenGarageDataUpdateCoordinator from .entity import OpenGarageEntity _LOGGER = logging.getLogger(__name__) @@ -30,13 +28,11 @@ SENSOR_TYPES: tuple[BinarySensorEntityDescription, ...] = ( async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: OpenGarageConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up the OpenGarage binary sensors.""" - open_garage_data_coordinator: OpenGarageDataUpdateCoordinator = hass.data[DOMAIN][ - entry.entry_id - ] + open_garage_data_coordinator = entry.runtime_data async_add_entities( OpenGarageBinarySensor( open_garage_data_coordinator, diff --git a/homeassistant/components/opengarage/button.py b/homeassistant/components/opengarage/button.py index 64a4f2f20e7..24920e80e19 100644 --- a/homeassistant/components/opengarage/button.py +++ b/homeassistant/components/opengarage/button.py @@ -13,13 +13,11 @@ from homeassistant.components.button import ( ButtonEntity, ButtonEntityDescription, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.const import EntityCategory from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback -from .const import DOMAIN -from .coordinator import OpenGarageDataUpdateCoordinator +from .coordinator import OpenGarageConfigEntry, OpenGarageDataUpdateCoordinator from .entity import OpenGarageEntity @@ -42,13 +40,11 @@ BUTTONS: tuple[OpenGarageButtonEntityDescription, ...] = ( async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: OpenGarageConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up the OpenGarage button entities.""" - coordinator: OpenGarageDataUpdateCoordinator = hass.data[DOMAIN][ - config_entry.entry_id - ] + coordinator = config_entry.runtime_data async_add_entities( OpenGarageButtonEntity( diff --git a/homeassistant/components/opengarage/coordinator.py b/homeassistant/components/opengarage/coordinator.py index 5d5440d6b1b..f384bd47d26 100644 --- a/homeassistant/components/opengarage/coordinator.py +++ b/homeassistant/components/opengarage/coordinator.py @@ -18,15 +18,18 @@ from .const import DOMAIN _LOGGER = logging.getLogger(__name__) +type OpenGarageConfigEntry = ConfigEntry[OpenGarageDataUpdateCoordinator] + + class OpenGarageDataUpdateCoordinator(DataUpdateCoordinator[dict[str, Any]]): """Class to manage fetching Opengarage data.""" - config_entry: ConfigEntry + config_entry: OpenGarageConfigEntry def __init__( self, hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: OpenGarageConfigEntry, open_garage_connection: opengarage.OpenGarage, ) -> None: """Initialize global Opengarage data updater.""" diff --git a/homeassistant/components/opengarage/cover.py b/homeassistant/components/opengarage/cover.py index 859e3382772..79b6200aeb1 100644 --- a/homeassistant/components/opengarage/cover.py +++ b/homeassistant/components/opengarage/cover.py @@ -11,12 +11,10 @@ from homeassistant.components.cover import ( CoverEntityFeature, CoverState, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback -from .const import DOMAIN -from .coordinator import OpenGarageDataUpdateCoordinator +from .coordinator import OpenGarageConfigEntry, OpenGarageDataUpdateCoordinator from .entity import OpenGarageEntity _LOGGER = logging.getLogger(__name__) @@ -26,12 +24,12 @@ STATES_MAP = {0: CoverState.CLOSED, 1: CoverState.OPEN} async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: OpenGarageConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up the OpenGarage covers.""" async_add_entities( - [OpenGarageCover(hass.data[DOMAIN][entry.entry_id], cast(str, entry.unique_id))] + [OpenGarageCover(entry.runtime_data, cast(str, entry.unique_id))] ) diff --git a/homeassistant/components/opengarage/sensor.py b/homeassistant/components/opengarage/sensor.py index 14d14dd5d23..cf3625fabb1 100644 --- a/homeassistant/components/opengarage/sensor.py +++ b/homeassistant/components/opengarage/sensor.py @@ -11,7 +11,6 @@ from homeassistant.components.sensor import ( SensorEntityDescription, SensorStateClass, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( PERCENTAGE, SIGNAL_STRENGTH_DECIBELS_MILLIWATT, @@ -22,8 +21,7 @@ from homeassistant.const import ( from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback -from .const import DOMAIN -from .coordinator import OpenGarageDataUpdateCoordinator +from .coordinator import OpenGarageConfigEntry from .entity import OpenGarageEntity _LOGGER = logging.getLogger(__name__) @@ -60,13 +58,11 @@ SENSOR_TYPES: tuple[SensorEntityDescription, ...] = ( async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: OpenGarageConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up the OpenGarage sensors.""" - open_garage_data_coordinator: OpenGarageDataUpdateCoordinator = hass.data[DOMAIN][ - entry.entry_id - ] + open_garage_data_coordinator = entry.runtime_data async_add_entities( OpenGarageSensor( open_garage_data_coordinator,