mirror of
https://github.com/home-assistant/core.git
synced 2025-07-10 14:57:09 +00:00
Fix wallbox jwt issue (#79948)
* Bump Wallbox package * remove debug message * Force update of auth token by emptying it first * Force token refresh by emptying token Improve exception handling * include tests * Update __init__.py * Removed the clearing ot jwt token, issue is fixed by upstream fix in wallbox package. * Catch connectionerror * Update homeassistant/components/wallbox/__init__.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Run black Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
parent
8dc3ff72c6
commit
a534c136a1
@ -17,6 +17,7 @@ from homeassistant.helpers.entity import DeviceInfo
|
||||
from homeassistant.helpers.update_coordinator import (
|
||||
CoordinatorEntity,
|
||||
DataUpdateCoordinator,
|
||||
UpdateFailed,
|
||||
)
|
||||
|
||||
from .const import (
|
||||
@ -93,6 +94,7 @@ class WallboxCoordinator(DataUpdateCoordinator[dict[str, Any]]):
|
||||
"""Authenticate using Wallbox API."""
|
||||
try:
|
||||
self._wallbox.authenticate()
|
||||
|
||||
except requests.exceptions.HTTPError as wallbox_connection_error:
|
||||
if wallbox_connection_error.response.status_code == HTTPStatus.FORBIDDEN:
|
||||
raise ConfigEntryAuthFailed from wallbox_connection_error
|
||||
@ -125,11 +127,12 @@ class WallboxCoordinator(DataUpdateCoordinator[dict[str, Any]]):
|
||||
data[CHARGER_STATUS_DESCRIPTION_KEY] = CHARGER_STATUS.get(
|
||||
data[CHARGER_STATUS_ID_KEY], ChargerStatus.UNKNOWN
|
||||
)
|
||||
|
||||
return data
|
||||
|
||||
except requests.exceptions.HTTPError as wallbox_connection_error:
|
||||
raise ConnectionError from wallbox_connection_error
|
||||
except (
|
||||
ConnectionError,
|
||||
requests.exceptions.HTTPError,
|
||||
) as wallbox_connection_error:
|
||||
raise UpdateFailed from wallbox_connection_error
|
||||
|
||||
async def _async_update_data(self) -> dict[str, Any]:
|
||||
"""Get new sensor data for Wallbox component."""
|
||||
|
@ -6,6 +6,7 @@ from typing import Any
|
||||
from homeassistant.components.lock import LockEntity, LockEntityDescription
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import PlatformNotReady
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
from . import InvalidAuth, WallboxCoordinator, WallboxEntity
|
||||
@ -36,6 +37,8 @@ async def async_setup_entry(
|
||||
)
|
||||
except InvalidAuth:
|
||||
return
|
||||
except ConnectionError as exc:
|
||||
raise PlatformNotReady from exc
|
||||
|
||||
async_add_entities(
|
||||
[
|
||||
|
@ -3,7 +3,7 @@
|
||||
"name": "Wallbox",
|
||||
"config_flow": true,
|
||||
"documentation": "https://www.home-assistant.io/integrations/wallbox",
|
||||
"requirements": ["wallbox==0.4.9"],
|
||||
"requirements": ["wallbox==0.4.10"],
|
||||
"codeowners": ["@hesselonline"],
|
||||
"iot_class": "cloud_polling",
|
||||
"loggers": ["wallbox"]
|
||||
|
@ -7,6 +7,7 @@ from typing import Optional, cast
|
||||
from homeassistant.components.number import NumberEntity, NumberEntityDescription
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import PlatformNotReady
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
from . import InvalidAuth, WallboxCoordinator, WallboxEntity
|
||||
@ -46,6 +47,8 @@ async def async_setup_entry(
|
||||
)
|
||||
except InvalidAuth:
|
||||
return
|
||||
except ConnectionError as exc:
|
||||
raise PlatformNotReady from exc
|
||||
|
||||
async_add_entities(
|
||||
[
|
||||
|
@ -2512,7 +2512,7 @@ vultr==0.1.2
|
||||
wakeonlan==2.1.0
|
||||
|
||||
# homeassistant.components.wallbox
|
||||
wallbox==0.4.9
|
||||
wallbox==0.4.10
|
||||
|
||||
# homeassistant.components.waqi
|
||||
waqiasync==1.0.0
|
||||
|
@ -1740,7 +1740,7 @@ vultr==0.1.2
|
||||
wakeonlan==2.1.0
|
||||
|
||||
# homeassistant.components.wallbox
|
||||
wallbox==0.4.9
|
||||
wallbox==0.4.10
|
||||
|
||||
# homeassistant.components.folder_watcher
|
||||
watchdog==2.1.9
|
||||
|
@ -173,3 +173,29 @@ async def setup_integration_read_only(hass: HomeAssistant) -> None:
|
||||
|
||||
await hass.config_entries.async_setup(entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
|
||||
async def setup_integration_platform_not_ready(hass: HomeAssistant) -> None:
|
||||
"""Test wallbox sensor class setup for read only."""
|
||||
|
||||
with requests_mock.Mocker() as mock_request:
|
||||
mock_request.get(
|
||||
"https://user-api.wall-box.com/users/signin",
|
||||
json=authorisation_response,
|
||||
status_code=HTTPStatus.OK,
|
||||
)
|
||||
mock_request.get(
|
||||
"https://api.wall-box.com/chargers/status/12345",
|
||||
json=test_response,
|
||||
status_code=HTTPStatus.OK,
|
||||
)
|
||||
mock_request.put(
|
||||
"https://api.wall-box.com/v2/charger/12345",
|
||||
json=test_response,
|
||||
status_code=HTTPStatus.NOT_FOUND,
|
||||
)
|
||||
|
||||
entry.add_to_hass(hass)
|
||||
|
||||
await hass.config_entries.async_setup(entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
@ -13,6 +13,7 @@ from . import (
|
||||
authorisation_response,
|
||||
entry,
|
||||
setup_integration,
|
||||
setup_integration_platform_not_ready,
|
||||
setup_integration_read_only,
|
||||
)
|
||||
from .const import MOCK_LOCK_ENTITY_ID
|
||||
@ -109,3 +110,15 @@ async def test_wallbox_lock_class_authentication_error(hass: HomeAssistant) -> N
|
||||
assert state is None
|
||||
|
||||
await hass.config_entries.async_unload(entry.entry_id)
|
||||
|
||||
|
||||
async def test_wallbox_lock_class_platform_not_ready(hass: HomeAssistant) -> None:
|
||||
"""Test wallbox lock not loaded on authentication error."""
|
||||
|
||||
await setup_integration_platform_not_ready(hass)
|
||||
|
||||
state = hass.states.get(MOCK_LOCK_ENTITY_ID)
|
||||
|
||||
assert state is None
|
||||
|
||||
await hass.config_entries.async_unload(entry.entry_id)
|
||||
|
@ -9,7 +9,12 @@ from homeassistant.components.wallbox import CHARGER_MAX_CHARGING_CURRENT_KEY
|
||||
from homeassistant.const import ATTR_ENTITY_ID
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from . import authorisation_response, entry, setup_integration
|
||||
from . import (
|
||||
authorisation_response,
|
||||
entry,
|
||||
setup_integration,
|
||||
setup_integration_platform_not_ready,
|
||||
)
|
||||
from .const import MOCK_NUMBER_ENTITY_ID
|
||||
|
||||
|
||||
@ -71,3 +76,15 @@ async def test_wallbox_number_class_connection_error(hass: HomeAssistant) -> Non
|
||||
blocking=True,
|
||||
)
|
||||
await hass.config_entries.async_unload(entry.entry_id)
|
||||
|
||||
|
||||
async def test_wallbox_number_class_platform_not_ready(hass: HomeAssistant) -> None:
|
||||
"""Test wallbox lock not loaded on authentication error."""
|
||||
|
||||
await setup_integration_platform_not_ready(hass)
|
||||
|
||||
state = hass.states.get(MOCK_NUMBER_ENTITY_ID)
|
||||
|
||||
assert state is None
|
||||
|
||||
await hass.config_entries.async_unload(entry.entry_id)
|
||||
|
Loading…
x
Reference in New Issue
Block a user