Home Assistant Unofficial Reference 2024.12.1
coordinator.py
Go to the documentation of this file.
1 """The Monzo integration."""
2 
3 from dataclasses import dataclass
4 from datetime import timedelta
5 import logging
6 from pprint import pformat
7 from typing import Any
8 
9 from monzopy import AuthorisationExpiredError, InvalidMonzoAPIResponseError
10 
11 from homeassistant.core import HomeAssistant
12 from homeassistant.exceptions import ConfigEntryAuthFailed
13 from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
14 
15 from .api import AuthenticatedMonzoAPI
16 from .const import DOMAIN
17 
18 _LOGGER = logging.getLogger(__name__)
19 
20 
21 @dataclass
22 class MonzoData:
23  """A dataclass for holding sensor data returned by the DataUpdateCoordinator."""
24 
25  accounts: list[dict[str, Any]]
26  pots: list[dict[str, Any]]
27 
28 
30  """Class to manage fetching Monzo data from the API."""
31 
32  def __init__(self, hass: HomeAssistant, api: AuthenticatedMonzoAPI) -> None:
33  """Initialize."""
34  super().__init__(
35  hass,
36  _LOGGER,
37  name=DOMAIN,
38  update_interval=timedelta(minutes=1),
39  )
40  self.apiapi = api
41 
42  async def _async_update_data(self) -> MonzoData:
43  """Fetch data from Monzo API."""
44  try:
45  accounts = await self.apiapi.user_account.accounts()
46  pots = await self.apiapi.user_account.pots()
47  except AuthorisationExpiredError as err:
48  raise ConfigEntryAuthFailed from err
49  except InvalidMonzoAPIResponseError as err:
50  message = "Invalid Monzo API response."
51  if err.missing_key:
52  _LOGGER.debug(
53  "%s\nMissing key: %s\nResponse:\n%s",
54  message,
55  err.missing_key,
56  pformat(err.response),
57  )
58  message += " Enabling debug logging for details."
59  raise UpdateFailed(message) from err
60 
61  return MonzoData(accounts, pots)
None __init__(self, HomeAssistant hass, AuthenticatedMonzoAPI api)
Definition: coordinator.py:32