Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The Radarr component."""
2 
3 from __future__ import annotations
4 
5 from dataclasses import dataclass, fields
6 
7 from aiopyarr.models.host_configuration import PyArrHostConfiguration
8 from aiopyarr.radarr_client import RadarrClient
9 
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.const import CONF_API_KEY, CONF_URL, CONF_VERIFY_SSL, Platform
12 from homeassistant.core import HomeAssistant
13 from homeassistant.helpers.aiohttp_client import async_get_clientsession
14 
15 from .coordinator import (
16  CalendarUpdateCoordinator,
17  DiskSpaceDataUpdateCoordinator,
18  HealthDataUpdateCoordinator,
19  MoviesDataUpdateCoordinator,
20  QueueDataUpdateCoordinator,
21  RadarrDataUpdateCoordinator,
22  StatusDataUpdateCoordinator,
23 )
24 
25 PLATFORMS = [Platform.BINARY_SENSOR, Platform.CALENDAR, Platform.SENSOR]
26 type RadarrConfigEntry = ConfigEntry[RadarrData]
27 
28 
29 @dataclass(kw_only=True, slots=True)
30 class RadarrData:
31  """Radarr data type."""
32 
33  calendar: CalendarUpdateCoordinator
34  disk_space: DiskSpaceDataUpdateCoordinator
35  health: HealthDataUpdateCoordinator
36  movie: MoviesDataUpdateCoordinator
37  queue: QueueDataUpdateCoordinator
38  status: StatusDataUpdateCoordinator
39 
40 
41 async def async_setup_entry(hass: HomeAssistant, entry: RadarrConfigEntry) -> bool:
42  """Set up Radarr from a config entry."""
43  host_configuration = PyArrHostConfiguration(
44  api_token=entry.data[CONF_API_KEY],
45  verify_ssl=entry.data[CONF_VERIFY_SSL],
46  url=entry.data[CONF_URL],
47  )
48  radarr = RadarrClient(
49  host_configuration=host_configuration,
50  session=async_get_clientsession(hass, entry.data[CONF_VERIFY_SSL]),
51  )
52  data = RadarrData(
53  calendar=CalendarUpdateCoordinator(hass, host_configuration, radarr),
54  disk_space=DiskSpaceDataUpdateCoordinator(hass, host_configuration, radarr),
55  health=HealthDataUpdateCoordinator(hass, host_configuration, radarr),
56  movie=MoviesDataUpdateCoordinator(hass, host_configuration, radarr),
57  queue=QueueDataUpdateCoordinator(hass, host_configuration, radarr),
58  status=StatusDataUpdateCoordinator(hass, host_configuration, radarr),
59  )
60  for field in fields(data):
61  coordinator: RadarrDataUpdateCoordinator = getattr(data, field.name)
62  # Movie update can take a while depending on Radarr database size
63  if field.name == "movie":
64  entry.async_create_background_task(
65  hass,
66  coordinator.async_config_entry_first_refresh(),
67  "radarr.movie-coordinator-first-refresh",
68  )
69  continue
70  await coordinator.async_config_entry_first_refresh()
71  entry.runtime_data = data
72  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
73 
74  return True
75 
76 
77 async def async_unload_entry(hass: HomeAssistant, entry: RadarrConfigEntry) -> bool:
78  """Unload a config entry."""
79  return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
bool async_unload_entry(HomeAssistant hass, RadarrConfigEntry entry)
Definition: __init__.py:77
bool async_setup_entry(HomeAssistant hass, RadarrConfigEntry entry)
Definition: __init__.py:41
aiohttp.ClientSession async_get_clientsession(HomeAssistant hass, bool verify_ssl=True, socket.AddressFamily family=socket.AF_UNSPEC, ssl_util.SSLCipherList ssl_cipher=ssl_util.SSLCipherList.PYTHON_DEFAULT)