PipxInterface/PipxWidget.py

changeset 78
5efcdee9c170
parent 69
b46e8595155a
child 81
b6280afecc83
diff -r 7d6db868d49f -r 5efcdee9c170 PipxInterface/PipxWidget.py
--- a/PipxInterface/PipxWidget.py	Sat Sep 07 19:29:57 2024 +0200
+++ b/PipxInterface/PipxWidget.py	Sun Sep 15 11:57:39 2024 +0200
@@ -29,7 +29,7 @@
 
 class PipxWidget(QWidget, Ui_PipxWidget):
     """
-    Class documentation goes here.
+    Class implementing the pipx management widget.
     """
 
     PackageColumn = 0
@@ -58,6 +58,7 @@
 
         self.__plugin = plugin
         self.__pipx = Pipx(self)
+        self.__pipx.outdatedPackage.connect(self.__handleOutdatedPackage)
 
         if fromEric:
             self.layout().setContentsMargins(0, 3, 0, 0)
@@ -380,40 +381,45 @@
 
         @param itm reference to the package item
         @type QTreeWidgetItem
-        @return flag indicating the outdated status
-        @rtype bool
         """
         package = itm.text(PipxWidget.PackageColumn)
-        latestVersion, outdatedDependencies = self.__pipx.checkPackageOutdated(package)
-        if latestVersion is not None:
+        self.__pipx.checkPackageOutdated(package)
+
+    @pyqtSlot(str, str, bool)
+    def __handleOutdatedPackage(self, package, latestVersion, outdatedDependencies):
+        """
+        Private slot to handle the pipx client reporting an outdated package or a
+        package with outdated dependencies.
+
+        @param package name of the package
+        @type str
+        @param latestVersion latest available version in case outdated
+        @type str
+        @param outdatedDependencies flag indicating outdated dependencies
+        @type bool
+        """
+        itm = self.__getItemForPackage(package=package)
+        if latestVersion:
             self.__markPackageOutdated(itm, latestVersion, outdatedDependencies)
-            isOutdated = True
         elif (
             self.__plugin.getPreferences("IncludeOutdatedDependencies")
             and outdatedDependencies
         ):
             self.__markPackageDependenciesOutdated(itm)
-            isOutdated = True
         else:
             self.__markPackageClean(itm)
-            isOutdated = False
-        return isOutdated
+
+        self.__resizePackagesColumns()
+        self.__plugin.setOutdatedIndicator(self.__hasOutdatedItems())
 
     @pyqtSlot()
     def __checkOutdatedPackages(self):
         """
         Private slot to check, if there are any outdated packages.
         """
-        outdatedItems = []
-
-        with EricOverrideCursor():
-            for row in range(self.packagesList.topLevelItemCount()):
-                itm = self.packagesList.topLevelItem(row)
-                if self.__checkPackageOutdated(itm):
-                    outdatedItems.append(itm)
-
-        self.__resizePackagesColumns()
-        self.__plugin.setOutdatedIndicator(bool(outdatedItems))
+        for row in range(self.packagesList.topLevelItemCount()):
+            itm = self.packagesList.topLevelItem(row)
+            self.__checkPackageOutdated(itm)
 
     @pyqtSlot()
     def __upgradePackage(self):
@@ -435,6 +441,7 @@
         else:
             package = packageItem.text(PipxWidget.PackageColumn)
             self.__pipx.upgradePackage(package)
+            self.__checkPackageVersion(packageItem)
             self.__checkPackageOutdated(packageItem)
 
             self.__resizePackagesColumns()
@@ -528,8 +535,9 @@
         """
         Private slot to show a dialog with the dependencies of the selected package.
         """
-        package = self.__selectedPackages()[0]
-        dependencies = self.__pipx.getAllPackageDependencies(package=package)
+        with EricOverrideCursor():
+            package = self.__selectedPackages()[0]
+            dependencies = self.__pipx.getAllPackageDependencies(package=package)
 
         dlg = PipxDependenciesDialog(
             package=package,
@@ -544,8 +552,9 @@
         Private slot to show a dialog with the outdated dependencies of the selected
         package.
         """
-        package = self.__selectedPackages()[0]
-        dependencies = self.__pipx.getOutdatedPackageDependencies(package=package)
+        with EricOverrideCursor():
+            package = self.__selectedPackages()[0]
+            dependencies = self.__pipx.getOutdatedPackageDependencies(package=package)
 
         dlg = PipxDependenciesDialog(
             package=package,
@@ -560,8 +569,9 @@
         Private slot to show a dialog with the up-to-date dependencies of the selected
         package.
         """
-        package = self.__selectedPackages()[0]
-        dependencies = self.__pipx.getUptodatePackageDependencies(package=package)
+        with EricOverrideCursor():
+            package = self.__selectedPackages()[0]
+            dependencies = self.__pipx.getUptodatePackageDependencies(package=package)
 
         dlg = PipxDependenciesDialog(
             package=package,
@@ -665,6 +675,18 @@
         item.setIcon(PipxWidget.VersionColumn, QIcon())
         item.setToolTip(PipxWidget.VersionColumn, self.tr("everything up-to-date"))
 
+    def __checkPackageVersion(self, itm):
+        """
+        Private method to check the version of a package.
+
+        @param itm reference to the package item
+        @type QTreeWidgetItem
+        """
+        package = itm.text(PipxWidget.PackageColumn)
+        version = self.__pipx.getPackageVersion(package)
+        itm.setText(PipxWidget.VersionColumn, version)
+        itm.setData(0, PipxWidget.VersionRole, version)
+
     def __populatePackages(self):
         """
         Private method to populate the packages list.
@@ -709,12 +731,13 @@
             if itm.isExpanded():
                 expandedPackages.append(itm.text(PipxWidget.PackageColumn))
             latestVersion = itm.data(0, PipxWidget.LatestVersionRole)
-            outdatedDependencies = itm.data(0, PipxWidget.OutdatedDependenciesRole)
-            if latestVersion or outdatedDependencies:
-                outdatedPackages[itm.text(PipxWidget.PackageColumn)] = (
-                    latestVersion,
-                    outdatedDependencies,
-                )
+            if not self.__plugin.getPreferences("AutoCheckOutdated"):
+                outdatedDependencies = itm.data(0, PipxWidget.OutdatedDependenciesRole)
+                if latestVersion or outdatedDependencies:
+                    outdatedPackages[itm.text(PipxWidget.PackageColumn)] = (
+                        latestVersion,
+                        outdatedDependencies,
+                    )
 
         self.__populatePackages()
 

eric ide

mercurial