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

1"""Bouncie data update class.""" 

2import datetime 

3import logging 

4 

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 

13 

14from .const import CONF_CODE, CONF_REDIRECT_URI, DOMAIN 

15 

16 

17class BouncieDataUpdateCoordinator(DataUpdateCoordinator): 

18 """Define Bouncie data updater.""" 

19 

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 ) 

44 

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