Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The fitbit component."""
2 
3 from homeassistant.config_entries import ConfigEntry
4 from homeassistant.const import Platform
5 from homeassistant.core import HomeAssistant
6 from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
7 from homeassistant.helpers import config_entry_oauth2_flow
8 
9 from . import api
10 from .const import DOMAIN, FitbitScope
11 from .coordinator import FitbitData, FitbitDeviceCoordinator
12 from .exceptions import FitbitApiException, FitbitAuthException
13 from .model import config_from_entry_data
14 
15 PLATFORMS: list[Platform] = [Platform.SENSOR]
16 
17 
18 async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
19  """Set up fitbit from a config entry."""
20  hass.data.setdefault(DOMAIN, {})
21 
22  implementation = (
23  await config_entry_oauth2_flow.async_get_config_entry_implementation(
24  hass, entry
25  )
26  )
27  session = config_entry_oauth2_flow.OAuth2Session(hass, entry, implementation)
28  fitbit_api = api.OAuthFitbitApi(
29  hass, session, unit_system=entry.data.get("unit_system")
30  )
31  try:
32  await fitbit_api.async_get_access_token()
33  except FitbitAuthException as err:
34  raise ConfigEntryAuthFailed from err
35  except FitbitApiException as err:
36  raise ConfigEntryNotReady from err
37 
38  fitbit_config = config_from_entry_data(entry.data)
39  coordinator: FitbitDeviceCoordinator | None = None
40  if fitbit_config.is_allowed_resource(FitbitScope.DEVICE, "devices/battery"):
41  coordinator = FitbitDeviceCoordinator(hass, fitbit_api)
42  await coordinator.async_config_entry_first_refresh()
43 
44  hass.data[DOMAIN][entry.entry_id] = FitbitData(
45  api=fitbit_api, device_coordinator=coordinator
46  )
47 
48  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
49 
50  return True
51 
52 
53 async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
54  """Unload a config entry."""
55  if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
56  hass.data[DOMAIN].pop(entry.entry_id)
57 
58  return unload_ok
FitbitConfig config_from_entry_data(Mapping[str, Any] data)
Definition: model.py:65
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:53
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:18