Handle not available add-on in hassio add-on manager (#84943)
* Handle not available add-on in hassio add-on manager * Fix zwave_js tests * Fix sky connect tests * Fix matter tests * Fix yellow tests * Update hardware tests
This commit is contained in:
parent
240e1fd8f3
commit
94b80db968
9 changed files with 81 additions and 3 deletions
|
@ -70,6 +70,7 @@ def api_error(
|
|||
class AddonInfo:
|
||||
"""Represent the current add-on info state."""
|
||||
|
||||
available: bool
|
||||
hostname: str | None
|
||||
options: dict[str, Any]
|
||||
state: AddonState
|
||||
|
@ -144,6 +145,7 @@ class AddonManager:
|
|||
self._logger.debug("Add-on store info: %s", addon_store_info)
|
||||
if not addon_store_info["installed"]:
|
||||
return AddonInfo(
|
||||
available=addon_store_info["available"],
|
||||
hostname=None,
|
||||
options={},
|
||||
state=AddonState.NOT_INSTALLED,
|
||||
|
@ -154,6 +156,7 @@ class AddonManager:
|
|||
addon_info = await async_get_addon_info(self._hass, self.addon_slug)
|
||||
addon_state = self.async_get_addon_state(addon_info)
|
||||
return AddonInfo(
|
||||
available=addon_info["available"],
|
||||
hostname=addon_info["hostname"],
|
||||
options=addon_info["options"],
|
||||
state=addon_state,
|
||||
|
@ -184,6 +187,11 @@ class AddonManager:
|
|||
@api_error("Failed to install the {addon_name} add-on")
|
||||
async def async_install_addon(self) -> None:
|
||||
"""Install the managed add-on."""
|
||||
addon_info = await self.async_get_addon_info()
|
||||
|
||||
if not addon_info.available:
|
||||
raise AddonError(f"{self.addon_name} add-on is not available anymore")
|
||||
|
||||
await async_install_addon(self._hass, self.addon_slug)
|
||||
|
||||
@api_error("Failed to uninstall the {addon_name} add-on")
|
||||
|
@ -196,6 +204,9 @@ class AddonManager:
|
|||
"""Update the managed add-on if needed."""
|
||||
addon_info = await self.async_get_addon_info()
|
||||
|
||||
if not addon_info.available:
|
||||
raise AddonError(f"{self.addon_name} add-on is not available anymore")
|
||||
|
||||
if addon_info.state is AddonState.NOT_INSTALLED:
|
||||
raise AddonError(f"{self.addon_name} add-on is not installed")
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue