Use runtime_data for airvisual_pro (#116607)

This commit is contained in:
Marc Mueller 2024-05-02 13:41:32 +02:00 committed by GitHub
parent 64d9fac6db
commit 5e8c9d66fb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 19 additions and 22 deletions

View File

@ -38,6 +38,8 @@ PLATFORMS = [Platform.SENSOR]
UPDATE_INTERVAL = timedelta(minutes=1) UPDATE_INTERVAL = timedelta(minutes=1)
AirVisualProConfigEntry = ConfigEntry["AirVisualProData"]
@dataclass @dataclass
class AirVisualProData: class AirVisualProData:
@ -47,7 +49,9 @@ class AirVisualProData:
node: NodeSamba node: NodeSamba
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_setup_entry(
hass: HomeAssistant, entry: AirVisualProConfigEntry
) -> bool:
"""Set up AirVisual Pro from a config entry.""" """Set up AirVisual Pro from a config entry."""
node = NodeSamba(entry.data[CONF_IP_ADDRESS], entry.data[CONF_PASSWORD]) node = NodeSamba(entry.data[CONF_IP_ADDRESS], entry.data[CONF_PASSWORD])
@ -89,9 +93,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
) )
await coordinator.async_config_entry_first_refresh() await coordinator.async_config_entry_first_refresh()
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = AirVisualProData( entry.runtime_data = AirVisualProData(coordinator=coordinator, node=node)
coordinator=coordinator, node=node
)
async def async_shutdown(_: Event) -> None: async def async_shutdown(_: Event) -> None:
"""Define an event handler to disconnect from the websocket.""" """Define an event handler to disconnect from the websocket."""
@ -110,11 +112,12 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_unload_entry(
hass: HomeAssistant, entry: AirVisualProConfigEntry
) -> 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):
data = hass.data[DOMAIN].pop(entry.entry_id) await entry.runtime_data.node.async_disconnect()
await data.node.async_disconnect()
return unload_ok return unload_ok

View File

@ -5,12 +5,10 @@ from __future__ import annotations
from typing import Any from typing import Any
from homeassistant.components.diagnostics import async_redact_data from homeassistant.components.diagnostics import async_redact_data
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_PASSWORD from homeassistant.const import CONF_PASSWORD
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from . import AirVisualProData from . import AirVisualProConfigEntry
from .const import DOMAIN
CONF_MAC_ADDRESS = "mac_address" CONF_MAC_ADDRESS = "mac_address"
CONF_SERIAL_NUMBER = "serial_number" CONF_SERIAL_NUMBER = "serial_number"
@ -23,15 +21,13 @@ TO_REDACT = {
async def async_get_config_entry_diagnostics( async def async_get_config_entry_diagnostics(
hass: HomeAssistant, entry: ConfigEntry hass: HomeAssistant, entry: AirVisualProConfigEntry
) -> dict[str, Any]: ) -> dict[str, Any]:
"""Return diagnostics for a config entry.""" """Return diagnostics for a config entry."""
data: AirVisualProData = hass.data[DOMAIN][entry.entry_id]
return async_redact_data( return async_redact_data(
{ {
"entry": entry.as_dict(), "entry": entry.as_dict(),
"data": data.coordinator.data, "data": entry.runtime_data.coordinator.data,
}, },
TO_REDACT, TO_REDACT,
) )

View File

@ -12,7 +12,6 @@ from homeassistant.components.sensor import (
SensorEntityDescription, SensorEntityDescription,
SensorStateClass, SensorStateClass,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ( from homeassistant.const import (
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
CONCENTRATION_PARTS_PER_MILLION, CONCENTRATION_PARTS_PER_MILLION,
@ -23,8 +22,7 @@ from homeassistant.const import (
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AirVisualProData, AirVisualProEntity from . import AirVisualProConfigEntry, AirVisualProEntity
from .const import DOMAIN
@dataclass(frozen=True, kw_only=True) @dataclass(frozen=True, kw_only=True)
@ -129,13 +127,13 @@ def async_get_aqi_locale(settings: dict[str, Any]) -> str:
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback hass: HomeAssistant,
entry: AirVisualProConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up AirVisual sensors based on a config entry.""" """Set up AirVisual sensors based on a config entry."""
data: AirVisualProData = hass.data[DOMAIN][entry.entry_id]
async_add_entities( async_add_entities(
AirVisualProSensor(data.coordinator, description) AirVisualProSensor(entry.runtime_data.coordinator, description)
for description in SENSOR_DESCRIPTIONS for description in SENSOR_DESCRIPTIONS
) )

View File

@ -81,7 +81,7 @@ async def setup_airvisual_pro_fixture(hass, config, pro):
return_value=pro, return_value=pro,
), ),
patch("homeassistant.components.airvisual_pro.NodeSamba", return_value=pro), patch("homeassistant.components.airvisual_pro.NodeSamba", return_value=pro),
patch("homeassistant.components.airvisual.PLATFORMS", []), patch("homeassistant.components.airvisual_pro.PLATFORMS", []),
): ):
assert await async_setup_component(hass, DOMAIN, config) assert await async_setup_component(hass, DOMAIN, config)
await hass.async_block_till_done() await hass.async_block_till_done()