Handle (and better log) more AirVisual cloud API errors (#75332)
This commit is contained in:
parent
cb12f77e33
commit
08d6487997
6 changed files with 35 additions and 10 deletions
|
@ -4,7 +4,7 @@ from __future__ import annotations
|
|||
from collections.abc import Mapping
|
||||
from datetime import timedelta
|
||||
from math import ceil
|
||||
from typing import Any, cast
|
||||
from typing import Any
|
||||
|
||||
from pyairvisual import CloudAPI, NodeSamba
|
||||
from pyairvisual.errors import (
|
||||
|
@ -12,6 +12,7 @@ from pyairvisual.errors import (
|
|||
InvalidKeyError,
|
||||
KeyExpiredError,
|
||||
NodeProError,
|
||||
UnauthorizedError,
|
||||
)
|
||||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
|
@ -210,9 +211,8 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||
)
|
||||
|
||||
try:
|
||||
data = await api_coro
|
||||
return cast(dict[str, Any], data)
|
||||
except (InvalidKeyError, KeyExpiredError) as ex:
|
||||
return await api_coro
|
||||
except (InvalidKeyError, KeyExpiredError, UnauthorizedError) as ex:
|
||||
raise ConfigEntryAuthFailed from ex
|
||||
except AirVisualError as err:
|
||||
raise UpdateFailed(f"Error while retrieving data: {err}") from err
|
||||
|
@ -253,8 +253,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||
async with NodeSamba(
|
||||
entry.data[CONF_IP_ADDRESS], entry.data[CONF_PASSWORD]
|
||||
) as node:
|
||||
data = await node.async_get_latest_measurements()
|
||||
return cast(dict[str, Any], data)
|
||||
return await node.async_get_latest_measurements()
|
||||
except NodeProError as err:
|
||||
raise UpdateFailed(f"Error while retrieving data: {err}") from err
|
||||
|
||||
|
|
|
@ -9,8 +9,10 @@ from pyairvisual import CloudAPI, NodeSamba
|
|||
from pyairvisual.errors import (
|
||||
AirVisualError,
|
||||
InvalidKeyError,
|
||||
KeyExpiredError,
|
||||
NodeProError,
|
||||
NotFoundError,
|
||||
UnauthorizedError,
|
||||
)
|
||||
import voluptuous as vol
|
||||
|
||||
|
@ -119,7 +121,7 @@ class AirVisualFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
|||
if user_input[CONF_API_KEY] not in valid_keys:
|
||||
try:
|
||||
await coro
|
||||
except InvalidKeyError:
|
||||
except (InvalidKeyError, KeyExpiredError, UnauthorizedError):
|
||||
errors[CONF_API_KEY] = "invalid_api_key"
|
||||
except NotFoundError:
|
||||
errors[CONF_CITY] = "location_not_found"
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"name": "AirVisual",
|
||||
"config_flow": true,
|
||||
"documentation": "https://www.home-assistant.io/integrations/airvisual",
|
||||
"requirements": ["pyairvisual==5.0.9"],
|
||||
"requirements": ["pyairvisual==2022.07.0"],
|
||||
"codeowners": ["@bachya"],
|
||||
"iot_class": "cloud_polling",
|
||||
"loggers": ["pyairvisual", "pysmb"]
|
||||
|
|
|
@ -1369,7 +1369,7 @@ pyaftership==21.11.0
|
|||
pyairnow==1.1.0
|
||||
|
||||
# homeassistant.components.airvisual
|
||||
pyairvisual==5.0.9
|
||||
pyairvisual==2022.07.0
|
||||
|
||||
# homeassistant.components.almond
|
||||
pyalmond==0.0.2
|
||||
|
|
|
@ -935,7 +935,7 @@ pyaehw4a1==0.3.9
|
|||
pyairnow==1.1.0
|
||||
|
||||
# homeassistant.components.airvisual
|
||||
pyairvisual==5.0.9
|
||||
pyairvisual==2022.07.0
|
||||
|
||||
# homeassistant.components.almond
|
||||
pyalmond==0.0.2
|
||||
|
|
|
@ -4,8 +4,10 @@ from unittest.mock import patch
|
|||
from pyairvisual.errors import (
|
||||
AirVisualError,
|
||||
InvalidKeyError,
|
||||
KeyExpiredError,
|
||||
NodeProError,
|
||||
NotFoundError,
|
||||
UnauthorizedError,
|
||||
)
|
||||
import pytest
|
||||
|
||||
|
@ -84,6 +86,28 @@ async def test_duplicate_error(hass, config, config_entry, data):
|
|||
{CONF_API_KEY: "invalid_api_key"},
|
||||
INTEGRATION_TYPE_GEOGRAPHY_NAME,
|
||||
),
|
||||
(
|
||||
{
|
||||
CONF_API_KEY: "abcde12345",
|
||||
CONF_CITY: "Beijing",
|
||||
CONF_STATE: "Beijing",
|
||||
CONF_COUNTRY: "China",
|
||||
},
|
||||
KeyExpiredError,
|
||||
{CONF_API_KEY: "invalid_api_key"},
|
||||
INTEGRATION_TYPE_GEOGRAPHY_NAME,
|
||||
),
|
||||
(
|
||||
{
|
||||
CONF_API_KEY: "abcde12345",
|
||||
CONF_CITY: "Beijing",
|
||||
CONF_STATE: "Beijing",
|
||||
CONF_COUNTRY: "China",
|
||||
},
|
||||
UnauthorizedError,
|
||||
{CONF_API_KEY: "invalid_api_key"},
|
||||
INTEGRATION_TYPE_GEOGRAPHY_NAME,
|
||||
),
|
||||
(
|
||||
{
|
||||
CONF_API_KEY: "abcde12345",
|
||||
|
|
Loading…
Add table
Reference in a new issue