Make feedreader recoverable (#134202)

raise ConfigEntryNotReady on connection errors during setup
This commit is contained in:
Michael 2024-12-29 15:08:15 +01:00 committed by GitHub
parent 0db07a033b
commit 7704ef95a4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 1 deletions

View File

@ -14,6 +14,7 @@ import feedparser
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers.storage import Store
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from homeassistant.util import dt as dt_util
@ -101,7 +102,11 @@ class FeedReaderCoordinator(
async def async_setup(self) -> None:
"""Set up the feed manager."""
feed = await self._async_fetch_feed()
try:
feed = await self._async_fetch_feed()
except UpdateFailed as err:
raise ConfigEntryNotReady from err
self.logger.debug("Feed data fetched from %s : %s", self.url, feed["feed"])
if feed_author := feed["feed"].get("author"):
self.feed_author = html.unescape(feed_author)

View File

@ -11,6 +11,7 @@ from freezegun.api import FrozenDateTimeFactory
import pytest
from homeassistant.components.feedreader.const import DOMAIN
from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import Event, HomeAssistant
from homeassistant.helpers import device_registry as dr
import homeassistant.util.dt as dt_util
@ -52,6 +53,23 @@ async def test_setup(
assert not events
async def test_setup_error(
hass: HomeAssistant,
feed_one_event,
) -> None:
"""Test setup error."""
entry = create_mock_entry(VALID_CONFIG_DEFAULT)
entry.add_to_hass(hass)
with patch(
"homeassistant.components.feedreader.coordinator.feedparser.http.get"
) as feedreader:
feedreader.side_effect = urllib.error.URLError("Test")
feedreader.return_value = feed_one_event
await hass.config_entries.async_setup(entry.entry_id)
assert entry.state is ConfigEntryState.SETUP_RETRY
async def test_storage_data_writing(
hass: HomeAssistant,
events: list[Event],