From f5f57908dcc2e548aa0d0d6e697056bb29b4e9a8 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 14 May 2024 10:30:53 +0200 Subject: [PATCH] Use ConfigEntry runtime_data in Tailwind (#117404) --- homeassistant/components/tailwind/__init__.py | 9 ++++----- homeassistant/components/tailwind/binary_sensor.py | 11 ++++------- homeassistant/components/tailwind/button.py | 8 +++----- homeassistant/components/tailwind/coordinator.py | 2 -- homeassistant/components/tailwind/cover.py | 10 ++++------ homeassistant/components/tailwind/diagnostics.py | 9 +++------ homeassistant/components/tailwind/number.py | 8 +++----- homeassistant/components/tailwind/typing.py | 7 +++++++ 8 files changed, 28 insertions(+), 36 deletions(-) create mode 100644 homeassistant/components/tailwind/typing.py diff --git a/homeassistant/components/tailwind/__init__.py b/homeassistant/components/tailwind/__init__.py index 9bd3bb40be0..6f1a234e94a 100644 --- a/homeassistant/components/tailwind/__init__.py +++ b/homeassistant/components/tailwind/__init__.py @@ -9,16 +9,17 @@ from homeassistant.helpers import device_registry as dr from .const import DOMAIN from .coordinator import TailwindDataUpdateCoordinator +from .typing import TailwindConfigEntry PLATFORMS = [Platform.BINARY_SENSOR, Platform.BUTTON, Platform.COVER, Platform.NUMBER] -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_setup_entry(hass: HomeAssistant, entry: TailwindConfigEntry) -> bool: """Set up Tailwind device from a config entry.""" coordinator = TailwindDataUpdateCoordinator(hass, entry) await coordinator.async_config_entry_first_refresh() - hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator + entry.runtime_data = coordinator # Register the Tailwind device, since other entities will have it as a parent. # This prevents a child device being created before the parent ending up @@ -40,6 +41,4 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Unload Tailwind config entry.""" - if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS): - del hass.data[DOMAIN][entry.entry_id] - return unload_ok + return await hass.config_entries.async_unload_platforms(entry, PLATFORMS) diff --git a/homeassistant/components/tailwind/binary_sensor.py b/homeassistant/components/tailwind/binary_sensor.py index e6a1aa67ae1..0ce0b4bd964 100644 --- a/homeassistant/components/tailwind/binary_sensor.py +++ b/homeassistant/components/tailwind/binary_sensor.py @@ -12,14 +12,12 @@ 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 TailwindDataUpdateCoordinator from .entity import TailwindDoorEntity +from .typing import TailwindConfigEntry @dataclass(kw_only=True, frozen=True) @@ -42,15 +40,14 @@ DESCRIPTIONS: tuple[TailwindDoorBinarySensorEntityDescription, ...] = ( async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: TailwindConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up Tailwind binary sensor based on a config entry.""" - coordinator: TailwindDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] async_add_entities( - TailwindDoorBinarySensorEntity(coordinator, door_id, description) + TailwindDoorBinarySensorEntity(entry.runtime_data, door_id, description) for description in DESCRIPTIONS - for door_id in coordinator.data.doors + for door_id in entry.runtime_data.data.doors ) diff --git a/homeassistant/components/tailwind/button.py b/homeassistant/components/tailwind/button.py index 6073b8f7f58..2a675bbfdf7 100644 --- a/homeassistant/components/tailwind/button.py +++ b/homeassistant/components/tailwind/button.py @@ -13,15 +13,14 @@ 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.exceptions import HomeAssistantError from homeassistant.helpers.entity_platform import AddEntitiesCallback from .const import DOMAIN -from .coordinator import TailwindDataUpdateCoordinator from .entity import TailwindEntity +from .typing import TailwindConfigEntry @dataclass(frozen=True, kw_only=True) @@ -43,14 +42,13 @@ DESCRIPTIONS = [ async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: TailwindConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up Tailwind button based on a config entry.""" - coordinator: TailwindDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] async_add_entities( TailwindButtonEntity( - coordinator, + entry.runtime_data, description, ) for description in DESCRIPTIONS diff --git a/homeassistant/components/tailwind/coordinator.py b/homeassistant/components/tailwind/coordinator.py index d7cbb248885..4d1b4af74c9 100644 --- a/homeassistant/components/tailwind/coordinator.py +++ b/homeassistant/components/tailwind/coordinator.py @@ -22,8 +22,6 @@ from .const import DOMAIN, LOGGER class TailwindDataUpdateCoordinator(DataUpdateCoordinator[TailwindDeviceStatus]): """Class to manage fetching Tailwind data.""" - config_entry: ConfigEntry - def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None: """Initialize the coordinator.""" self.tailwind = Tailwind( diff --git a/homeassistant/components/tailwind/cover.py b/homeassistant/components/tailwind/cover.py index f54902dac4a..8fb0f313480 100644 --- a/homeassistant/components/tailwind/cover.py +++ b/homeassistant/components/tailwind/cover.py @@ -17,26 +17,24 @@ from homeassistant.components.cover import ( CoverEntity, CoverEntityFeature, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.entity_platform import AddEntitiesCallback from .const import DOMAIN -from .coordinator import TailwindDataUpdateCoordinator from .entity import TailwindDoorEntity +from .typing import TailwindConfigEntry async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: TailwindConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up Tailwind cover based on a config entry.""" - coordinator: TailwindDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] async_add_entities( - TailwindDoorCoverEntity(coordinator, door_id) - for door_id in coordinator.data.doors + TailwindDoorCoverEntity(entry.runtime_data, door_id) + for door_id in entry.runtime_data.data.doors ) diff --git a/homeassistant/components/tailwind/diagnostics.py b/homeassistant/components/tailwind/diagnostics.py index 970bb5174eb..5d681356647 100644 --- a/homeassistant/components/tailwind/diagnostics.py +++ b/homeassistant/components/tailwind/diagnostics.py @@ -4,16 +4,13 @@ from __future__ import annotations from typing import Any -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant -from .const import DOMAIN -from .coordinator import TailwindDataUpdateCoordinator +from .typing import TailwindConfigEntry async def async_get_config_entry_diagnostics( - hass: HomeAssistant, entry: ConfigEntry + hass: HomeAssistant, entry: TailwindConfigEntry ) -> dict[str, Any]: """Return diagnostics for a config entry.""" - coordinator: TailwindDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] - return coordinator.data.to_dict() + return entry.runtime_data.data.to_dict() diff --git a/homeassistant/components/tailwind/number.py b/homeassistant/components/tailwind/number.py index 63c01cf7e73..0ff1f444280 100644 --- a/homeassistant/components/tailwind/number.py +++ b/homeassistant/components/tailwind/number.py @@ -9,15 +9,14 @@ from typing import Any from gotailwind import Tailwind, TailwindDeviceStatus, TailwindError from homeassistant.components.number import NumberEntity, NumberEntityDescription -from homeassistant.config_entries import ConfigEntry from homeassistant.const import PERCENTAGE, EntityCategory from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.entity_platform import AddEntitiesCallback from .const import DOMAIN -from .coordinator import TailwindDataUpdateCoordinator from .entity import TailwindEntity +from .typing import TailwindConfigEntry @dataclass(frozen=True, kw_only=True) @@ -47,14 +46,13 @@ DESCRIPTIONS = [ async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: TailwindConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up Tailwind number based on a config entry.""" - coordinator: TailwindDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] async_add_entities( TailwindNumberEntity( - coordinator, + entry.runtime_data, description, ) for description in DESCRIPTIONS diff --git a/homeassistant/components/tailwind/typing.py b/homeassistant/components/tailwind/typing.py new file mode 100644 index 00000000000..228c62906c1 --- /dev/null +++ b/homeassistant/components/tailwind/typing.py @@ -0,0 +1,7 @@ +"""Typings for the Tailwind integration.""" + +from homeassistant.config_entries import ConfigEntry + +from .coordinator import TailwindDataUpdateCoordinator + +TailwindConfigEntry = ConfigEntry[TailwindDataUpdateCoordinator]