From 8e7f35aa7d0d2571b5d8f4f6f23b7995bab03bc6 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Tue, 11 Feb 2025 17:42:58 +0100 Subject: [PATCH] Use runtime_data in flo (#138307) --- homeassistant/components/flo/__init__.py | 20 +++++++------------ homeassistant/components/flo/binary_sensor.py | 10 +++------- homeassistant/components/flo/const.py | 1 - homeassistant/components/flo/coordinator.py | 11 ++++++++++ homeassistant/components/flo/sensor.py | 10 +++------- homeassistant/components/flo/switch.py | 10 +++------- 6 files changed, 27 insertions(+), 35 deletions(-) diff --git a/homeassistant/components/flo/__init__.py b/homeassistant/components/flo/__init__.py index 6a497f5140d..88824b041e7 100644 --- a/homeassistant/components/flo/__init__.py +++ b/homeassistant/components/flo/__init__.py @@ -6,27 +6,23 @@ import logging from aioflo import async_get_api from aioflo.errors import RequestError -from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, Platform from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers.aiohttp_client import async_get_clientsession -from .const import CLIENT, DOMAIN -from .coordinator import FloDeviceDataUpdateCoordinator +from .coordinator import FloConfigEntry, FloDeviceDataUpdateCoordinator, FloRuntimeData _LOGGER = logging.getLogger(__name__) PLATFORMS = [Platform.BINARY_SENSOR, Platform.SENSOR, Platform.SWITCH] -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_setup_entry(hass: HomeAssistant, entry: FloConfigEntry) -> bool: """Set up flo from a config entry.""" session = async_get_clientsession(hass) - hass.data.setdefault(DOMAIN, {}) - hass.data[DOMAIN][entry.entry_id] = {} try: - hass.data[DOMAIN][entry.entry_id][CLIENT] = client = await async_get_api( + client = await async_get_api( entry.data[CONF_USERNAME], entry.data[CONF_PASSWORD], session=session ) except RequestError as err: @@ -36,7 +32,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: _LOGGER.debug("Flo user information with locations: %s", user_info) - hass.data[DOMAIN][entry.entry_id]["devices"] = devices = [ + devices = [ FloDeviceDataUpdateCoordinator( hass, entry, client, location["id"], device["id"] ) @@ -47,14 +43,12 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: tasks = [device.async_refresh() for device in devices] await asyncio.gather(*tasks) + entry.runtime_data = FloRuntimeData(client=client, devices=devices) 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: FloConfigEntry) -> 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/flo/binary_sensor.py b/homeassistant/components/flo/binary_sensor.py index b510bff84d7..89f317fd3c6 100644 --- a/homeassistant/components/flo/binary_sensor.py +++ b/homeassistant/components/flo/binary_sensor.py @@ -6,24 +6,20 @@ from homeassistant.components.binary_sensor import ( BinarySensorDeviceClass, BinarySensorEntity, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback -from .const import DOMAIN as FLO_DOMAIN -from .coordinator import FloDeviceDataUpdateCoordinator +from .coordinator import FloConfigEntry from .entity import FloEntity async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: FloConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up the Flo sensors from config entry.""" - devices: list[FloDeviceDataUpdateCoordinator] = hass.data[FLO_DOMAIN][ - config_entry.entry_id - ]["devices"] + devices = config_entry.runtime_data.devices entities: list[BinarySensorEntity] = [] for device in devices: if device.device_type == "puck_oem": diff --git a/homeassistant/components/flo/const.py b/homeassistant/components/flo/const.py index 9eb00ebfa62..5b1d926d9f4 100644 --- a/homeassistant/components/flo/const.py +++ b/homeassistant/components/flo/const.py @@ -4,7 +4,6 @@ import logging LOGGER = logging.getLogger(__package__) -CLIENT = "client" DOMAIN = "flo" FLO_HOME = "home" FLO_AWAY = "away" diff --git a/homeassistant/components/flo/coordinator.py b/homeassistant/components/flo/coordinator.py index f5dc34a50cd..9f540b230f4 100644 --- a/homeassistant/components/flo/coordinator.py +++ b/homeassistant/components/flo/coordinator.py @@ -3,6 +3,7 @@ from __future__ import annotations import asyncio +from dataclasses import dataclass from datetime import datetime, timedelta from typing import Any @@ -17,6 +18,16 @@ from homeassistant.util import dt as dt_util from .const import DOMAIN as FLO_DOMAIN, LOGGER +type FloConfigEntry = ConfigEntry[FloRuntimeData] + + +@dataclass +class FloRuntimeData: + """Flo runtime data.""" + + client: API + devices: list[FloDeviceDataUpdateCoordinator] + class FloDeviceDataUpdateCoordinator(DataUpdateCoordinator): """Flo device object.""" diff --git a/homeassistant/components/flo/sensor.py b/homeassistant/components/flo/sensor.py index 71e5f921067..ca763839b87 100644 --- a/homeassistant/components/flo/sensor.py +++ b/homeassistant/components/flo/sensor.py @@ -7,7 +7,6 @@ from homeassistant.components.sensor import ( SensorEntity, SensorStateClass, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( PERCENTAGE, UnitOfPressure, @@ -18,20 +17,17 @@ from homeassistant.const import ( from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback -from .const import DOMAIN as FLO_DOMAIN -from .coordinator import FloDeviceDataUpdateCoordinator +from .coordinator import FloConfigEntry from .entity import FloEntity async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: FloConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up the Flo sensors from config entry.""" - devices: list[FloDeviceDataUpdateCoordinator] = hass.data[FLO_DOMAIN][ - config_entry.entry_id - ]["devices"] + devices = config_entry.runtime_data.devices entities = [] for device in devices: if device.device_type == "puck_oem": diff --git a/homeassistant/components/flo/switch.py b/homeassistant/components/flo/switch.py index 076dcc5e21c..12e242db5c8 100644 --- a/homeassistant/components/flo/switch.py +++ b/homeassistant/components/flo/switch.py @@ -8,13 +8,11 @@ from aioflo.location import SLEEP_MINUTE_OPTIONS, SYSTEM_MODE_HOME, SYSTEM_REVER import voluptuous as vol from homeassistant.components.switch import SwitchEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant, callback from homeassistant.helpers import entity_platform from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback -from .const import DOMAIN as FLO_DOMAIN -from .coordinator import FloDeviceDataUpdateCoordinator +from .coordinator import FloConfigEntry, FloDeviceDataUpdateCoordinator from .entity import FloEntity ATTR_REVERT_TO_MODE = "revert_to_mode" @@ -27,13 +25,11 @@ SERVICE_RUN_HEALTH_TEST = "run_health_test" async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: FloConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up the Flo switches from config entry.""" - devices: list[FloDeviceDataUpdateCoordinator] = hass.data[FLO_DOMAIN][ - config_entry.entry_id - ]["devices"] + devices = config_entry.runtime_data.devices async_add_entities( [FloSwitch(device) for device in devices if device.device_type != "puck_oem"]