Use ConfigEntry runtime_data in Tailwind (#117404)

This commit is contained in:
Franck Nijhof 2024-05-14 10:30:53 +02:00 committed by GitHub
parent b84829f70f
commit f5f57908dc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 28 additions and 36 deletions

View File

@ -9,16 +9,17 @@ from homeassistant.helpers import device_registry as dr
from .const import DOMAIN from .const import DOMAIN
from .coordinator import TailwindDataUpdateCoordinator from .coordinator import TailwindDataUpdateCoordinator
from .typing import TailwindConfigEntry
PLATFORMS = [Platform.BINARY_SENSOR, Platform.BUTTON, Platform.COVER, Platform.NUMBER] 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.""" """Set up Tailwind device from a config entry."""
coordinator = TailwindDataUpdateCoordinator(hass, entry) coordinator = TailwindDataUpdateCoordinator(hass, entry)
await coordinator.async_config_entry_first_refresh() 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. # 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 # 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: async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload Tailwind config entry.""" """Unload Tailwind config entry."""
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS): return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
del hass.data[DOMAIN][entry.entry_id]
return unload_ok

View File

@ -12,14 +12,12 @@ from homeassistant.components.binary_sensor import (
BinarySensorEntity, BinarySensorEntity,
BinarySensorEntityDescription, BinarySensorEntityDescription,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import EntityCategory from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from .coordinator import TailwindDataUpdateCoordinator
from .entity import TailwindDoorEntity from .entity import TailwindDoorEntity
from .typing import TailwindConfigEntry
@dataclass(kw_only=True, frozen=True) @dataclass(kw_only=True, frozen=True)
@ -42,15 +40,14 @@ DESCRIPTIONS: tuple[TailwindDoorBinarySensorEntityDescription, ...] = (
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: TailwindConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up Tailwind binary sensor based on a config entry.""" """Set up Tailwind binary sensor based on a config entry."""
coordinator: TailwindDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
async_add_entities( async_add_entities(
TailwindDoorBinarySensorEntity(coordinator, door_id, description) TailwindDoorBinarySensorEntity(entry.runtime_data, door_id, description)
for description in DESCRIPTIONS for description in DESCRIPTIONS
for door_id in coordinator.data.doors for door_id in entry.runtime_data.data.doors
) )

View File

@ -13,15 +13,14 @@ from homeassistant.components.button import (
ButtonEntity, ButtonEntity,
ButtonEntityDescription, ButtonEntityDescription,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import EntityCategory from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN from .const import DOMAIN
from .coordinator import TailwindDataUpdateCoordinator
from .entity import TailwindEntity from .entity import TailwindEntity
from .typing import TailwindConfigEntry
@dataclass(frozen=True, kw_only=True) @dataclass(frozen=True, kw_only=True)
@ -43,14 +42,13 @@ DESCRIPTIONS = [
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: TailwindConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up Tailwind button based on a config entry.""" """Set up Tailwind button based on a config entry."""
coordinator: TailwindDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
async_add_entities( async_add_entities(
TailwindButtonEntity( TailwindButtonEntity(
coordinator, entry.runtime_data,
description, description,
) )
for description in DESCRIPTIONS for description in DESCRIPTIONS

View File

@ -22,8 +22,6 @@ from .const import DOMAIN, LOGGER
class TailwindDataUpdateCoordinator(DataUpdateCoordinator[TailwindDeviceStatus]): class TailwindDataUpdateCoordinator(DataUpdateCoordinator[TailwindDeviceStatus]):
"""Class to manage fetching Tailwind data.""" """Class to manage fetching Tailwind data."""
config_entry: ConfigEntry
def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None: def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None:
"""Initialize the coordinator.""" """Initialize the coordinator."""
self.tailwind = Tailwind( self.tailwind = Tailwind(

View File

@ -17,26 +17,24 @@ from homeassistant.components.cover import (
CoverEntity, CoverEntity,
CoverEntityFeature, CoverEntityFeature,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN from .const import DOMAIN
from .coordinator import TailwindDataUpdateCoordinator
from .entity import TailwindDoorEntity from .entity import TailwindDoorEntity
from .typing import TailwindConfigEntry
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: TailwindConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up Tailwind cover based on a config entry.""" """Set up Tailwind cover based on a config entry."""
coordinator: TailwindDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
async_add_entities( async_add_entities(
TailwindDoorCoverEntity(coordinator, door_id) TailwindDoorCoverEntity(entry.runtime_data, door_id)
for door_id in coordinator.data.doors for door_id in entry.runtime_data.data.doors
) )

View File

@ -4,16 +4,13 @@ from __future__ import annotations
from typing import Any from typing import Any
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from .const import DOMAIN from .typing import TailwindConfigEntry
from .coordinator import TailwindDataUpdateCoordinator
async def async_get_config_entry_diagnostics( async def async_get_config_entry_diagnostics(
hass: HomeAssistant, entry: ConfigEntry hass: HomeAssistant, entry: TailwindConfigEntry
) -> dict[str, Any]: ) -> dict[str, Any]:
"""Return diagnostics for a config entry.""" """Return diagnostics for a config entry."""
coordinator: TailwindDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] return entry.runtime_data.data.to_dict()
return coordinator.data.to_dict()

View File

@ -9,15 +9,14 @@ from typing import Any
from gotailwind import Tailwind, TailwindDeviceStatus, TailwindError from gotailwind import Tailwind, TailwindDeviceStatus, TailwindError
from homeassistant.components.number import NumberEntity, NumberEntityDescription from homeassistant.components.number import NumberEntity, NumberEntityDescription
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import PERCENTAGE, EntityCategory from homeassistant.const import PERCENTAGE, EntityCategory
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN from .const import DOMAIN
from .coordinator import TailwindDataUpdateCoordinator
from .entity import TailwindEntity from .entity import TailwindEntity
from .typing import TailwindConfigEntry
@dataclass(frozen=True, kw_only=True) @dataclass(frozen=True, kw_only=True)
@ -47,14 +46,13 @@ DESCRIPTIONS = [
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: TailwindConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up Tailwind number based on a config entry.""" """Set up Tailwind number based on a config entry."""
coordinator: TailwindDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
async_add_entities( async_add_entities(
TailwindNumberEntity( TailwindNumberEntity(
coordinator, entry.runtime_data,
description, description,
) )
for description in DESCRIPTIONS for description in DESCRIPTIONS

View File

@ -0,0 +1,7 @@
"""Typings for the Tailwind integration."""
from homeassistant.config_entries import ConfigEntry
from .coordinator import TailwindDataUpdateCoordinator
TailwindConfigEntry = ConfigEntry[TailwindDataUpdateCoordinator]