From 5beba6050f4d3283a22aab7b0bbef32ffb8c84b8 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 11 Feb 2020 09:52:39 +0100 Subject: Fix api version checking CURA-7207 --- .../Toolbox/src/CloudSync/CloudPackageChecker.py | 2 +- .../src/CloudSync/SubscribedPackagesModel.py | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/plugins/Toolbox/src/CloudSync/CloudPackageChecker.py b/plugins/Toolbox/src/CloudSync/CloudPackageChecker.py index 14db1a992d..f848f818d7 100644 --- a/plugins/Toolbox/src/CloudSync/CloudPackageChecker.py +++ b/plugins/Toolbox/src/CloudSync/CloudPackageChecker.py @@ -83,7 +83,7 @@ class CloudPackageChecker(QObject): package_discrepancy = list(set(user_subscribed_packages).difference(user_installed_packages)) if package_discrepancy: self._model.addDiscrepancies(package_discrepancy) - self._model.initialize(subscribed_packages_payload) + self._model.initialize(self._package_manager, subscribed_packages_payload) self._handlePackageDiscrepancies() def _handlePackageDiscrepancies(self) -> None: diff --git a/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py b/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py index 614d397d91..f29f23b001 100644 --- a/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py +++ b/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py @@ -2,9 +2,12 @@ # Cura is released under the terms of the LGPLv3 or higher. from PyQt5.QtCore import Qt, pyqtProperty, pyqtSlot + +from UM.PackageManager import PackageManager from UM.Qt.ListModel import ListModel +from UM.Version import Version + from cura import ApplicationMetadata -from UM.Logger import Logger from typing import List, Dict, Any @@ -46,7 +49,7 @@ class SubscribedPackagesModel(ListModel): def getIncompatiblePackages(self) -> List[str]: return [package["package_id"] for package in self._items if not package["is_compatible"]] - def initialize(self, subscribed_packages_payload: List[Dict[str, Any]]) -> None: + def initialize(self, package_manager: PackageManager, subscribed_packages_payload: List[Dict[str, Any]]) -> None: self._items.clear() for item in subscribed_packages_payload: if item["package_id"] not in self._discrepancies: @@ -59,10 +62,9 @@ class SubscribedPackagesModel(ListModel): "md5_hash": item["md5_hash"], "is_dismissed": False, } - if self._sdk_version not in item["sdk_versions"]: - package.update({"is_compatible": False}) - else: - package.update({"is_compatible": True}) + + package.update({"is_compatible": self._is_any_version_compatible(package_manager, item["sdk_versions"])}) + try: package.update({"icon_url": item["icon_url"]}) except KeyError: # There is no 'icon_url" in the response payload for this package @@ -70,4 +72,10 @@ class SubscribedPackagesModel(ListModel): self._items.append(package) self.setItems(self._items) - + @staticmethod + def _is_any_version_compatible(package_manager: PackageManager, api_versions: [str]) -> bool: + """:return: True when any of the provided api versions is compatible""" + for version in api_versions: + if package_manager.isPackageCompatible(Version(version)): + return True + return False -- cgit v1.2.3 From bcf4bc813886fc05f7989a983137a5b3fb688ecb Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Feb 2020 11:02:32 +0100 Subject: Simplify _is_any_version_compatible It now literally says: for any version, is it compatible? Contributes to issue CURA-7207. --- plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py b/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py index f29f23b001..8e2b4255f0 100644 --- a/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py +++ b/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py @@ -74,8 +74,9 @@ class SubscribedPackagesModel(ListModel): @staticmethod def _is_any_version_compatible(package_manager: PackageManager, api_versions: [str]) -> bool: - """:return: True when any of the provided api versions is compatible""" - for version in api_versions: - if package_manager.isPackageCompatible(Version(version)): - return True - return False + """ + Check a list of version numbers if any of them applies to our + application. + :return: ``True`` when any of the provided API versions is compatible. + """ + return any(package_manager.isPackageCompatible(Version(version)) for version in api_versions) -- cgit v1.2.3 From 0c42b1fdea9d40c90bafc5875e32d3af1556c9d0 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Feb 2020 11:06:33 +0100 Subject: Code style: Method names with lower camelcase Contributes to issue CURA-7207. --- plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py b/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py index 8e2b4255f0..53a1b0ee71 100644 --- a/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py +++ b/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py @@ -63,7 +63,7 @@ class SubscribedPackagesModel(ListModel): "is_dismissed": False, } - package.update({"is_compatible": self._is_any_version_compatible(package_manager, item["sdk_versions"])}) + package.update({"is_compatible": self._isAnyVersionCompatible(package_manager, item["sdk_versions"])}) try: package.update({"icon_url": item["icon_url"]}) @@ -73,7 +73,7 @@ class SubscribedPackagesModel(ListModel): self.setItems(self._items) @staticmethod - def _is_any_version_compatible(package_manager: PackageManager, api_versions: [str]) -> bool: + def _isAnyVersionCompatible(package_manager: PackageManager, api_versions: [str]) -> bool: """ Check a list of version numbers if any of them applies to our application. -- cgit v1.2.3 From ea9a9d58b17e93eed22923001069fceafea8a798 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Feb 2020 11:09:02 +0100 Subject: Fix typing of list of API versions Contributes to issue CURA-7207. --- plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py b/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py index 53a1b0ee71..da15c71fdb 100644 --- a/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py +++ b/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py @@ -73,7 +73,7 @@ class SubscribedPackagesModel(ListModel): self.setItems(self._items) @staticmethod - def _isAnyVersionCompatible(package_manager: PackageManager, api_versions: [str]) -> bool: + def _isAnyVersionCompatible(package_manager: PackageManager, api_versions: List[str]) -> bool: """ Check a list of version numbers if any of them applies to our application. -- cgit v1.2.3 From f78359ae7644751686f66775cd6624445e6165da Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 11 Feb 2020 11:09:23 +0100 Subject: Fix pylint typing CURA-7207 --- plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py b/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py index f29f23b001..5a2738923f 100644 --- a/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py +++ b/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py @@ -73,7 +73,7 @@ class SubscribedPackagesModel(ListModel): self.setItems(self._items) @staticmethod - def _is_any_version_compatible(package_manager: PackageManager, api_versions: [str]) -> bool: + def _is_any_version_compatible(package_manager: PackageManager, api_versions: List[str]) -> bool: """:return: True when any of the provided api versions is compatible""" for version in api_versions: if package_manager.isPackageCompatible(Version(version)): -- cgit v1.2.3 From a33cfdfba63a906ac44e6a7068845aacafb9be72 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 11 Feb 2020 11:21:28 +0100 Subject: Simplify package compatibility checking CURA-7207 --- plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py b/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py index da15c71fdb..db16c5ea84 100644 --- a/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py +++ b/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py @@ -63,7 +63,8 @@ class SubscribedPackagesModel(ListModel): "is_dismissed": False, } - package.update({"is_compatible": self._isAnyVersionCompatible(package_manager, item["sdk_versions"])}) + compatible = any(package_manager.isPackageCompatible(Version(version)) for version in item["sdk_versions"]) + package.update({"is_compatible": compatible}) try: package.update({"icon_url": item["icon_url"]}) @@ -71,12 +72,3 @@ class SubscribedPackagesModel(ListModel): package.update({"icon_url": ""}) self._items.append(package) self.setItems(self._items) - - @staticmethod - def _isAnyVersionCompatible(package_manager: PackageManager, api_versions: List[str]) -> bool: - """ - Check a list of version numbers if any of them applies to our - application. - :return: ``True`` when any of the provided API versions is compatible. - """ - return any(package_manager.isPackageCompatible(Version(version)) for version in api_versions) -- cgit v1.2.3