Use packages version (#2013)

* Use package version

* more readable

* Fix
This commit is contained in:
Pascal Vizeli 2020-09-04 16:20:07 +02:00 committed by GitHub
parent 51dcbf5db7
commit c85aa664e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 30 additions and 27 deletions

View File

@ -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]

View File

@ -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)

View File

@ -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)

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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: