mirror of
https://github.com/home-assistant/core.git
synced 2025-05-03 13:39:16 +00:00
Improve cloud error handling (#36670)
This commit is contained in:
parent
44708ed8bb
commit
a8e9ccbf1a
@ -71,6 +71,8 @@ _CLOUD_ERRORS = {
|
|||||||
HTTP_INTERNAL_SERVER_ERROR,
|
HTTP_INTERNAL_SERVER_ERROR,
|
||||||
"Remote UI not compatible with 127.0.0.1/::1 as trusted proxies.",
|
"Remote UI not compatible with 127.0.0.1/::1 as trusted proxies.",
|
||||||
),
|
),
|
||||||
|
asyncio.TimeoutError: (502, "Unable to reach the Home Assistant cloud."),
|
||||||
|
aiohttp.ClientError: (HTTP_INTERNAL_SERVER_ERROR, "Error making internal request",),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -120,11 +122,6 @@ async def async_setup(hass):
|
|||||||
HTTP_BAD_REQUEST,
|
HTTP_BAD_REQUEST,
|
||||||
"Password change required.",
|
"Password change required.",
|
||||||
),
|
),
|
||||||
asyncio.TimeoutError: (502, "Unable to reach the Home Assistant cloud."),
|
|
||||||
aiohttp.ClientError: (
|
|
||||||
HTTP_INTERNAL_SERVER_ERROR,
|
|
||||||
"Error making internal request",
|
|
||||||
),
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -166,10 +163,17 @@ def _ws_handle_cloud_errors(handler):
|
|||||||
|
|
||||||
def _process_cloud_exception(exc, where):
|
def _process_cloud_exception(exc, where):
|
||||||
"""Process a cloud exception."""
|
"""Process a cloud exception."""
|
||||||
err_info = _CLOUD_ERRORS.get(exc.__class__)
|
err_info = None
|
||||||
|
|
||||||
|
for err, value_info in _CLOUD_ERRORS.items():
|
||||||
|
if isinstance(exc, err):
|
||||||
|
err_info = value_info
|
||||||
|
break
|
||||||
|
|
||||||
if err_info is None:
|
if err_info is None:
|
||||||
_LOGGER.exception("Unexpected error processing request for %s", where)
|
_LOGGER.exception("Unexpected error processing request for %s", where)
|
||||||
err_info = (502, f"Unexpected error: {exc}")
|
err_info = (502, f"Unexpected error: {exc}")
|
||||||
|
|
||||||
return err_info
|
return err_info
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from ipaddress import ip_network
|
from ipaddress import ip_network
|
||||||
|
|
||||||
|
import aiohttp
|
||||||
from hass_nabucasa import thingtalk
|
from hass_nabucasa import thingtalk
|
||||||
from hass_nabucasa.auth import Unauthenticated, UnknownError
|
from hass_nabucasa.auth import Unauthenticated, UnknownError
|
||||||
from hass_nabucasa.const import STATE_CONNECTED
|
from hass_nabucasa.const import STATE_CONNECTED
|
||||||
@ -279,6 +280,17 @@ async def test_forgot_password_view_unknown_error(mock_cognito, cloud_client):
|
|||||||
assert req.status == 502
|
assert req.status == 502
|
||||||
|
|
||||||
|
|
||||||
|
async def test_forgot_password_view_aiohttp_error(mock_cognito, cloud_client):
|
||||||
|
"""Test unknown error while logging out."""
|
||||||
|
mock_cognito.initiate_forgot_password.side_effect = aiohttp.ClientResponseError(
|
||||||
|
Mock(), Mock()
|
||||||
|
)
|
||||||
|
req = await cloud_client.post(
|
||||||
|
"/api/cloud/forgot_password", json={"email": "hello@bla.com"}
|
||||||
|
)
|
||||||
|
assert req.status == 500
|
||||||
|
|
||||||
|
|
||||||
async def test_resend_confirm_view(mock_cognito, cloud_client):
|
async def test_resend_confirm_view(mock_cognito, cloud_client):
|
||||||
"""Test logging out."""
|
"""Test logging out."""
|
||||||
req = await cloud_client.post(
|
req = await cloud_client.post(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user