mirror of https://github.com/home-assistant/core
60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
"""Update helpers for Supervisor."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from aiohasupervisor import SupervisorError
|
|
from aiohasupervisor.models import HomeAssistantUpdateOptions, StoreAddonUpdate
|
|
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.exceptions import HomeAssistantError
|
|
|
|
from .handler import get_supervisor_client
|
|
|
|
|
|
async def update_addon(
|
|
hass: HomeAssistant,
|
|
addon: str,
|
|
backup: bool,
|
|
addon_name: str | None,
|
|
installed_version: str | None,
|
|
) -> None:
|
|
"""Update an addon.
|
|
|
|
Optionally make a backup before updating.
|
|
"""
|
|
client = get_supervisor_client(hass)
|
|
|
|
if backup:
|
|
# pylint: disable-next=import-outside-toplevel
|
|
from .backup import backup_addon_before_update
|
|
|
|
await backup_addon_before_update(hass, addon, addon_name, installed_version)
|
|
|
|
try:
|
|
await client.store.update_addon(addon, StoreAddonUpdate(backup=False))
|
|
except SupervisorError as err:
|
|
raise HomeAssistantError(
|
|
f"Error updating {addon_name or addon}: {err}"
|
|
) from err
|
|
|
|
|
|
async def update_core(hass: HomeAssistant, version: str | None, backup: bool) -> None:
|
|
"""Update core.
|
|
|
|
Optionally make a backup before updating.
|
|
"""
|
|
client = get_supervisor_client(hass)
|
|
|
|
if backup:
|
|
# pylint: disable-next=import-outside-toplevel
|
|
from .backup import backup_core_before_update
|
|
|
|
await backup_core_before_update(hass)
|
|
|
|
try:
|
|
await client.homeassistant.update(
|
|
HomeAssistantUpdateOptions(version=version, backup=False)
|
|
)
|
|
except SupervisorError as err:
|
|
raise HomeAssistantError(f"Error updating Home Assistant Core: {err}") from err
|