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
import asyncio
from dataclasses import dataclass
from datetime import timedelta
from typing import Any
@ -21,19 +22,21 @@ from homeassistant.helpers.update_coordinator import (
UpdateFailed,
)
from .const import (
DATA_ACCOUNT,
DATA_COORDINATOR,
DOMAIN,
LOGGER,
SENSOR_TYPE_NEXT_PICKUP,
)
from .const import DOMAIN, LOGGER, SENSOR_TYPE_NEXT_PICKUP
DEFAULT_UPDATE_INTERVAL = timedelta(hours=1)
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:
"""Set up Ridwell from a config entry."""
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()
hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = {
DATA_ACCOUNT: accounts,
DATA_COORDINATOR: coordinator,
}
hass.data[DOMAIN][entry.entry_id] = RidwellData(
accounts=accounts, coordinator=coordinator
)
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)

View file

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

View file

@ -6,19 +6,17 @@ from typing import Any
from homeassistant.config_entries import ConfigEntry
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(
hass: HomeAssistant, entry: ConfigEntry
) -> dict[str, Any]:
"""Return diagnostics for a config entry."""
coordinator: DataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][
DATA_COORDINATOR
]
data: RidwellData = hass.data[DOMAIN][entry.entry_id]
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.update_coordinator import DataUpdateCoordinator
from . import RidwellEntity
from .const import DATA_ACCOUNT, DATA_COORDINATOR, DOMAIN, SENSOR_TYPE_NEXT_PICKUP
from . import RidwellData, RidwellEntity
from .const import DOMAIN, SENSOR_TYPE_NEXT_PICKUP
ATTR_CATEGORY = "category"
ATTR_PICKUP_STATE = "pickup_state"
@ -37,13 +37,12 @@ async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None:
"""Set up Ridwell sensors based on a config entry."""
accounts = hass.data[DOMAIN][entry.entry_id][DATA_ACCOUNT]
coordinator = hass.data[DOMAIN][entry.entry_id][DATA_COORDINATOR]
data: RidwellData = hass.data[DOMAIN][entry.entry_id]
async_add_entities(
[
RidwellSensor(coordinator, account, SENSOR_DESCRIPTION)
for account in accounts.values()
RidwellSensor(data.coordinator, account, SENSOR_DESCRIPTION)
for account in data.accounts.values()
]
)

View file

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