"""The Monzo integration.""" import logging from homeassistant.const import Platform from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.config_entry_oauth2_flow import ( ImplementationUnavailableError, OAuth2Session, async_get_config_entry_implementation, ) from .api import AuthenticatedMonzoAPI from .const import DOMAIN from .coordinator import MonzoConfigEntry, MonzoCoordinator _LOGGER = logging.getLogger(__name__) PLATFORMS: list[Platform] = [Platform.SENSOR] async def async_migrate_entry(hass: HomeAssistant, entry: MonzoConfigEntry) -> bool: """Migrate entry.""" _LOGGER.debug("Migrating from version %s.%s", entry.version, entry.minor_version) if entry.version == 1: # 1 -> 1.2: Unique ID from integer to string if entry.minor_version == 1: minor_version = 2 hass.config_entries.async_update_entry( entry, unique_id=str(entry.unique_id), minor_version=minor_version ) _LOGGER.debug("Migration successful") return True async def async_setup_entry(hass: HomeAssistant, entry: MonzoConfigEntry) -> bool: """Set up Monzo from a config entry.""" try: 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 session = OAuth2Session(hass, entry, implementation) external_api = AuthenticatedMonzoAPI(async_get_clientsession(hass), session) coordinator = MonzoCoordinator(hass, entry, external_api) await coordinator.async_config_entry_first_refresh() entry.runtime_data = coordinator await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) return True async def async_unload_entry(hass: HomeAssistant, entry: MonzoConfigEntry) -> bool: """Unload a config entry.""" return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)