mirror of
https://github.com/home-assistant/core.git
synced 2025-07-12 15:57:06 +00:00
Improve exceptions in Alexa Devices (#148260)
This commit is contained in:
parent
a35299d94c
commit
6e63c17b39
@ -6,7 +6,12 @@ from collections.abc import Mapping
|
|||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from aioamazondevices.api import AmazonEchoApi
|
from aioamazondevices.api import AmazonEchoApi
|
||||||
from aioamazondevices.exceptions import CannotAuthenticate, CannotConnect, WrongCountry
|
from aioamazondevices.exceptions import (
|
||||||
|
CannotAuthenticate,
|
||||||
|
CannotConnect,
|
||||||
|
CannotRetrieveData,
|
||||||
|
WrongCountry,
|
||||||
|
)
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
|
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
|
||||||
@ -57,6 +62,8 @@ class AmazonDevicesConfigFlow(ConfigFlow, domain=DOMAIN):
|
|||||||
errors["base"] = "cannot_connect"
|
errors["base"] = "cannot_connect"
|
||||||
except CannotAuthenticate:
|
except CannotAuthenticate:
|
||||||
errors["base"] = "invalid_auth"
|
errors["base"] = "invalid_auth"
|
||||||
|
except CannotRetrieveData:
|
||||||
|
errors["base"] = "cannot_retrieve_data"
|
||||||
except WrongCountry:
|
except WrongCountry:
|
||||||
errors["base"] = "wrong_country"
|
errors["base"] = "wrong_country"
|
||||||
else:
|
else:
|
||||||
@ -106,6 +113,8 @@ class AmazonDevicesConfigFlow(ConfigFlow, domain=DOMAIN):
|
|||||||
errors["base"] = "cannot_connect"
|
errors["base"] = "cannot_connect"
|
||||||
except CannotAuthenticate:
|
except CannotAuthenticate:
|
||||||
errors["base"] = "invalid_auth"
|
errors["base"] = "invalid_auth"
|
||||||
|
except CannotRetrieveData:
|
||||||
|
errors["base"] = "cannot_retrieve_data"
|
||||||
else:
|
else:
|
||||||
return self.async_update_reload_and_abort(
|
return self.async_update_reload_and_abort(
|
||||||
reauth_entry,
|
reauth_entry,
|
||||||
|
@ -52,8 +52,18 @@ class AmazonDevicesCoordinator(DataUpdateCoordinator[dict[str, AmazonDevice]]):
|
|||||||
try:
|
try:
|
||||||
await self.api.login_mode_stored_data()
|
await self.api.login_mode_stored_data()
|
||||||
return await self.api.get_devices_data()
|
return await self.api.get_devices_data()
|
||||||
except (CannotConnect, CannotRetrieveData) as err:
|
except CannotConnect as err:
|
||||||
raise UpdateFailed(f"Error occurred while updating {self.name}") from err
|
raise UpdateFailed(
|
||||||
|
translation_domain=DOMAIN,
|
||||||
|
translation_key="cannot_connect_with_error",
|
||||||
|
translation_placeholders={"error": repr(err)},
|
||||||
|
) from err
|
||||||
|
except CannotRetrieveData as err:
|
||||||
|
raise UpdateFailed(
|
||||||
|
translation_domain=DOMAIN,
|
||||||
|
translation_key="cannot_retrieve_data_with_error",
|
||||||
|
translation_placeholders={"error": repr(err)},
|
||||||
|
) from err
|
||||||
except CannotAuthenticate as err:
|
except CannotAuthenticate as err:
|
||||||
raise ConfigEntryAuthFailed(
|
raise ConfigEntryAuthFailed(
|
||||||
translation_domain=DOMAIN,
|
translation_domain=DOMAIN,
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
|
"cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
|
||||||
|
"cannot_retrieve_data": "Unable to retrieve data from Amazon. Please try again later.",
|
||||||
"invalid_auth": "[%key:common::config_flow::error::invalid_auth%]",
|
"invalid_auth": "[%key:common::config_flow::error::invalid_auth%]",
|
||||||
"wrong_country": "Wrong country selected. Please select the country where your Amazon account is registered.",
|
"wrong_country": "Wrong country selected. Please select the country where your Amazon account is registered.",
|
||||||
"unknown": "[%key:common::config_flow::error::unknown%]"
|
"unknown": "[%key:common::config_flow::error::unknown%]"
|
||||||
@ -84,10 +85,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"exceptions": {
|
"exceptions": {
|
||||||
"cannot_connect": {
|
"cannot_connect_with_error": {
|
||||||
"message": "Error connecting: {error}"
|
"message": "Error connecting: {error}"
|
||||||
},
|
},
|
||||||
"cannot_retrieve_data": {
|
"cannot_retrieve_data_with_error": {
|
||||||
"message": "Error retrieving data: {error}"
|
"message": "Error retrieving data: {error}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,14 +26,14 @@ def alexa_api_call[_T: AmazonEntity, **_P](
|
|||||||
self.coordinator.last_update_success = False
|
self.coordinator.last_update_success = False
|
||||||
raise HomeAssistantError(
|
raise HomeAssistantError(
|
||||||
translation_domain=DOMAIN,
|
translation_domain=DOMAIN,
|
||||||
translation_key="cannot_connect",
|
translation_key="cannot_connect_with_error",
|
||||||
translation_placeholders={"error": repr(err)},
|
translation_placeholders={"error": repr(err)},
|
||||||
) from err
|
) from err
|
||||||
except CannotRetrieveData as err:
|
except CannotRetrieveData as err:
|
||||||
self.coordinator.last_update_success = False
|
self.coordinator.last_update_success = False
|
||||||
raise HomeAssistantError(
|
raise HomeAssistantError(
|
||||||
translation_domain=DOMAIN,
|
translation_domain=DOMAIN,
|
||||||
translation_key="cannot_retrieve_data",
|
translation_key="cannot_retrieve_data_with_error",
|
||||||
translation_placeholders={"error": repr(err)},
|
translation_placeholders={"error": repr(err)},
|
||||||
) from err
|
) from err
|
||||||
|
|
||||||
|
@ -2,7 +2,12 @@
|
|||||||
|
|
||||||
from unittest.mock import AsyncMock
|
from unittest.mock import AsyncMock
|
||||||
|
|
||||||
from aioamazondevices.exceptions import CannotAuthenticate, CannotConnect, WrongCountry
|
from aioamazondevices.exceptions import (
|
||||||
|
CannotAuthenticate,
|
||||||
|
CannotConnect,
|
||||||
|
CannotRetrieveData,
|
||||||
|
WrongCountry,
|
||||||
|
)
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from homeassistant.components.alexa_devices.const import CONF_LOGIN_DATA, DOMAIN
|
from homeassistant.components.alexa_devices.const import CONF_LOGIN_DATA, DOMAIN
|
||||||
@ -57,6 +62,7 @@ async def test_full_flow(
|
|||||||
[
|
[
|
||||||
(CannotConnect, "cannot_connect"),
|
(CannotConnect, "cannot_connect"),
|
||||||
(CannotAuthenticate, "invalid_auth"),
|
(CannotAuthenticate, "invalid_auth"),
|
||||||
|
(CannotRetrieveData, "cannot_retrieve_data"),
|
||||||
(WrongCountry, "wrong_country"),
|
(WrongCountry, "wrong_country"),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@ -165,6 +171,7 @@ async def test_reauth_successful(
|
|||||||
[
|
[
|
||||||
(CannotConnect, "cannot_connect"),
|
(CannotConnect, "cannot_connect"),
|
||||||
(CannotAuthenticate, "invalid_auth"),
|
(CannotAuthenticate, "invalid_auth"),
|
||||||
|
(CannotRetrieveData, "cannot_retrieve_data"),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_reauth_not_successful(
|
async def test_reauth_not_successful(
|
||||||
|
@ -21,8 +21,8 @@ ENTITY_ID = "switch.echo_test_do_not_disturb"
|
|||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("side_effect", "key", "error"),
|
("side_effect", "key", "error"),
|
||||||
[
|
[
|
||||||
(CannotConnect, "cannot_connect", "CannotConnect()"),
|
(CannotConnect, "cannot_connect_with_error", "CannotConnect()"),
|
||||||
(CannotRetrieveData, "cannot_retrieve_data", "CannotRetrieveData()"),
|
(CannotRetrieveData, "cannot_retrieve_data_with_error", "CannotRetrieveData()"),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_alexa_api_call_exceptions(
|
async def test_alexa_api_call_exceptions(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user