1 """Support for YouTube."""
3 from __future__
import annotations
5 from aiohttp.client_exceptions
import ClientError, ClientResponseError
13 async_get_config_entry_implementation,
17 from .api
import AsyncConfigEntryAuth
18 from .const
import AUTH, COORDINATOR, DOMAIN
19 from .coordinator
import YouTubeDataUpdateCoordinator
21 PLATFORMS = [Platform.SENSOR]
25 """Set up YouTube from a config entry."""
30 await auth.check_and_refresh_token()
31 except ClientResponseError
as err:
32 if 400 <= err.status < 500:
34 "OAuth session is not valid, reauth required"
36 raise ConfigEntryNotReady
from err
37 except ClientError
as err:
38 raise ConfigEntryNotReady
from err
41 await coordinator.async_config_entry_first_refresh()
45 hass.data.setdefault(DOMAIN, {})[entry.entry_id] = {
46 COORDINATOR: coordinator,
49 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
55 """Unload a config entry."""
57 if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
58 hass.data[DOMAIN].pop(entry.entry_id)
63 hass: HomeAssistant, entry: ConfigEntry, coordinator: YouTubeDataUpdateCoordinator
65 """Delete all devices created by integration."""
66 channel_ids =
list(coordinator.data)
67 device_registry = dr.async_get(hass)
68 dev_entries = dr.async_entries_for_config_entry(device_registry, entry.entry_id)
69 for dev_entry
in dev_entries:
70 if any(identifier[1]
in channel_ids
for identifier
in dev_entry.identifiers):
71 device_registry.async_update_device(
72 dev_entry.id, remove_config_entry_id=entry.entry_id
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
None delete_devices(HomeAssistant hass, ConfigEntry entry, YouTubeDataUpdateCoordinator coordinator)
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
AbstractOAuth2Implementation async_get_config_entry_implementation(HomeAssistant hass, config_entries.ConfigEntry config_entry)