Modify Ridwell to store a single dataclass in hass.data (#75457)

This commit is contained in:
Aaron Bach 2022-07-20 03:18:26 -06:00 committed by GitHub
parent 2b752355d6
commit 3d31e62683
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 27 additions and 32 deletions

View File

@ -2,6 +2,7 @@
from __future__ import annotations from __future__ import annotations
import asyncio import asyncio
from dataclasses import dataclass
from datetime import timedelta from datetime import timedelta
from typing import Any from typing import Any
@ -21,19 +22,21 @@ from homeassistant.helpers.update_coordinator import (
UpdateFailed, UpdateFailed,
) )
from .const import ( from .const import DOMAIN, LOGGER, SENSOR_TYPE_NEXT_PICKUP
DATA_ACCOUNT,
DATA_COORDINATOR,
DOMAIN,
LOGGER,
SENSOR_TYPE_NEXT_PICKUP,
)
DEFAULT_UPDATE_INTERVAL = timedelta(hours=1) DEFAULT_UPDATE_INTERVAL = timedelta(hours=1)
PLATFORMS: list[Platform] = [Platform.SENSOR, Platform.SWITCH] PLATFORMS: list[Platform] = [Platform.SENSOR, Platform.SWITCH]
@dataclass
class RidwellData:
"""Define an object to be stored in `hass.data`."""
accounts: dict[str, RidwellAccount]
coordinator: DataUpdateCoordinator
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up Ridwell from a config entry.""" """Set up Ridwell from a config entry."""
session = aiohttp_client.async_get_clientsession(hass) session = aiohttp_client.async_get_clientsession(hass)
@ -77,10 +80,9 @@ 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, {}) hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = { hass.data[DOMAIN][entry.entry_id] = RidwellData(
DATA_ACCOUNT: accounts, accounts=accounts, coordinator=coordinator
DATA_COORDINATOR: coordinator, )
}
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)

View File

@ -5,7 +5,4 @@ DOMAIN = "ridwell"
LOGGER = logging.getLogger(__package__) LOGGER = logging.getLogger(__package__)
DATA_ACCOUNT = "account"
DATA_COORDINATOR = "coordinator"
SENSOR_TYPE_NEXT_PICKUP = "next_pickup" SENSOR_TYPE_NEXT_PICKUP = "next_pickup"

View File

@ -6,19 +6,17 @@ from typing import Any
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from .const import DATA_COORDINATOR, DOMAIN from . import RidwellData
from .const import DOMAIN
async def async_get_config_entry_diagnostics( async def async_get_config_entry_diagnostics(
hass: HomeAssistant, entry: ConfigEntry hass: HomeAssistant, entry: ConfigEntry
) -> dict[str, Any]: ) -> dict[str, Any]:
"""Return diagnostics for a config entry.""" """Return diagnostics for a config entry."""
coordinator: DataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][ data: RidwellData = hass.data[DOMAIN][entry.entry_id]
DATA_COORDINATOR
]
return { return {
"data": [dataclasses.asdict(event) for event in coordinator.data.values()], "data": [dataclasses.asdict(event) for event in data.coordinator.data.values()]
} }

View File

@ -18,8 +18,8 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType from homeassistant.helpers.typing import StateType
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from . import RidwellEntity from . import RidwellData, RidwellEntity
from .const import DATA_ACCOUNT, DATA_COORDINATOR, DOMAIN, SENSOR_TYPE_NEXT_PICKUP from .const import DOMAIN, SENSOR_TYPE_NEXT_PICKUP
ATTR_CATEGORY = "category" ATTR_CATEGORY = "category"
ATTR_PICKUP_STATE = "pickup_state" ATTR_PICKUP_STATE = "pickup_state"
@ -37,13 +37,12 @@ async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None: ) -> None:
"""Set up Ridwell sensors based on a config entry.""" """Set up Ridwell sensors based on a config entry."""
accounts = hass.data[DOMAIN][entry.entry_id][DATA_ACCOUNT] data: RidwellData = hass.data[DOMAIN][entry.entry_id]
coordinator = hass.data[DOMAIN][entry.entry_id][DATA_COORDINATOR]
async_add_entities( async_add_entities(
[ [
RidwellSensor(coordinator, account, SENSOR_DESCRIPTION) RidwellSensor(data.coordinator, account, SENSOR_DESCRIPTION)
for account in accounts.values() for account in data.accounts.values()
] ]
) )

View File

@ -12,8 +12,8 @@ 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 . import RidwellEntity from . import RidwellData, RidwellEntity
from .const import DATA_ACCOUNT, DATA_COORDINATOR, DOMAIN from .const import DOMAIN
SWITCH_TYPE_OPT_IN = "opt_in" SWITCH_TYPE_OPT_IN = "opt_in"
@ -28,13 +28,12 @@ async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None: ) -> None:
"""Set up Ridwell sensors based on a config entry.""" """Set up Ridwell sensors based on a config entry."""
accounts = hass.data[DOMAIN][entry.entry_id][DATA_ACCOUNT] data: RidwellData = hass.data[DOMAIN][entry.entry_id]
coordinator = hass.data[DOMAIN][entry.entry_id][DATA_COORDINATOR]
async_add_entities( async_add_entities(
[ [
RidwellSwitch(coordinator, account, SWITCH_DESCRIPTION) RidwellSwitch(data.coordinator, account, SWITCH_DESCRIPTION)
for account in accounts.values() for account in data.accounts.values()
] ]
) )