mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-27 02:56:31 +00:00
Use packages version (#2013)
* Use package version * more readable * Fix
This commit is contained in:
parent
51dcbf5db7
commit
c85aa664e1
@ -5,6 +5,7 @@ import logging
|
||||
from typing import Any, Awaitable, Dict, List, Optional
|
||||
|
||||
import docker
|
||||
from packaging import version as pkg_version
|
||||
import requests
|
||||
|
||||
from . import CommandReturn
|
||||
@ -431,12 +432,12 @@ class DockerInterface(CoreSysAttributes):
|
||||
# Check return value
|
||||
return int(docker_container.attrs["State"]["ExitCode"]) != 0
|
||||
|
||||
def get_latest_version(self, key: Any = int) -> Awaitable[str]:
|
||||
"""Return latest version of local Home Asssistant image."""
|
||||
return self.sys_run_in_executor(self._get_latest_version, key)
|
||||
def get_latest_version(self) -> Awaitable[str]:
|
||||
"""Return latest version of local image."""
|
||||
return self.sys_run_in_executor(self._get_latest_version)
|
||||
|
||||
def _get_latest_version(self, key: Any = int) -> str:
|
||||
"""Return latest version of local Home Asssistant image.
|
||||
def _get_latest_version(self) -> str:
|
||||
"""Return latest version of local image.
|
||||
|
||||
Need run inside executor.
|
||||
"""
|
||||
@ -446,8 +447,8 @@ class DockerInterface(CoreSysAttributes):
|
||||
for tag in image.tags:
|
||||
version = tag.partition(":")[2]
|
||||
try:
|
||||
key(version)
|
||||
except (AttributeError, ValueError):
|
||||
pkg_version.parse(version)
|
||||
except (TypeError, pkg_version.InvalidVersion):
|
||||
continue
|
||||
available_version.append(version)
|
||||
|
||||
@ -461,5 +462,5 @@ class DockerInterface(CoreSysAttributes):
|
||||
_LOGGER.debug("Found %s versions: %s", self.image, available_version)
|
||||
|
||||
# Sort version and return latest version
|
||||
available_version.sort(key=key, reverse=True)
|
||||
available_version.sort(key=pkg_version.parse, reverse=True)
|
||||
return available_version[0]
|
||||
|
@ -53,8 +53,8 @@ class HomeAssistantCore(CoreSysAttributes):
|
||||
try:
|
||||
# Evaluate Version if we lost this information
|
||||
if not self.sys_homeassistant.version:
|
||||
self.sys_homeassistant.version = await self.instance.get_latest_version(
|
||||
key=pkg_version.parse
|
||||
self.sys_homeassistant.version = (
|
||||
await self.instance.get_latest_version()
|
||||
)
|
||||
|
||||
await self.instance.attach(tag=self.sys_homeassistant.version)
|
||||
|
@ -2,6 +2,8 @@
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
from packaging.version import LegacyVersion, parse as pkg_parse
|
||||
|
||||
from ..coresys import CoreSys, CoreSysAttributes
|
||||
from ..exceptions import HassioError
|
||||
from .audio import Audio
|
||||
@ -15,10 +17,10 @@ _LOGGER: logging.Logger = logging.getLogger(__name__)
|
||||
class PluginManager(CoreSysAttributes):
|
||||
"""Manage supported function for plugins."""
|
||||
|
||||
required_cli: int = 26
|
||||
required_dns: int = 9
|
||||
required_audio: int = 17
|
||||
required_multicast: int = 3
|
||||
required_cli: LegacyVersion = pkg_parse("26")
|
||||
required_dns: LegacyVersion = pkg_parse("9")
|
||||
required_audio: LegacyVersion = pkg_parse("17")
|
||||
required_multicast: LegacyVersion = pkg_parse("3")
|
||||
|
||||
def __init__(self, coresys: CoreSys):
|
||||
"""Initialize plugin manager."""
|
||||
@ -61,7 +63,7 @@ class PluginManager(CoreSysAttributes):
|
||||
try:
|
||||
await plugin.load()
|
||||
except Exception as err: # pylint: disable=broad-except
|
||||
_LOGGER.warning("Can't load plugin %s", type(plugin).__name__)
|
||||
_LOGGER.warning("Can't load plugin %s: %s", type(plugin).__name__, err)
|
||||
self.sys_capture_exception(err)
|
||||
|
||||
# Check requirements
|
||||
@ -73,18 +75,16 @@ class PluginManager(CoreSysAttributes):
|
||||
):
|
||||
# Check if need an update
|
||||
try:
|
||||
if int(plugin.version) >= required_version:
|
||||
continue
|
||||
except (TypeError, ValueError):
|
||||
if plugin.version == "dev":
|
||||
if pkg_parse(plugin.version) >= required_version:
|
||||
continue
|
||||
except TypeError:
|
||||
_LOGGER.warning(
|
||||
"Somethings going wrong with requirements on %s",
|
||||
type(plugin).__name__,
|
||||
)
|
||||
|
||||
_LOGGER.info(
|
||||
"Requirement need update for %s - %i",
|
||||
"Requirement need update for %s - %s",
|
||||
type(plugin).__name__,
|
||||
required_version,
|
||||
)
|
||||
@ -92,12 +92,14 @@ class PluginManager(CoreSysAttributes):
|
||||
await plugin.update(version=str(required_version))
|
||||
except HassioError:
|
||||
_LOGGER.error(
|
||||
"Can't update %s to %i but it's a reuirement, the Supervisor is not health now!",
|
||||
"Can't update %s to %s but it's a reuirement, the Supervisor is not health now!",
|
||||
type(plugin).__name__,
|
||||
required_version,
|
||||
)
|
||||
except Exception as err: # pylint: disable=broad-except
|
||||
_LOGGER.warning("Can't update plugin %s", type(plugin).__name__)
|
||||
_LOGGER.warning(
|
||||
"Can't update plugin %s: %s", type(plugin).__name__, err
|
||||
)
|
||||
self.sys_capture_exception(err)
|
||||
|
||||
async def repair(self) -> None:
|
||||
@ -123,5 +125,5 @@ class PluginManager(CoreSysAttributes):
|
||||
try:
|
||||
await plugin.stop()
|
||||
except Exception as err: # pylint: disable=broad-except
|
||||
_LOGGER.warning("Can't stop plugin %s", type(plugin).__name__)
|
||||
_LOGGER.warning("Can't stop plugin %s: %s", type(plugin).__name__, err)
|
||||
self.sys_capture_exception(err)
|
||||
|
@ -88,7 +88,7 @@ class Audio(JsonConfig, CoreSysAttributes):
|
||||
try:
|
||||
# Evaluate Version if we lost this information
|
||||
if not self.version:
|
||||
self.version = await self.instance.get_latest_version(key=int)
|
||||
self.version = await self.instance.get_latest_version()
|
||||
|
||||
await self.instance.attach(tag=self.version)
|
||||
except DockerAPIError:
|
||||
|
@ -76,7 +76,7 @@ class HaCli(CoreSysAttributes, JsonConfig):
|
||||
try:
|
||||
# Evaluate Version if we lost this information
|
||||
if not self.version:
|
||||
self.version = await self.instance.get_latest_version(key=int)
|
||||
self.version = await self.instance.get_latest_version()
|
||||
|
||||
await self.instance.attach(tag=self.version)
|
||||
except DockerAPIError:
|
||||
|
@ -123,7 +123,7 @@ class CoreDNS(JsonConfig, CoreSysAttributes):
|
||||
try:
|
||||
# Evaluate Version if we lost this information
|
||||
if not self.version:
|
||||
self.version = await self.instance.get_latest_version(key=int)
|
||||
self.version = await self.instance.get_latest_version()
|
||||
|
||||
await self.instance.attach(tag=self.version)
|
||||
except DockerAPIError:
|
||||
|
@ -70,7 +70,7 @@ class Multicast(JsonConfig, CoreSysAttributes):
|
||||
try:
|
||||
# Evaluate Version if we lost this information
|
||||
if not self.version:
|
||||
self.version = await self.instance.get_latest_version(key=int)
|
||||
self.version = await self.instance.get_latest_version()
|
||||
|
||||
await self.instance.attach(tag=self.version)
|
||||
except DockerAPIError:
|
||||
|
Loading…
x
Reference in New Issue
Block a user