Compare commits

...

1 Commits

Author SHA1 Message Date
Franck Nijhof
2cfd567fb3 Translate coordinator exceptions for Sensor.Community 2026-04-12 12:04:27 +00:00
3 changed files with 35 additions and 12 deletions

View File

@@ -9,7 +9,7 @@ from __future__ import annotations
import logging
from luftdaten import Luftdaten
from luftdaten.exceptions import LuftdatenError
from luftdaten.exceptions import LuftdatenConnectionError, LuftdatenError
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
@@ -47,11 +47,22 @@ class LuftdatenDataUpdateCoordinator(DataUpdateCoordinator[dict[str, float | int
"""Update sensor/binary sensor data."""
try:
await self._sensor_community.get_data()
except LuftdatenConnectionError as err:
raise UpdateFailed(
translation_domain=DOMAIN,
translation_key="communication_error",
) from err
except LuftdatenError as err:
raise UpdateFailed("Unable to retrieve data from Sensor.Community") from err
raise UpdateFailed(
translation_domain=DOMAIN,
translation_key="unknown_error",
) from err
if not self._sensor_community.values:
raise UpdateFailed("Did not receive sensor data from Sensor.Community")
raise UpdateFailed(
translation_domain=DOMAIN,
translation_key="no_data_received",
)
data: dict[str, float | int] = self._sensor_community.values
data.update(self._sensor_community.meta)

View File

@@ -21,5 +21,16 @@
"sensor": {
"pressure_at_sealevel": { "name": "Pressure at sea level" }
}
},
"exceptions": {
"communication_error": {
"message": "An error occurred while communicating with the Sensor.Community service."
},
"no_data_received": {
"message": "Did not receive sensor data from the Sensor.Community service."
},
"unknown_error": {
"message": "An unknown error occurred while communicating with the Sensor.Community service."
}
}
}

View File

@@ -1,8 +1,9 @@
"""Tests for the Luftdaten integration."""
from unittest.mock import AsyncMock, MagicMock, patch
from unittest.mock import MagicMock
from luftdaten.exceptions import LuftdatenError
from luftdaten.exceptions import LuftdatenConnectionError, LuftdatenError
import pytest
from homeassistant.components.luftdaten.const import DOMAIN
from homeassistant.config_entries import ConfigEntryState
@@ -14,7 +15,7 @@ from tests.common import MockConfigEntry
async def test_load_unload_config_entry(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_luftdaten: AsyncMock,
mock_luftdaten: MagicMock,
) -> None:
"""Test the Luftdaten configuration entry loading/unloading."""
mock_config_entry.add_to_hass(hass)
@@ -30,21 +31,21 @@ async def test_load_unload_config_entry(
assert mock_config_entry.state is ConfigEntryState.NOT_LOADED
@patch(
"homeassistant.components.luftdaten.Luftdaten.get_data",
side_effect=LuftdatenError,
)
@pytest.mark.parametrize("side_effect", [LuftdatenConnectionError, LuftdatenError])
async def test_config_entry_not_ready(
mock_get_data: MagicMock,
hass: HomeAssistant,
mock_luftdaten: MagicMock,
mock_config_entry: MockConfigEntry,
side_effect: type[Exception],
) -> None:
"""Test the Luftdaten configuration entry not ready."""
mock_luftdaten.get_data.side_effect = side_effect
mock_config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
assert mock_get_data.call_count == 1
assert mock_luftdaten.get_data.call_count == 1
assert mock_config_entry.state is ConfigEntryState.SETUP_RETRY