core/homeassistant/components/ourgroceries/coordinator.py

49 lines
1.5 KiB
Python
Raw Normal View History

"""The OurGroceries coordinator."""
from __future__ import annotations
2023-11-27 19:21:07 +00:00
import asyncio
from datetime import timedelta
import logging
from ourgroceries import OurGroceries
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from .const import DOMAIN
SCAN_INTERVAL = 60
_LOGGER = logging.getLogger(__name__)
class OurGroceriesDataUpdateCoordinator(DataUpdateCoordinator[dict[str, dict]]):
"""Class to manage fetching OurGroceries data."""
def __init__(self, hass: HomeAssistant, og: OurGroceries) -> None:
"""Initialize global OurGroceries data updater."""
self.og = og
self.lists: list[dict] = []
self._cache: dict[str, dict] = {}
interval = timedelta(seconds=SCAN_INTERVAL)
super().__init__(
hass,
_LOGGER,
name=DOMAIN,
update_interval=interval,
)
async def _update_list(self, list_id: str, version_id: str) -> None:
old_version = self._cache.get(list_id, {}).get("list", {}).get("versionId", "")
if old_version == version_id:
return
self._cache[list_id] = await self.og.get_list_items(list_id=list_id)
async def _async_update_data(self) -> dict[str, dict]:
"""Fetch data from OurGroceries."""
self.lists = (await self.og.get_my_lists())["shoppingLists"]
await asyncio.gather(
*[self._update_list(sl["id"], sl["versionId"]) for sl in self.lists]
2023-11-27 19:21:07 +00:00
)
return self._cache