diff --git a/homeassistant/components/myuplink/__init__.py b/homeassistant/components/myuplink/__init__.py index 9d08144c77e..5910fe0cf6a 100644 --- a/homeassistant/components/myuplink/__init__.py +++ b/homeassistant/components/myuplink/__init__.py @@ -1,12 +1,15 @@ """The myUplink integration.""" from __future__ import annotations +from http import HTTPStatus + +from aiohttp import ClientError, ClientResponseError from myuplink import MyUplinkAPI from homeassistant.config_entries import ConfigEntry from homeassistant.const import Platform from homeassistant.core import HomeAssistant, callback -from homeassistant.exceptions import ConfigEntryAuthFailed +from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady from homeassistant.helpers import ( aiohttp_client, config_entry_oauth2_flow, @@ -34,12 +37,20 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> b ) ) session = config_entry_oauth2_flow.OAuth2Session(hass, config_entry, implementation) + auth = AsyncConfigEntryAuth(aiohttp_client.async_get_clientsession(hass), session) + + try: + await auth.async_get_access_token() + except ClientResponseError as err: + if err.status in {HTTPStatus.UNAUTHORIZED, HTTPStatus.FORBIDDEN}: + raise ConfigEntryAuthFailed from err + raise ConfigEntryNotReady from err + except ClientError as err: + raise ConfigEntryNotReady from err if set(config_entry.data["token"]["scope"].split(" ")) != set(OAUTH2_SCOPES): raise ConfigEntryAuthFailed("Incorrect OAuth2 scope") - auth = AsyncConfigEntryAuth(aiohttp_client.async_get_clientsession(hass), session) - # Setup MyUplinkAPI and coordinator for data fetch api = MyUplinkAPI(auth) coordinator = MyUplinkDataCoordinator(hass, api) diff --git a/tests/components/myuplink/test_init.py b/tests/components/myuplink/test_init.py index 4134d2586df..728bcbc702f 100644 --- a/tests/components/myuplink/test_init.py +++ b/tests/components/myuplink/test_init.py @@ -38,7 +38,7 @@ async def test_load_unload_entry( ( time.time() - 3600, http.HTTPStatus.UNAUTHORIZED, - ConfigEntryState.SETUP_RETRY, # Will trigger reauth in the future + ConfigEntryState.SETUP_ERROR, ), ( time.time() - 3600,