latest appdaemon version came now from docker image

This commit is contained in:
Pierre committed 2026-11-08 10:48:50 +01:00
1 parent 35856b2ba9
commit 3130df69ce
1 file changed
+22 -8
+22 -8
View File
@@ -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):