Explicitly pass in the config_entry in lidarr coordinator (#138111)

explicitly pass in the config_entry in coordinator
This commit is contained in:
Michael 2025-02-09 19:41:44 +01:00 committed by GitHub
parent e1ed46f593
commit 9be5976807
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 29 additions and 23 deletions

View File

@ -2,12 +2,11 @@
from __future__ import annotations from __future__ import annotations
from dataclasses import dataclass, fields from dataclasses import fields
from aiopyarr.lidarr_client import LidarrClient from aiopyarr.lidarr_client import LidarrClient
from aiopyarr.models.host_configuration import PyArrHostConfiguration from aiopyarr.models.host_configuration import PyArrHostConfiguration
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_API_KEY, CONF_URL, CONF_VERIFY_SSL, Platform from homeassistant.const import CONF_API_KEY, CONF_URL, CONF_VERIFY_SSL, Platform
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr from homeassistant.helpers import device_registry as dr
@ -18,27 +17,16 @@ from .const import DEFAULT_NAME, DOMAIN
from .coordinator import ( from .coordinator import (
AlbumsDataUpdateCoordinator, AlbumsDataUpdateCoordinator,
DiskSpaceDataUpdateCoordinator, DiskSpaceDataUpdateCoordinator,
LidarrConfigEntry,
LidarrData,
QueueDataUpdateCoordinator, QueueDataUpdateCoordinator,
StatusDataUpdateCoordinator, StatusDataUpdateCoordinator,
WantedDataUpdateCoordinator, WantedDataUpdateCoordinator,
) )
type LidarrConfigEntry = ConfigEntry[LidarrData]
PLATFORMS = [Platform.SENSOR] PLATFORMS = [Platform.SENSOR]
@dataclass(kw_only=True, slots=True)
class LidarrData:
"""Lidarr data type."""
disk_space: DiskSpaceDataUpdateCoordinator
queue: QueueDataUpdateCoordinator
status: StatusDataUpdateCoordinator
wanted: WantedDataUpdateCoordinator
albums: AlbumsDataUpdateCoordinator
async def async_setup_entry(hass: HomeAssistant, entry: LidarrConfigEntry) -> bool: async def async_setup_entry(hass: HomeAssistant, entry: LidarrConfigEntry) -> bool:
"""Set up Lidarr from a config entry.""" """Set up Lidarr from a config entry."""
host_configuration = PyArrHostConfiguration( host_configuration = PyArrHostConfiguration(
@ -52,11 +40,13 @@ async def async_setup_entry(hass: HomeAssistant, entry: LidarrConfigEntry) -> bo
request_timeout=60, request_timeout=60,
) )
data = LidarrData( data = LidarrData(
disk_space=DiskSpaceDataUpdateCoordinator(hass, host_configuration, lidarr), disk_space=DiskSpaceDataUpdateCoordinator(
queue=QueueDataUpdateCoordinator(hass, host_configuration, lidarr), hass, entry, host_configuration, lidarr
status=StatusDataUpdateCoordinator(hass, host_configuration, lidarr), ),
wanted=WantedDataUpdateCoordinator(hass, host_configuration, lidarr), queue=QueueDataUpdateCoordinator(hass, entry, host_configuration, lidarr),
albums=AlbumsDataUpdateCoordinator(hass, host_configuration, lidarr), status=StatusDataUpdateCoordinator(hass, entry, host_configuration, lidarr),
wanted=WantedDataUpdateCoordinator(hass, entry, host_configuration, lidarr),
albums=AlbumsDataUpdateCoordinator(hass, entry, host_configuration, lidarr),
) )
for field in fields(data): for field in fields(data):
coordinator = getattr(data, field.name) coordinator = getattr(data, field.name)

View File

@ -3,6 +3,7 @@
from __future__ import annotations from __future__ import annotations
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from dataclasses import dataclass
from datetime import timedelta from datetime import timedelta
from typing import Generic, TypeVar, cast from typing import Generic, TypeVar, cast
@ -17,17 +18,32 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, Upda
from .const import DEFAULT_MAX_RECORDS, DOMAIN, LOGGER from .const import DEFAULT_MAX_RECORDS, DOMAIN, LOGGER
@dataclass(kw_only=True, slots=True)
class LidarrData:
"""Lidarr data type."""
disk_space: DiskSpaceDataUpdateCoordinator
queue: QueueDataUpdateCoordinator
status: StatusDataUpdateCoordinator
wanted: WantedDataUpdateCoordinator
albums: AlbumsDataUpdateCoordinator
T = TypeVar("T", bound=list[LidarrRootFolder] | LidarrQueue | str | LidarrAlbum | int) T = TypeVar("T", bound=list[LidarrRootFolder] | LidarrQueue | str | LidarrAlbum | int)
type LidarrConfigEntry = ConfigEntry[LidarrData]
class LidarrDataUpdateCoordinator(DataUpdateCoordinator[T], Generic[T], ABC): class LidarrDataUpdateCoordinator(DataUpdateCoordinator[T], Generic[T], ABC):
"""Data update coordinator for the Lidarr integration.""" """Data update coordinator for the Lidarr integration."""
config_entry: ConfigEntry config_entry: LidarrConfigEntry
def __init__( def __init__(
self, self,
hass: HomeAssistant, hass: HomeAssistant,
config_entry: LidarrConfigEntry,
host_configuration: PyArrHostConfiguration, host_configuration: PyArrHostConfiguration,
api_client: LidarrClient, api_client: LidarrClient,
) -> None: ) -> None:
@ -35,6 +51,7 @@ class LidarrDataUpdateCoordinator(DataUpdateCoordinator[T], Generic[T], ABC):
super().__init__( super().__init__(
hass=hass, hass=hass,
logger=LOGGER, logger=LOGGER,
config_entry=config_entry,
name=DOMAIN, name=DOMAIN,
update_interval=timedelta(seconds=30), update_interval=timedelta(seconds=30),
) )

View File

@ -18,9 +18,8 @@ from homeassistant.const import UnitOfInformation
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import LidarrConfigEntry
from .const import BYTE_SIZES from .const import BYTE_SIZES
from .coordinator import LidarrDataUpdateCoordinator, T from .coordinator import LidarrConfigEntry, LidarrDataUpdateCoordinator, T
from .entity import LidarrEntity from .entity import LidarrEntity