mirror of
https://github.com/home-assistant/core.git
synced 2025-07-20 11:47:06 +00:00
Handle add-on issues (#69897)
This commit is contained in:
parent
5f37f58673
commit
2ebbdf45f8
@ -711,7 +711,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
dev_reg = await async_get_registry(hass)
|
dev_reg = await async_get_registry(hass)
|
||||||
coordinator = HassioDataUpdateCoordinator(hass, entry, dev_reg)
|
coordinator = HassioDataUpdateCoordinator(hass, entry, dev_reg)
|
||||||
hass.data[ADDONS_COORDINATOR] = coordinator
|
hass.data[ADDONS_COORDINATOR] = coordinator
|
||||||
await coordinator.async_refresh()
|
await coordinator.async_config_entry_first_refresh()
|
||||||
|
|
||||||
hass.config_entries.async_setup_platforms(entry, PLATFORMS)
|
hass.config_entries.async_setup_platforms(entry, PLATFORMS)
|
||||||
|
|
||||||
@ -848,8 +848,8 @@ class HassioDataUpdateCoordinator(DataUpdateCoordinator):
|
|||||||
new_data[DATA_KEY_ADDONS] = {
|
new_data[DATA_KEY_ADDONS] = {
|
||||||
addon[ATTR_SLUG]: {
|
addon[ATTR_SLUG]: {
|
||||||
**addon,
|
**addon,
|
||||||
**((addons_stats or {}).get(addon[ATTR_SLUG], {})),
|
**((addons_stats or {}).get(addon[ATTR_SLUG]) or {}),
|
||||||
ATTR_AUTO_UPDATE: addons_info.get(addon[ATTR_SLUG], {}).get(
|
ATTR_AUTO_UPDATE: (addons_info.get(addon[ATTR_SLUG]) or {}).get(
|
||||||
ATTR_AUTO_UPDATE, False
|
ATTR_AUTO_UPDATE, False
|
||||||
),
|
),
|
||||||
ATTR_CHANGELOG: (addons_changelogs or {}).get(addon[ATTR_SLUG]),
|
ATTR_CHANGELOG: (addons_changelogs or {}).get(addon[ATTR_SLUG]),
|
||||||
@ -952,15 +952,27 @@ class HassioDataUpdateCoordinator(DataUpdateCoordinator):
|
|||||||
|
|
||||||
async def _update_addon_stats(self, slug):
|
async def _update_addon_stats(self, slug):
|
||||||
"""Update single addon stats."""
|
"""Update single addon stats."""
|
||||||
|
try:
|
||||||
stats = await self.hassio.get_addon_stats(slug)
|
stats = await self.hassio.get_addon_stats(slug)
|
||||||
return (slug, stats)
|
return (slug, stats)
|
||||||
|
except HassioAPIError as err:
|
||||||
|
_LOGGER.warning("Could not fetch stats for %s: %s", slug, err)
|
||||||
|
return (slug, None)
|
||||||
|
|
||||||
async def _update_addon_changelog(self, slug):
|
async def _update_addon_changelog(self, slug):
|
||||||
"""Return the changelog for an add-on."""
|
"""Return the changelog for an add-on."""
|
||||||
|
try:
|
||||||
changelog = await self.hassio.get_addon_changelog(slug)
|
changelog = await self.hassio.get_addon_changelog(slug)
|
||||||
return (slug, changelog)
|
return (slug, changelog)
|
||||||
|
except HassioAPIError as err:
|
||||||
|
_LOGGER.warning("Could not fetch changelog for %s: %s", slug, err)
|
||||||
|
return (slug, None)
|
||||||
|
|
||||||
async def _update_addon_info(self, slug):
|
async def _update_addon_info(self, slug):
|
||||||
"""Return the info for an add-on."""
|
"""Return the info for an add-on."""
|
||||||
|
try:
|
||||||
info = await self.hassio.get_addon_info(slug)
|
info = await self.hassio.get_addon_info(slug)
|
||||||
return (slug, info)
|
return (slug, info)
|
||||||
|
except HassioAPIError as err:
|
||||||
|
_LOGGER.warning("Could not fetch info for %s: %s", slug, err)
|
||||||
|
return (slug, None)
|
||||||
|
@ -509,3 +509,30 @@ async def test_no_os_entity(hass):
|
|||||||
|
|
||||||
# Verify that the entity does not exist
|
# Verify that the entity does not exist
|
||||||
assert not hass.states.get("update.home_assistant_operating_system_update")
|
assert not hass.states.get("update.home_assistant_operating_system_update")
|
||||||
|
|
||||||
|
|
||||||
|
async def test_setting_up_core_update_when_addon_fails(hass, caplog):
|
||||||
|
"""Test setting up core update when single addon fails."""
|
||||||
|
with patch.dict(os.environ, MOCK_ENVIRON), patch(
|
||||||
|
"homeassistant.components.hassio.HassIO.get_addon_stats",
|
||||||
|
side_effect=HassioAPIError("add-on is not running"),
|
||||||
|
), patch(
|
||||||
|
"homeassistant.components.hassio.HassIO.get_addon_changelog",
|
||||||
|
side_effect=HassioAPIError("add-on is not running"),
|
||||||
|
), patch(
|
||||||
|
"homeassistant.components.hassio.HassIO.get_addon_info",
|
||||||
|
side_effect=HassioAPIError("add-on is not running"),
|
||||||
|
):
|
||||||
|
result = await async_setup_component(
|
||||||
|
hass,
|
||||||
|
"hassio",
|
||||||
|
{"http": {"server_port": 9999, "server_host": "127.0.0.1"}, "hassio": {}},
|
||||||
|
)
|
||||||
|
assert result
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
# Verify that the core update entity does exist
|
||||||
|
state = hass.states.get("update.home_assistant_core_update")
|
||||||
|
assert state
|
||||||
|
assert state.state == "on"
|
||||||
|
assert "Could not fetch stats for test: add-on is not running" in caplog.text
|
||||||
|
Loading…
x
Reference in New Issue
Block a user