Transition Guardian to use a DataUpdateCoordinator (#37380)
* Migrate Guardian to use the DataUpdateCoordinator * Finish work * Cleanup * Don't use UpdateFailed error * Code cleanup * Code cleanup * Remove unnecessary change * Code review * Code review * Use a subclass of DataUpdateCoordinator * Make sure to pop client upon unload * Adjust coverage
This commit is contained in:
parent
80c108c25a
commit
0067b6a84d
7 changed files with 320 additions and 251 deletions
49
homeassistant/components/guardian/util.py
Normal file
49
homeassistant/components/guardian/util.py
Normal file
|
@ -0,0 +1,49 @@
|
|||
"""Define Guardian-specific utilities."""
|
||||
import asyncio
|
||||
from datetime import timedelta
|
||||
from typing import Awaitable, Callable
|
||||
|
||||
from aioguardian import Client
|
||||
from aioguardian.errors import GuardianError
|
||||
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
||||
|
||||
from .const import LOGGER
|
||||
|
||||
DEFAULT_UPDATE_INTERVAL = timedelta(seconds=30)
|
||||
|
||||
|
||||
class GuardianDataUpdateCoordinator(DataUpdateCoordinator):
|
||||
"""Define an extended DataUpdateCoordinator with some Guardian goodies."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
hass: HomeAssistant,
|
||||
*,
|
||||
client: Client,
|
||||
api_name: str,
|
||||
api_coro: Callable[..., Awaitable],
|
||||
api_lock: asyncio.Lock,
|
||||
valve_controller_uid: str,
|
||||
):
|
||||
"""Initialize."""
|
||||
super().__init__(
|
||||
hass,
|
||||
LOGGER,
|
||||
name=f"{valve_controller_uid}_{api_name}",
|
||||
update_interval=DEFAULT_UPDATE_INTERVAL,
|
||||
)
|
||||
|
||||
self._api_coro = api_coro
|
||||
self._api_lock = api_lock
|
||||
self._client = client
|
||||
|
||||
async def _async_update_data(self) -> dict:
|
||||
"""Execute a "locked" API request against the valve controller."""
|
||||
async with self._api_lock, self._client:
|
||||
try:
|
||||
resp = await self._api_coro()
|
||||
except GuardianError as err:
|
||||
raise UpdateFailed(err)
|
||||
return resp["data"]
|
Loading…
Add table
Add a link
Reference in a new issue