Explicitly pass in the config_entry in fitbit coordinator (#137808)

explicitly pass in the config_entry in coordinator
pull/137849/head
Michael 2025-02-08 14:06:50 +01:00 committed by GitHub
parent 78fce5112d
commit daccb3e9b3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 18 additions and 10 deletions

View File

@ -1,6 +1,5 @@
"""The fitbit component."""
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
@ -8,16 +7,13 @@ from homeassistant.helpers import config_entry_oauth2_flow
from . import api
from .const import FitbitScope
from .coordinator import FitbitData, FitbitDeviceCoordinator
from .coordinator import FitbitConfigEntry, FitbitData, FitbitDeviceCoordinator
from .exceptions import FitbitApiException, FitbitAuthException
from .model import config_from_entry_data
PLATFORMS: list[Platform] = [Platform.SENSOR]
type FitbitConfigEntry = ConfigEntry[FitbitData]
async def async_setup_entry(hass: HomeAssistant, entry: FitbitConfigEntry) -> bool:
"""Set up fitbit from a config entry."""
implementation = (
@ -39,7 +35,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: FitbitConfigEntry) -> bo
fitbit_config = config_from_entry_data(entry.data)
coordinator: FitbitDeviceCoordinator | None = None
if fitbit_config.is_allowed_resource(FitbitScope.DEVICE, "devices/battery"):
coordinator = FitbitDeviceCoordinator(hass, fitbit_api)
coordinator = FitbitDeviceCoordinator(hass, entry, fitbit_api)
await coordinator.async_config_entry_first_refresh()
entry.runtime_data = FitbitData(api=fitbit_api, device_coordinator=coordinator)

View File

@ -6,6 +6,7 @@ import datetime
import logging
from typing import Final
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
@ -19,13 +20,25 @@ _LOGGER = logging.getLogger(__name__)
UPDATE_INTERVAL: Final = datetime.timedelta(minutes=30)
TIMEOUT = 10
type FitbitConfigEntry = ConfigEntry[FitbitData]
class FitbitDeviceCoordinator(DataUpdateCoordinator[dict[str, FitbitDevice]]):
"""Coordinator for fetching fitbit devices from the API."""
def __init__(self, hass: HomeAssistant, api: FitbitApi) -> None:
config_entry: FitbitConfigEntry
def __init__(
self, hass: HomeAssistant, config_entry: FitbitConfigEntry, api: FitbitApi
) -> None:
"""Initialize FitbitDeviceCoordinator."""
super().__init__(hass, _LOGGER, name="Fitbit", update_interval=UPDATE_INTERVAL)
super().__init__(
hass,
_LOGGER,
config_entry=config_entry,
name="Fitbit",
update_interval=UPDATE_INTERVAL,
)
self._api = api
async def _async_update_data(self) -> dict[str, FitbitDevice]:

View File

@ -28,10 +28,9 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.icon import icon_for_battery_level
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import FitbitConfigEntry
from .api import FitbitApi
from .const import ATTRIBUTION, BATTERY_LEVELS, DOMAIN, FitbitScope, FitbitUnitSystem
from .coordinator import FitbitDeviceCoordinator
from .coordinator import FitbitConfigEntry, FitbitDeviceCoordinator
from .exceptions import FitbitApiException, FitbitAuthException
from .model import FitbitDevice, config_from_entry_data