mirror of
https://github.com/home-assistant/core.git
synced 2026-04-02 00:20:30 +01:00
65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
"""The Dropbox integration."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from python_dropbox_api import (
|
|
DropboxAPIClient,
|
|
DropboxAuthException,
|
|
DropboxUnknownException,
|
|
)
|
|
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
|
|
from homeassistant.helpers import aiohttp_client
|
|
from homeassistant.helpers.config_entry_oauth2_flow import (
|
|
ImplementationUnavailableError,
|
|
OAuth2Session,
|
|
async_get_config_entry_implementation,
|
|
)
|
|
|
|
from .auth import DropboxConfigEntryAuth
|
|
from .const import DATA_BACKUP_AGENT_LISTENERS, DOMAIN
|
|
|
|
type DropboxConfigEntry = ConfigEntry[DropboxAPIClient]
|
|
|
|
|
|
async def async_setup_entry(hass: HomeAssistant, entry: DropboxConfigEntry) -> bool:
|
|
"""Set up Dropbox from a config entry."""
|
|
try:
|
|
oauth2_implementation = await async_get_config_entry_implementation(hass, entry)
|
|
except ImplementationUnavailableError as err:
|
|
raise ConfigEntryNotReady(
|
|
translation_domain=DOMAIN,
|
|
translation_key="oauth2_implementation_unavailable",
|
|
) from err
|
|
oauth2_session = OAuth2Session(hass, entry, oauth2_implementation)
|
|
|
|
auth = DropboxConfigEntryAuth(
|
|
aiohttp_client.async_get_clientsession(hass), oauth2_session
|
|
)
|
|
|
|
client = DropboxAPIClient(auth)
|
|
|
|
try:
|
|
await client.get_account_info()
|
|
except DropboxAuthException as err:
|
|
raise ConfigEntryAuthFailed from err
|
|
except (DropboxUnknownException, TimeoutError) as err:
|
|
raise ConfigEntryNotReady from err
|
|
|
|
entry.runtime_data = client
|
|
|
|
def async_notify_backup_listeners() -> None:
|
|
for listener in hass.data.get(DATA_BACKUP_AGENT_LISTENERS, []):
|
|
listener()
|
|
|
|
entry.async_on_unload(entry.async_on_state_change(async_notify_backup_listeners))
|
|
|
|
return True
|
|
|
|
|
|
async def async_unload_entry(hass: HomeAssistant, entry: DropboxConfigEntry) -> bool:
|
|
"""Unload a config entry."""
|
|
return True
|