core/homeassistant/components/hassio/update_helper.py

82 lines
2.2 KiB
Python

"""Update helpers for Supervisor."""
from __future__ import annotations
from aiohasupervisor import SupervisorError
from aiohasupervisor.models import (
HomeAssistantUpdateOptions,
OSUpdate,
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:
from .backup import backup_addon_before_update # noqa: PLC0415
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:
from .backup import backup_core_before_update # noqa: PLC0415
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
async def update_os(hass: HomeAssistant, version: str | None, backup: bool) -> None:
"""Update OS.
Optionally make a core backup before updating.
"""
client = get_supervisor_client(hass)
if backup:
from .backup import backup_core_before_update # noqa: PLC0415
await backup_core_before_update(hass)
try:
await client.os.update(OSUpdate(version=version))
except SupervisorError as err:
raise HomeAssistantError(
f"Error updating Home Assistant Operating System: {err}"
) from err