From 427013124c8794dd261a5e4d6901c390d700217c Mon Sep 17 00:00:00 2001 From: Michael <35783820+mib1185@users.noreply.github.com> Date: Sun, 9 Feb 2025 21:42:15 +0100 Subject: [PATCH] Explicitly pass in the config_entry in iron_os coordinator (#138137) explicitly pass in the config_entry in coordinator --- homeassistant/components/iron_os/__init__.py | 7 +- .../components/iron_os/coordinator.py | 65 +++++++++++-------- 2 files changed, 40 insertions(+), 32 deletions(-) diff --git a/homeassistant/components/iron_os/__init__.py b/homeassistant/components/iron_os/__init__.py index 6af6abb1436..77099e48b41 100644 --- a/homeassistant/components/iron_os/__init__.py +++ b/homeassistant/components/iron_os/__init__.py @@ -8,7 +8,6 @@ from typing import TYPE_CHECKING from pynecil import IronOSUpdate, Pynecil from homeassistant.components import bluetooth -from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_NAME, Platform from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryNotReady @@ -19,6 +18,7 @@ from homeassistant.util.hass_dict import HassKey from .const import DOMAIN from .coordinator import ( + IronOSConfigEntry, IronOSCoordinators, IronOSFirmwareUpdateCoordinator, IronOSLiveDataCoordinator, @@ -39,7 +39,6 @@ PLATFORMS: list[Platform] = [ CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN) -type IronOSConfigEntry = ConfigEntry[IronOSCoordinators] IRON_OS_KEY: HassKey[IronOSFirmwareUpdateCoordinator] = HassKey(DOMAIN) @@ -73,10 +72,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: IronOSConfigEntry) -> bo device = Pynecil(ble_device) - live_data = IronOSLiveDataCoordinator(hass, device) + live_data = IronOSLiveDataCoordinator(hass, entry, device) await live_data.async_config_entry_first_refresh() - settings = IronOSSettingsCoordinator(hass, device) + settings = IronOSSettingsCoordinator(hass, entry, device) await settings.async_config_entry_first_refresh() entry.runtime_data = IronOSCoordinators( diff --git a/homeassistant/components/iron_os/coordinator.py b/homeassistant/components/iron_os/coordinator.py index 080fee20762..fc89ecea43c 100644 --- a/homeassistant/components/iron_os/coordinator.py +++ b/homeassistant/components/iron_os/coordinator.py @@ -43,15 +43,19 @@ class IronOSCoordinators: settings: IronOSSettingsCoordinator +type IronOSConfigEntry = ConfigEntry[IronOSCoordinators] + + class IronOSBaseCoordinator[_DataT](DataUpdateCoordinator[_DataT]): """IronOS base coordinator.""" device_info: DeviceInfoResponse - config_entry: ConfigEntry + config_entry: IronOSConfigEntry def __init__( self, hass: HomeAssistant, + config_entry: IronOSConfigEntry, device: Pynecil, update_interval: timedelta, ) -> None: @@ -60,6 +64,7 @@ class IronOSBaseCoordinator[_DataT](DataUpdateCoordinator[_DataT]): super().__init__( hass, _LOGGER, + config_entry=config_entry, name=DOMAIN, update_interval=update_interval, request_refresh_debouncer=Debouncer( @@ -80,9 +85,11 @@ class IronOSBaseCoordinator[_DataT](DataUpdateCoordinator[_DataT]): class IronOSLiveDataCoordinator(IronOSBaseCoordinator[LiveDataResponse]): """IronOS coordinator.""" - def __init__(self, hass: HomeAssistant, device: Pynecil) -> None: + def __init__( + self, hass: HomeAssistant, config_entry: IronOSConfigEntry, device: Pynecil + ) -> None: """Initialize IronOS coordinator.""" - super().__init__(hass, device=device, update_interval=SCAN_INTERVAL) + super().__init__(hass, config_entry, device, SCAN_INTERVAL) async def _async_update_data(self) -> LiveDataResponse: """Fetch data from Device.""" @@ -109,35 +116,14 @@ class IronOSLiveDataCoordinator(IronOSBaseCoordinator[LiveDataResponse]): return False -class IronOSFirmwareUpdateCoordinator(DataUpdateCoordinator[LatestRelease]): - """IronOS coordinator for retrieving update information from github.""" - - def __init__(self, hass: HomeAssistant, github: IronOSUpdate) -> None: - """Initialize IronOS coordinator.""" - super().__init__( - hass, - _LOGGER, - config_entry=None, - name=DOMAIN, - update_interval=SCAN_INTERVAL_GITHUB, - ) - self.github = github - - async def _async_update_data(self) -> LatestRelease: - """Fetch data from Github.""" - - try: - return await self.github.latest_release() - except UpdateException as e: - raise UpdateFailed("Failed to check for latest IronOS update") from e - - class IronOSSettingsCoordinator(IronOSBaseCoordinator[SettingsDataResponse]): """IronOS coordinator.""" - def __init__(self, hass: HomeAssistant, device: Pynecil) -> None: + def __init__( + self, hass: HomeAssistant, config_entry: IronOSConfigEntry, device: Pynecil + ) -> None: """Initialize IronOS coordinator.""" - super().__init__(hass, device=device, update_interval=SCAN_INTERVAL_SETTINGS) + super().__init__(hass, config_entry, device, SCAN_INTERVAL_SETTINGS) async def _async_update_data(self) -> SettingsDataResponse: """Fetch data from Device.""" @@ -173,3 +159,26 @@ class IronOSSettingsCoordinator(IronOSBaseCoordinator[SettingsDataResponse]): ) self.async_update_listeners() await self.async_request_refresh() + + +class IronOSFirmwareUpdateCoordinator(DataUpdateCoordinator[LatestRelease]): + """IronOS coordinator for retrieving update information from github.""" + + def __init__(self, hass: HomeAssistant, github: IronOSUpdate) -> None: + """Initialize IronOS coordinator.""" + super().__init__( + hass, + _LOGGER, + config_entry=None, + name=DOMAIN, + update_interval=SCAN_INTERVAL_GITHUB, + ) + self.github = github + + async def _async_update_data(self) -> LatestRelease: + """Fetch data from Github.""" + + try: + return await self.github.latest_release() + except UpdateException as e: + raise UpdateFailed("Failed to check for latest IronOS update") from e