latest appdaemon version came now from docker image
This commit is contained in:
1 parent
35856b2ba9
commit
3130df69ce
1 file changed
+22
-8
@@ -4,11 +4,14 @@ from importlib import metadata
|
||||
import json
|
||||
import pickle
|
||||
import os
|
||||
import re
|
||||
from urllib.request import urlopen
|
||||
|
||||
class InformationsCollector(SmartObject):
|
||||
|
||||
APPDAEMON_PYPI_URL = "https://pypi.org/pypi/appdaemon/json"
|
||||
APPDAEMON_DOCKER_TAGS_URL = (
|
||||
"https://hub.docker.com/v2/repositories/acockburn/appdaemon/tags?page_size=100"
|
||||
)
|
||||
|
||||
def on_initialize_smart_object(self):
|
||||
super().on_initialize_smart_object()
|
||||
@@ -26,7 +29,7 @@ class InformationsCollector(SmartObject):
|
||||
sensor_name,
|
||||
state='unknown',
|
||||
attributes={
|
||||
'latest_official_version': self.dataset.get('appdaemon_latest_official_version'),
|
||||
'latest_official_version': self.dataset.get('appdaemon_latest_docker_version'),
|
||||
'update_available': None,
|
||||
},
|
||||
icon='mdi:package-up'
|
||||
@@ -143,9 +146,9 @@ class InformationsCollector(SmartObject):
|
||||
latest_official_version = self._get_latest_official_appdaemon_version()
|
||||
|
||||
if latest_official_version is not None:
|
||||
self.dataset['appdaemon_latest_official_version'] = latest_official_version
|
||||
self.dataset['appdaemon_latest_docker_version'] = latest_official_version
|
||||
else:
|
||||
latest_official_version = self.dataset.get('appdaemon_latest_official_version')
|
||||
latest_official_version = self.dataset.get('appdaemon_latest_docker_version')
|
||||
|
||||
update_available = self._is_appdaemon_update_available(installed_version, latest_official_version)
|
||||
|
||||
@@ -168,11 +171,22 @@ class InformationsCollector(SmartObject):
|
||||
|
||||
def _get_latest_official_appdaemon_version(self):
|
||||
try:
|
||||
with urlopen(self.APPDAEMON_PYPI_URL, timeout=10) as response:
|
||||
payload = json.load(response)
|
||||
return payload.get('info', {}).get('version')
|
||||
url = self.APPDAEMON_DOCKER_TAGS_URL
|
||||
versions = {}
|
||||
while url:
|
||||
with urlopen(url, timeout=10) as response:
|
||||
payload = json.load(response)
|
||||
for tag in payload['results']:
|
||||
name = tag.get('name', '')
|
||||
# Only stable version tags with published container images.
|
||||
if re.fullmatch(r'[0-9]+\.[0-9]+\.[0-9]+', name) and tag.get('images'):
|
||||
versions[tuple(map(int, name.split('.')))] = name
|
||||
url = payload.get('next')
|
||||
if not versions:
|
||||
raise ValueError("No stable AppDaemon Docker image found")
|
||||
return versions[max(versions)]
|
||||
except Exception as err:
|
||||
self.log_warning(f"Unable to fetch latest official AppDaemon version: {err}")
|
||||
self.log_warning(f"Unable to fetch latest official AppDaemon Docker version: {err}")
|
||||
return None
|
||||
|
||||
def _is_appdaemon_update_available(self, installed_version, latest_official_version):
|
||||
|
||||
Reference in new issue
Block a user