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

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

View File

@ -6,6 +6,7 @@ import datetime
import logging import logging
from typing import Final from typing import Final
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed from homeassistant.exceptions import ConfigEntryAuthFailed
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
@ -19,13 +20,25 @@ _LOGGER = logging.getLogger(__name__)
UPDATE_INTERVAL: Final = datetime.timedelta(minutes=30) UPDATE_INTERVAL: Final = datetime.timedelta(minutes=30)
TIMEOUT = 10 TIMEOUT = 10
type FitbitConfigEntry = ConfigEntry[FitbitData]
class FitbitDeviceCoordinator(DataUpdateCoordinator[dict[str, FitbitDevice]]): class FitbitDeviceCoordinator(DataUpdateCoordinator[dict[str, FitbitDevice]]):
"""Coordinator for fetching fitbit devices from the API.""" """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.""" """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 self._api = api
async def _async_update_data(self) -> dict[str, FitbitDevice]: 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.icon import icon_for_battery_level
from homeassistant.helpers.update_coordinator import CoordinatorEntity from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import FitbitConfigEntry
from .api import FitbitApi from .api import FitbitApi
from .const import ATTRIBUTION, BATTERY_LEVELS, DOMAIN, FitbitScope, FitbitUnitSystem from .const import ATTRIBUTION, BATTERY_LEVELS, DOMAIN, FitbitScope, FitbitUnitSystem
from .coordinator import FitbitDeviceCoordinator from .coordinator import FitbitConfigEntry, FitbitDeviceCoordinator
from .exceptions import FitbitApiException, FitbitAuthException from .exceptions import FitbitApiException, FitbitAuthException
from .model import FitbitDevice, config_from_entry_data from .model import FitbitDevice, config_from_entry_data