1 """The Sonarr component."""
3 from __future__
import annotations
7 from aiopyarr.models.host_configuration
import PyArrHostConfiguration
8 from aiopyarr.sonarr_client
import SonarrClient
26 CONF_WANTED_MAX_ITEMS,
27 DEFAULT_UPCOMING_DAYS,
28 DEFAULT_WANTED_MAX_ITEMS,
32 from .coordinator
import (
33 CalendarDataUpdateCoordinator,
34 CommandsDataUpdateCoordinator,
35 DiskSpaceDataUpdateCoordinator,
36 QueueDataUpdateCoordinator,
37 SeriesDataUpdateCoordinator,
38 SonarrDataUpdateCoordinator,
39 StatusDataUpdateCoordinator,
40 WantedDataUpdateCoordinator,
43 PLATFORMS = [Platform.SENSOR]
47 """Set up Sonarr from a config entry."""
50 CONF_UPCOMING_DAYS: entry.data.get(
51 CONF_UPCOMING_DAYS, DEFAULT_UPCOMING_DAYS
53 CONF_WANTED_MAX_ITEMS: entry.data.get(
54 CONF_WANTED_MAX_ITEMS, DEFAULT_WANTED_MAX_ITEMS
57 hass.config_entries.async_update_entry(entry, options=options)
59 host_configuration = PyArrHostConfiguration(
60 api_token=entry.data[CONF_API_KEY],
61 url=entry.data[CONF_URL],
62 verify_ssl=entry.data[CONF_VERIFY_SSL],
64 sonarr = SonarrClient(
65 host_configuration=host_configuration,
68 entry.async_on_unload(entry.add_update_listener(_async_update_listener))
69 coordinators: dict[str, SonarrDataUpdateCoordinator[Any]] = {
80 for coordinator
in coordinators.values():
81 await coordinator.async_config_entry_first_refresh()
82 if isinstance(coordinator, StatusDataUpdateCoordinator):
83 _version = coordinator.data.version
84 coordinator.system_version = _version
85 hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinators
86 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
92 """Migrate old entry."""
93 LOGGER.debug(
"Migrating from version %s", entry.version)
95 if entry.version == 1:
96 new_proto =
"https" if entry.data[CONF_SSL]
else "http"
97 new_host_port = f
"{entry.data[CONF_HOST]}:{entry.data[CONF_PORT]}"
101 if entry.data[CONF_BASE_PATH].rstrip(
"/")
not in (
"",
"/",
"/api"):
102 new_path = entry.data[CONF_BASE_PATH].rstrip(
"/")
106 CONF_URL: f
"{new_proto}://{new_host_port}{new_path}",
108 hass.config_entries.async_update_entry(entry, data=data, version=2)
110 LOGGER.debug(
"Migration to version %s successful", entry.version)
116 """Unload a config entry."""
117 unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
120 hass.data[DOMAIN].pop(entry.entry_id)
126 """Handle options update."""
127 await hass.config_entries.async_reload(entry.entry_id)
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
bool async_migrate_entry(HomeAssistant hass, ConfigEntry entry)
None _async_update_listener(HomeAssistant hass, ConfigEntry entry)
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
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)