Coverage for custom_components/bouncie/coordinator.py: 100%
27 statements
« prev ^ index » next coverage.py v7.2.4, created at 2025-01-04 23:39 +0000
« prev ^ index » next coverage.py v7.2.4, created at 2025-01-04 23:39 +0000
1"""Bouncie data update class."""
2import datetime
3import logging
5from aiohttp.client_exceptions import ClientConnectorError
6from bounciepy import AsyncRESTAPIClient
7from bounciepy.exceptions import BouncieException
8from homeassistant.config_entries import ConfigEntry
9from homeassistant.const import CONF_CLIENT_ID, CONF_CLIENT_SECRET
10from homeassistant.core import HomeAssistant
11from homeassistant.helpers.aiohttp_client import async_get_clientsession
12from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
14from .const import CONF_CODE, CONF_REDIRECT_URI, DOMAIN
17class BouncieDataUpdateCoordinator(DataUpdateCoordinator):
18 """Define Bouncie data updater."""
20 def __init__(
21 self,
22 hass: HomeAssistant,
23 logger: logging.Logger,
24 config_entry: ConfigEntry,
25 update_interval: datetime.timedelta,
26 ) -> None:
27 """Init the coordinator."""
28 self.config_entry = config_entry
29 self._client_id = config_entry.data[CONF_CLIENT_ID]
30 self.session = async_get_clientsession(hass=hass)
31 self.bouncie_client = AsyncRESTAPIClient(
32 client_id=config_entry.data[CONF_CLIENT_ID],
33 client_secret=config_entry.data[CONF_CLIENT_SECRET],
34 redirect_url=config_entry.data[CONF_REDIRECT_URI],
35 auth_code=config_entry.data[CONF_CODE],
36 session=self.session,
37 )
38 super().__init__(
39 hass,
40 logger,
41 name=DOMAIN,
42 update_interval=update_interval,
43 )
45 async def _async_update_data(self):
46 data = {}
47 all_vehicles = None
48 try:
49 all_vehicles = await self.bouncie_client.get_all_vehicles()
50 except (BouncieException, ClientConnectorError) as error:
51 raise UpdateFailed(error) from error
52 data["vehicles"] = all_vehicles
53 return data