Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The microBees integration."""
2 
3 from dataclasses import dataclass
4 from http import HTTPStatus
5 
6 import aiohttp
7 from microBeesPy import MicroBees
8 
9 from homeassistant.config_entries import ConfigEntry
10 from homeassistant.const import CONF_ACCESS_TOKEN
11 from homeassistant.core import HomeAssistant
12 from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
13 from homeassistant.helpers import config_entry_oauth2_flow
14 
15 from .const import DOMAIN, PLATFORMS
16 from .coordinator import MicroBeesUpdateCoordinator
17 
18 
19 @dataclass(frozen=True, kw_only=True)
21  """Microbees data stored in the Home Assistant data object."""
22 
23  connector: MicroBees
24  coordinator: MicroBeesUpdateCoordinator
25  session: config_entry_oauth2_flow.OAuth2Session
26 
27 
28 async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
29  """Set up microBees from a config entry."""
30  implementation = (
31  await config_entry_oauth2_flow.async_get_config_entry_implementation(
32  hass, entry
33  )
34  )
35 
36  session = config_entry_oauth2_flow.OAuth2Session(hass, entry, implementation)
37  try:
38  await session.async_ensure_token_valid()
39  except aiohttp.ClientResponseError as ex:
40  if ex.status in (
41  HTTPStatus.BAD_REQUEST,
42  HTTPStatus.UNAUTHORIZED,
43  HTTPStatus.FORBIDDEN,
44  ):
45  raise ConfigEntryAuthFailed("Token not valid, trigger renewal") from ex
46  raise ConfigEntryNotReady from ex
47  microbees = MicroBees(token=session.token[CONF_ACCESS_TOKEN])
48  coordinator = MicroBeesUpdateCoordinator(hass, microbees)
49  await coordinator.async_config_entry_first_refresh()
50  hass.data.setdefault(DOMAIN, {})[entry.entry_id] = HomeAssistantMicroBeesData(
51  connector=microbees,
52  coordinator=coordinator,
53  session=session,
54  )
55  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
56  return True
57 
58 
59 async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
60  """Unload a config entry."""
61  if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
62  hass.data[DOMAIN].pop(entry.entry_id)
63 
64  return unload_ok
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:28
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:59