PipxInterface/PipxWidget.py

changeset 32
b7a3ae7519ba
parent 31
17e37d4ebe42
child 36
5b9bc68ef028
--- a/PipxInterface/PipxWidget.py	Sat Jul 27 19:39:32 2024 +0200
+++ b/PipxInterface/PipxWidget.py	Sun Jul 28 11:46:18 2024 +0200
@@ -36,6 +36,7 @@
     AppPathRole = Qt.ItemDataRole.UserRole
     VersionRole = Qt.ItemDataRole.UserRole + 1
     LatestVersionRole = Qt.ItemDataRole.UserRole + 2
+    OutdatedDependenciesRole = Qt.ItemDataRole.UserRole + 3
 
     def __init__(self, plugin, fromEric=True, parent=None):
         """
@@ -338,10 +339,16 @@
             for row in range(self.packagesList.topLevelItemCount()):
                 itm = self.packagesList.topLevelItem(row)
                 package = itm.text(PipxWidget.PackageColumn)
-                latestVersion = self.__pipx.checkPackageOutdated(package)
+                latestVersion, outdatedDependencies = self.__pipx.checkPackageOutdated(
+                    package
+                )
                 if latestVersion is not None:
-                    self.__markPackageOutdated(itm, latestVersion)
-                # TODO: check outdated dependencies (configurable)
+                    self.__markPackageOutdated(itm, latestVersion, outdatedDependencies)
+                elif (
+                    self.__plugin.getPreferences("IncludeOutdatedDependencies")
+                    and outdatedDependencies
+                ):
+                    self.__markPackageDependenciesOutdated(itm)
         self.__resizePackagesColumns()
 
     @pyqtSlot()
@@ -470,7 +477,7 @@
         self.packagesList.resizeColumnToContents(PipxWidget.VersionColumn)
         self.packagesList.resizeColumnToContents(PipxWidget.PythonVersionColumn)
 
-    def __markPackageOutdated(self, item, latestVersion):
+    def __markPackageOutdated(self, item, latestVersion, outdatedDependencies):
         """
         Private method to mark the given package item as outdated.
 
@@ -481,6 +488,7 @@
         """
         version = item.data(0, PipxWidget.VersionRole)
         item.setData(0, PipxWidget.LatestVersionRole, latestVersion)
+        item.setData(0, PipxWidget.OutdatedDependenciesRole, outdatedDependencies)
         item.setText(
             PipxWidget.VersionColumn,
             self.tr("{0} ({1})", "current version, latest version").format(
@@ -489,6 +497,16 @@
         )
         item.setIcon(PipxWidget.VersionColumn, EricPixmapCache.getIcon("upgrade"))
 
+    def __markPackageDependenciesOutdated(self, item):
+        """
+        Private method to mark the given package item as having outdated dependencies.
+
+        @param item reference to the outdated package item
+        @type QTreeWidgetItem
+        """
+        item.setData(0, PipxWidget.OutdatedDependenciesRole, True)
+        item.setIcon(PipxWidget.VersionColumn, EricPixmapCache.getIcon("upgrade"))
+
     def __populatePackages(self):
         """
         Private method to populate the packages list.
@@ -512,6 +530,10 @@
             for app, appPath in package["apps"]:
                 itm = QTreeWidgetItem(topItem, [app])
                 itm.setData(0, PipxWidget.AppPathRole, appPath)
+
+        if self.__plugin.getPreferences("AutoCheckOutdated"):
+            self.__checkOutdatedPackages()
+
         self.__resizePackagesColumns()
 
     @pyqtSlot()
@@ -528,8 +550,12 @@
             if itm.isExpanded():
                 expandedPackages.append(itm.text(PipxWidget.PackageColumn))
             latestVersion = itm.data(0, PipxWidget.LatestVersionRole)
-            if latestVersion is not None:
-                outdatedPackages[itm.text(PipxWidget.PackageColumn)] = latestVersion
+            outdatedDependencies = itm.data(0, PipxWidget.OutdatedDependenciesRole)
+            if latestVersion or outdatedDependencies:
+                outdatedPackages[itm.text(PipxWidget.PackageColumn)] = (
+                    latestVersion,
+                    outdatedDependencies,
+                )
 
         self.__populatePackages()
 
@@ -539,11 +565,16 @@
             if package in expandedPackages:
                 itm.setExpanded(True)
 
-            if (
-                package in outdatedPackages
-                and itm.data(0, PipxWidget.VersionRole) != outdatedPackages[package]
-            ):
-                self.__markPackageOutdated(itm, outdatedPackages[package])
+            if package in outdatedPackages:
+                latestVersion, outdatedDependencies = outdatedPackages[package]
+                if itm.data(0, PipxWidget.VersionRole) != latestVersion:
+                    self.__markPackageOutdated(itm, latestVersion, outdatedDependencies)
+                elif (
+                    itm.data(0, PipxWidget.OutdatedDependenciesRole)
+                    != outdatedDependencies
+                    and outdatedDependencies
+                ):
+                    self.__markPackageDependenciesOutdated()
 
         self.__resizePackagesColumns()
 
@@ -630,9 +661,13 @@
         @rtype set of str
         """
         runningApps = set()
-        
-        for proc in psutil.process_iter(["name"]):
-            if proc.info["name"] in apps:
+        venvs = self.venvsPathEdit.text()
+        for proc in psutil.process_iter(["name", "cmdline"]):
+            if (
+                proc.info["name"] in apps
+                and proc.info["cmdline"]
+                and proc.info["cmdline"][0].startswith(venvs)
+            ):
                 runningApps.add(proc.info["name"])
 
         return runningApps

eric ide

mercurial