"""The Cync integration.""" from __future__ import annotations from pycync import Auth, Cync, User from pycync.exceptions import AuthFailedError, CyncError from homeassistant.const import CONF_ACCESS_TOKEN, Platform from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import ( CONF_AUTHORIZE_STRING, CONF_EXPIRES_AT, CONF_REFRESH_TOKEN, CONF_USER_ID, ) from .coordinator import CyncConfigEntry, CyncCoordinator _PLATFORMS: list[Platform] = [Platform.LIGHT] async def async_setup_entry(hass: HomeAssistant, entry: CyncConfigEntry) -> bool: """Set up Cync from a config entry.""" user_info = User( entry.data[CONF_ACCESS_TOKEN], entry.data[CONF_REFRESH_TOKEN], entry.data[CONF_AUTHORIZE_STRING], entry.data[CONF_USER_ID], expires_at=entry.data[CONF_EXPIRES_AT], ) cync_auth = Auth(async_get_clientsession(hass), user=user_info) try: cync = await Cync.create(cync_auth) except AuthFailedError as ex: raise ConfigEntryAuthFailed("User token invalid") from ex except CyncError as ex: raise ConfigEntryNotReady("Unable to connect to Cync") from ex devices_coordinator = CyncCoordinator(hass, entry, cync) cync.set_update_callback(devices_coordinator.on_data_update) await devices_coordinator.async_config_entry_first_refresh() entry.runtime_data = devices_coordinator await hass.config_entries.async_forward_entry_setups(entry, _PLATFORMS) return True async def async_unload_entry(hass: HomeAssistant, entry: CyncConfigEntry) -> bool: """Unload a config entry.""" cync = entry.runtime_data.cync await cync.shut_down() return await hass.config_entries.async_unload_platforms(entry, _PLATFORMS)