From df4c718bac6df1e4883f097b1ab4f21ee925690b Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Tue, 11 Feb 2025 17:00:44 +0100 Subject: [PATCH] Use runtime_data in fjaraskupan (#138281) --- .../components/fjaraskupan/__init__.py | 32 ++++++------------- .../components/fjaraskupan/binary_sensor.py | 5 ++- .../components/fjaraskupan/coordinator.py | 6 ++-- homeassistant/components/fjaraskupan/fan.py | 5 ++- homeassistant/components/fjaraskupan/light.py | 5 ++- .../components/fjaraskupan/number.py | 5 ++- .../components/fjaraskupan/sensor.py | 5 ++- 7 files changed, 24 insertions(+), 39 deletions(-) diff --git a/homeassistant/components/fjaraskupan/__init__.py b/homeassistant/components/fjaraskupan/__init__.py index 2703fc5a30e..961be04fd8d 100644 --- a/homeassistant/components/fjaraskupan/__init__.py +++ b/homeassistant/components/fjaraskupan/__init__.py @@ -3,7 +3,6 @@ from __future__ import annotations from collections.abc import Callable -from dataclasses import dataclass import logging from fjaraskupan import Device @@ -16,7 +15,6 @@ from homeassistant.components.bluetooth import ( async_rediscover_address, async_register_callback, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.const import Platform from homeassistant.core import HomeAssistant, callback from homeassistant.helpers import device_registry as dr @@ -29,7 +27,7 @@ from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity_platform import AddEntitiesCallback from .const import DISPATCH_DETECTION, DOMAIN -from .coordinator import FjaraskupanCoordinator +from .coordinator import FjaraskupanConfigEntry, FjaraskupanCoordinator PLATFORMS = [ Platform.BINARY_SENSOR, @@ -42,26 +40,17 @@ PLATFORMS = [ _LOGGER = logging.getLogger(__name__) -@dataclass -class EntryState: - """Store state of config entry.""" - - coordinators: dict[str, FjaraskupanCoordinator] - - -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_setup_entry(hass: HomeAssistant, entry: FjaraskupanConfigEntry) -> bool: """Set up Fjäråskupan from a config entry.""" - state = EntryState({}) - hass.data.setdefault(DOMAIN, {}) - hass.data[DOMAIN][entry.entry_id] = state + entry.runtime_data = {} def detection_callback( service_info: BluetoothServiceInfoBleak, change: BluetoothChange ) -> None: if change != BluetoothChange.ADVERTISEMENT: return - if data := state.coordinators.get(service_info.address): + if data := entry.runtime_data.get(service_info.address): _LOGGER.debug("Update: %s", service_info) data.detection_callback(service_info) else: @@ -80,7 +69,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: ) coordinator.detection_callback(service_info) - state.coordinators[service_info.address] = coordinator + entry.runtime_data[service_info.address] = coordinator async_dispatcher_send( hass, f"{DISPATCH_DETECTION}.{entry.entry_id}", coordinator ) @@ -105,16 +94,15 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: @callback def async_setup_entry_platform( hass: HomeAssistant, - entry: ConfigEntry, + entry: FjaraskupanConfigEntry, async_add_entities: AddEntitiesCallback, constructor: Callable[[FjaraskupanCoordinator], list[Entity]], ) -> None: """Set up a platform with added entities.""" - entry_state: EntryState = hass.data[DOMAIN][entry.entry_id] async_add_entities( entity - for coordinator in entry_state.coordinators.values() + for coordinator in entry.runtime_data.values() for entity in constructor(coordinator) ) @@ -129,12 +117,12 @@ def async_setup_entry_platform( ) -async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_unload_entry( + hass: HomeAssistant, entry: FjaraskupanConfigEntry +) -> 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) - for device_entry in dr.async_entries_for_config_entry( dr.async_get(hass), entry.entry_id ): diff --git a/homeassistant/components/fjaraskupan/binary_sensor.py b/homeassistant/components/fjaraskupan/binary_sensor.py index eed2c6058bf..7364fa85b2e 100644 --- a/homeassistant/components/fjaraskupan/binary_sensor.py +++ b/homeassistant/components/fjaraskupan/binary_sensor.py @@ -12,7 +12,6 @@ from homeassistant.components.binary_sensor import ( BinarySensorEntity, BinarySensorEntityDescription, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.entity import Entity @@ -20,7 +19,7 @@ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.update_coordinator import CoordinatorEntity from . import async_setup_entry_platform -from .coordinator import FjaraskupanCoordinator +from .coordinator import FjaraskupanConfigEntry, FjaraskupanCoordinator @dataclass(frozen=True) @@ -48,7 +47,7 @@ SENSORS = ( async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: FjaraskupanConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up sensors dynamically through discovery.""" diff --git a/homeassistant/components/fjaraskupan/coordinator.py b/homeassistant/components/fjaraskupan/coordinator.py index bfea5e5f4fc..7fc4585a722 100644 --- a/homeassistant/components/fjaraskupan/coordinator.py +++ b/homeassistant/components/fjaraskupan/coordinator.py @@ -29,6 +29,8 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, Upda from .const import DOMAIN +type FjaraskupanConfigEntry = ConfigEntry[dict[str, FjaraskupanCoordinator]] + _LOGGER = logging.getLogger(__name__) @@ -65,12 +67,12 @@ class UnableToConnect(HomeAssistantError): class FjaraskupanCoordinator(DataUpdateCoordinator[State]): """Update coordinator for each device.""" - config_entry: ConfigEntry + config_entry: FjaraskupanConfigEntry def __init__( self, hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: FjaraskupanConfigEntry, device: Device, device_info: DeviceInfo, ) -> None: diff --git a/homeassistant/components/fjaraskupan/fan.py b/homeassistant/components/fjaraskupan/fan.py index ac9a15017cb..b35bb728131 100644 --- a/homeassistant/components/fjaraskupan/fan.py +++ b/homeassistant/components/fjaraskupan/fan.py @@ -13,7 +13,6 @@ from fjaraskupan import ( ) from homeassistant.components.fan import FanEntity, FanEntityFeature -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant, callback from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.device_registry import DeviceInfo @@ -25,7 +24,7 @@ from homeassistant.util.percentage import ( ) from . import async_setup_entry_platform -from .coordinator import FjaraskupanCoordinator +from .coordinator import FjaraskupanConfigEntry, FjaraskupanCoordinator ORDERED_NAMED_FAN_SPEEDS = ["1", "2", "3", "4", "5", "6", "7", "8"] @@ -51,7 +50,7 @@ class UnsupportedPreset(HomeAssistantError): async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: FjaraskupanConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up sensors dynamically through discovery.""" diff --git a/homeassistant/components/fjaraskupan/light.py b/homeassistant/components/fjaraskupan/light.py index 6ac6017f3ee..c39e3ca4736 100644 --- a/homeassistant/components/fjaraskupan/light.py +++ b/homeassistant/components/fjaraskupan/light.py @@ -5,7 +5,6 @@ from __future__ import annotations from typing import Any from homeassistant.components.light import ATTR_BRIGHTNESS, ColorMode, LightEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.entity import Entity @@ -13,12 +12,12 @@ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.update_coordinator import CoordinatorEntity from . import async_setup_entry_platform -from .coordinator import FjaraskupanCoordinator +from .coordinator import FjaraskupanConfigEntry, FjaraskupanCoordinator async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: FjaraskupanConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up tuya sensors dynamically through tuya discovery.""" diff --git a/homeassistant/components/fjaraskupan/number.py b/homeassistant/components/fjaraskupan/number.py index a69c31a5587..93fd31273e9 100644 --- a/homeassistant/components/fjaraskupan/number.py +++ b/homeassistant/components/fjaraskupan/number.py @@ -3,7 +3,6 @@ from __future__ import annotations from homeassistant.components.number import NumberEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.const import EntityCategory, UnitOfTime from homeassistant.core import HomeAssistant from homeassistant.helpers.device_registry import DeviceInfo @@ -12,12 +11,12 @@ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.update_coordinator import CoordinatorEntity from . import async_setup_entry_platform -from .coordinator import FjaraskupanCoordinator +from .coordinator import FjaraskupanConfigEntry, FjaraskupanCoordinator async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: FjaraskupanConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up number entities dynamically through discovery.""" diff --git a/homeassistant/components/fjaraskupan/sensor.py b/homeassistant/components/fjaraskupan/sensor.py index 21d524e6534..039feb5913c 100644 --- a/homeassistant/components/fjaraskupan/sensor.py +++ b/homeassistant/components/fjaraskupan/sensor.py @@ -9,7 +9,6 @@ from homeassistant.components.sensor import ( SensorEntity, SensorStateClass, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.const import SIGNAL_STRENGTH_DECIBELS_MILLIWATT, EntityCategory from homeassistant.core import HomeAssistant from homeassistant.helpers.device_registry import DeviceInfo @@ -19,12 +18,12 @@ from homeassistant.helpers.typing import StateType from homeassistant.helpers.update_coordinator import CoordinatorEntity from . import async_setup_entry_platform -from .coordinator import FjaraskupanCoordinator +from .coordinator import FjaraskupanConfigEntry, FjaraskupanCoordinator async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: FjaraskupanConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up sensors dynamically through discovery."""