diff --git a/all/WAPT/control b/all/WAPT/control index ea48768..968efbc 100644 --- a/all/WAPT/control +++ b/all/WAPT/control @@ -1,5 +1,5 @@ package : comi-apps-to-update-on-wapt-server -version : 0-10 +version : 0-13 architecture : all section : base priority : optional diff --git a/all/setup.py b/all/setup.py index c6442ff..d28b2b3 100644 --- a/all/setup.py +++ b/all/setup.py @@ -3,6 +3,46 @@ from setuphelpers import * import requests import json from configparser import ConfigParser +from waptpackage import HostCapabilities +from waptpackage import WaptRemoteRepo +from waptpackage import PackageVersion + +all_package = {} + +dict_host_capa = { + "ubuntu22frx64": HostCapabilities( + architecture="x64", + language="fr", + os="ubuntu", + packages_locales=["fr", "en", "es", "de", "it"], + tags=["debian", "debian_based", "linux", "unix", "debian11", "ubuntu-22"], + os_version="11", + ), + "ubuntu20frx64": HostCapabilities( + architecture="x64", + language="fr", + os="ubuntu", + packages_locales=["fr", "en", "es", "de", "it"], + tags=["debian", "debian_based", "linux", "unix", "debian11", "ubuntu-20"], + os_version="11", + ), + "debian11frx64": HostCapabilities( + architecture="x64", + language="fr", + os="debian", + packages_locales=["fr", "en", "es", "de", "it"], + tags=["debian-bullseye", "debian", "debian_based", "linux", "unix", "debian11", "debian-11"], + os_version="11", + ), + "win10x64fr": HostCapabilities( + architecture="x64", + language="fr", + os="windows", + packages_locales=["fr", "en", "es", "de", "it"], + tags=["windows-10", "win-10", "w-10", "windows10", "win10", "w10", "windows", "win", "w"], + os_version="10.0.19043", + ), +} def install(): @@ -25,45 +65,55 @@ def audit(): print("suppression de l'ancienne version du fichier json") remove_file(app_to_update_json_path) + store = WaptRemoteRepo(name="main", url="https://wapt.tranquil.it/wapt", timeout=4, verify_cert=False) + localstore = WaptRemoteRepo(name="main", url="https://srvwapt.comitari.fr/wapt", timeout=4, verify_cert=False) # Download JSON data from the URL - json_data = download_json_from_url("https://wapt.tranquil.it/store/packages_list") - if json_data is None: - return "ERROR" - online_dict = {} - transformed_package_dict = {} - app_to_update_list = [] + online_package_list = {} + local_package_list = {} + for hc in dict_host_capa: + online_package_version = {} + for packageentry in store.packages(): + if dict_host_capa[hc].is_matching_package(packageentry): + if not packageentry.package in online_package_version: + online_package_version[packageentry.package] = "0" + if PackageVersion(online_package_version[packageentry.package]) < PackageVersion(packageentry.version): + online_package_version[packageentry.package] = packageentry.version + online_package_list[hc] = online_package_version - # Transform data from JSON into a dictionary - for element in json_data: - online_dict[element[0].replace("tis-", "comi-")] = element[1] + for hc in dict_host_capa: + local_package_version = {} + for packageentry in localstore.packages(): + if dict_host_capa[hc].is_matching_package(packageentry): + if not packageentry.package in local_package_version: + local_package_version[packageentry.package] = "0" + if PackageVersion(local_package_version[packageentry.package]) < PackageVersion(packageentry.version): + local_package_version[packageentry.package] = packageentry.version + local_package_list[hc] = local_package_version - # Assuming WAPT.list() returns a list of dictionaries containing package data - local_package_dict = json.loads(wgets("https://%s:%s@%s/api/v3/packages" % (wapt_user, wapt_password, wapt_url))) - # count the number of packages in the WAPT repository - print("Nombre de paquets dans le dépôt WAPT : " + str(len(local_package_dict))) - - # Transform package data into a dictionary - for element in local_package_dict["result"]: - transformed_package_dict[element["package"]] = element["version"] - - # Compare versions and find packages that need to be updated - for key in online_dict: - if key in transformed_package_dict: - if Version(online_dict[key]) > Version(transformed_package_dict[key]): - print(f"{key} doit etre mis a jour de la version {transformed_package_dict[key]} vers la version {online_dict[key]}") - app_to_update_list.append({"new_package": key, "new_version": online_dict[key], "old_version": transformed_package_dict[key]}) + list_app_to_update = [] + for hc in dict_host_capa: + for app in local_package_list[hc]: + if "-" in app: + if "tis-" + app.split("-", 1)[1] in online_package_list[hc]: + if PackageVersion(local_package_list[hc][app]) < PackageVersion(online_package_list[hc]["tis-" + app.split("-", 1)[1]]): + print( + f'{app} new version detected from {local_package_list[hc][app]} to {online_package_list[hc]["tis-"+app.split("-", 1)[1]]} for {hc}' + ) + list_app_to_update.append( + { + "package": app, + "old_version": local_package_list[hc][app], + "new_version": online_package_list[hc]["tis-" + app.split("-", 1)[1]], + } + ) + WAPT.write_audit_data_if_changed("apps_to_upgrade", "list", list_app_to_update, max_count=3) with open(app_to_update_json_path, "w") as json_file: - json.dump(app_to_update_list, json_file) - return "OK" + json.dump(list_app_to_update, json_file) - -def download_json_from_url(url): - try: - response = requests.get(url, verify=False) - response.raise_for_status() # Raise an exception for unsuccessful responses - json_data = response.json() - return json_data - except requests.exceptions.RequestException as e: - print(f"Error downloading JSON from URL: {e}") - return None + if not list_app_to_update: + print("your repository seems up to date") + return "OK" + else: + print("you need to update some packages") + return "WARNING"