hass-core/homeassistant/components/monzo/coordinator.py
Jake Martin a3b60cb054
Add Monzo config reauth (#117726)
* Add reauth config flow

* Trigger reauth on Monzo AuthorisaionExpiredError

* Add missing abort strings

* Use FlowResultType enum

* One extra == swapped for is

* Use helper in reauth

* Patch correct function in reauth test

* Remove unecessary **

* Swap patch and calls check for access token checks

* Do reauth trigger test without patch

* Remove unnecessary str() on user_id - always str anyway

* Update tests/components/monzo/test_config_flow.py

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-06-03 13:18:15 +02:00

49 lines
1.4 KiB
Python

"""The Monzo integration."""
from dataclasses import dataclass
from datetime import timedelta
import logging
from typing import Any
from monzopy import AuthorisationExpiredError
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from .api import AuthenticatedMonzoAPI
from .const import DOMAIN
_LOGGER = logging.getLogger(__name__)
@dataclass
class MonzoData:
"""A dataclass for holding sensor data returned by the DataUpdateCoordinator."""
accounts: list[dict[str, Any]]
pots: list[dict[str, Any]]
class MonzoCoordinator(DataUpdateCoordinator[MonzoData]):
"""Class to manage fetching Monzo data from the API."""
def __init__(self, hass: HomeAssistant, api: AuthenticatedMonzoAPI) -> None:
"""Initialize."""
super().__init__(
hass,
_LOGGER,
name=DOMAIN,
update_interval=timedelta(minutes=1),
)
self.api = api
async def _async_update_data(self) -> MonzoData:
"""Fetch data from Monzo API."""
try:
accounts = await self.api.user_account.accounts()
pots = await self.api.user_account.pots()
except AuthorisationExpiredError as err:
raise ConfigEntryAuthFailed from err
return MonzoData(accounts, pots)