Migrate anova to use runtime_data (#125536)

This commit is contained in:
epenet 2024-09-08 22:13:32 +02:00 committed by GitHub
parent 4d804649fc
commit 0f2525d476
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 13 additions and 16 deletions

View File

@ -13,22 +13,20 @@ from anova_wifi import (
WebsocketFailure, WebsocketFailure,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, Platform from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, Platform
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers import aiohttp_client from homeassistant.helpers import aiohttp_client
from .const import DOMAIN
from .coordinator import AnovaCoordinator from .coordinator import AnovaCoordinator
from .models import AnovaData from .models import AnovaConfigEntry, AnovaData
PLATFORMS = [Platform.SENSOR] PLATFORMS = [Platform.SENSOR]
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_setup_entry(hass: HomeAssistant, entry: AnovaConfigEntry) -> bool:
"""Set up Anova from a config entry.""" """Set up Anova from a config entry."""
api = AnovaApi( api = AnovaApi(
aiohttp_client.async_get_clientsession(hass), aiohttp_client.async_get_clientsession(hass),
@ -62,17 +60,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
assert api.websocket_handler is not None assert api.websocket_handler is not None
devices = list(api.websocket_handler.devices.values()) devices = list(api.websocket_handler.devices.values())
coordinators = [AnovaCoordinator(hass, device) for device in devices] coordinators = [AnovaCoordinator(hass, device) for device in devices]
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = AnovaData( entry.runtime_data = AnovaData(api_jwt=api.jwt, coordinators=coordinators, api=api)
api_jwt=api.jwt, coordinators=coordinators, api=api
)
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: AnovaConfigEntry) -> bool:
"""Unload a config entry.""" """Unload a config entry."""
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS): if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
anova_data: AnovaData = hass.data[DOMAIN].pop(entry.entry_id)
# Disconnect from WS # Disconnect from WS
await anova_data.api.disconnect_websocket() await entry.runtime_data.api.disconnect_websocket()
return unload_ok return unload_ok

View File

@ -4,8 +4,12 @@ from dataclasses import dataclass
from anova_wifi import AnovaApi from anova_wifi import AnovaApi
from homeassistant.config_entries import ConfigEntry
from .coordinator import AnovaCoordinator from .coordinator import AnovaCoordinator
type AnovaConfigEntry = ConfigEntry[AnovaData]
@dataclass @dataclass
class AnovaData: class AnovaData:

View File

@ -7,7 +7,6 @@ from dataclasses import dataclass
from anova_wifi import AnovaMode, AnovaState, APCUpdateSensor from anova_wifi import AnovaMode, AnovaState, APCUpdateSensor
from homeassistant import config_entries
from homeassistant.components.sensor import ( from homeassistant.components.sensor import (
SensorDeviceClass, SensorDeviceClass,
SensorEntity, SensorEntity,
@ -19,10 +18,9 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType from homeassistant.helpers.typing import StateType
from .const import DOMAIN
from .coordinator import AnovaCoordinator from .coordinator import AnovaCoordinator
from .entity import AnovaDescriptionEntity from .entity import AnovaDescriptionEntity
from .models import AnovaData from .models import AnovaConfigEntry
@dataclass(frozen=True, kw_only=True) @dataclass(frozen=True, kw_only=True)
@ -99,11 +97,11 @@ SENSOR_DESCRIPTIONS: list[AnovaSensorEntityDescription] = [
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: config_entries.ConfigEntry, entry: AnovaConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up Anova device.""" """Set up Anova device."""
anova_data: AnovaData = hass.data[DOMAIN][entry.entry_id] anova_data = entry.runtime_data
for coordinator in anova_data.coordinators: for coordinator in anova_data.coordinators:
setup_coordinator(coordinator, async_add_entities) setup_coordinator(coordinator, async_add_entities)

View File

@ -2,7 +2,7 @@
from anova_wifi import AnovaApi from anova_wifi import AnovaApi
from homeassistant.components.anova import DOMAIN from homeassistant.components.anova.const import DOMAIN
from homeassistant.config_entries import ConfigEntryState from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant