Fixed a few issues. release-10.3.4

Wed, 28 Aug 2024 15:26:50 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 28 Aug 2024 15:26:50 +0200
changeset 61
163461aefed6
parent 60
8aeeb7f583eb
child 62
99f2b6faeb86

Fixed a few issues.

PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxWidget.html file | annotate | diff | comparison | revisions
PipxInterface/PipxWidget.py file | annotate | diff | comparison | revisions
PluginPipxInterface.epj file | annotate | diff | comparison | revisions
PluginPipxInterface.py file | annotate | diff | comparison | revisions
PluginPipxInterface.zip file | annotate | diff | comparison | revisions
changelog.md file | annotate | diff | comparison | revisions
--- a/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxWidget.html	Sat Aug 24 15:36:20 2024 +0200
+++ b/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxWidget.html	Wed Aug 28 15:26:50 2024 +0200
@@ -70,6 +70,10 @@
 <td>Private slot to check, if there are any outdated packages.</td>
 </tr>
 <tr>
+<td><a href="#PipxWidget.__checkPackageOutdated">__checkPackageOutdated</a></td>
+<td>Private method to check, if a package item is outdated or has outdated dependencies.</td>
+</tr>
+<tr>
 <td><a href="#PipxWidget.__createSpecMetadataFile">__createSpecMetadataFile</a></td>
 <td>Private slot to create a spec metadata file needed by 'pipx install-all'.</td>
 </tr>
@@ -82,10 +86,18 @@
 <td>Private method to determine all running pipx managed apps.</td>
 </tr>
 <tr>
+<td><a href="#PipxWidget.__getItemForPackage">__getItemForPackage</a></td>
+<td>Private method to get a reference to the item of a given package.</td>
+</tr>
+<tr>
 <td><a href="#PipxWidget.__getRunningApps">__getRunningApps</a></td>
 <td>Private method to determine, which app of the given list of apps is running.</td>
 </tr>
 <tr>
+<td><a href="#PipxWidget.__hasOutdatedItems">__hasOutdatedItems</a></td>
+<td>Private method to check, if the list of packages contains any entries which is outdated or has outdated dependencies.</td>
+</tr>
+<tr>
 <td><a href="#PipxWidget.__initPipxMenu">__initPipxMenu</a></td>
 <td>Private method to create the super menu and attach it to the super menu button.</td>
 </tr>
@@ -242,6 +254,33 @@
         Private slot to check, if there are any outdated packages.
 </p>
 
+<a NAME="PipxWidget.__checkPackageOutdated" ID="PipxWidget.__checkPackageOutdated"></a>
+<h4>PipxWidget.__checkPackageOutdated</h4>
+<b>__checkPackageOutdated</b>(<i>itm</i>)
+<p>
+        Private method to check, if a package item is outdated or has outdated
+        dependencies.
+</p>
+
+<dl>
+
+<dt><i>itm</i> (QTreeWidgetItem)</dt>
+<dd>
+reference to the package item
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating the outdated status
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
 <a NAME="PipxWidget.__createSpecMetadataFile" ID="PipxWidget.__createSpecMetadataFile"></a>
 <h4>PipxWidget.__createSpecMetadataFile</h4>
 <b>__createSpecMetadataFile</b>(<i></i>)
@@ -276,6 +315,32 @@
 set of str
 </dd>
 </dl>
+<a NAME="PipxWidget.__getItemForPackage" ID="PipxWidget.__getItemForPackage"></a>
+<h4>PipxWidget.__getItemForPackage</h4>
+<b>__getItemForPackage</b>(<i>package</i>)
+<p>
+        Private method to get a reference to the item of a given package.
+</p>
+
+<dl>
+
+<dt><i>package</i> (str)</dt>
+<dd>
+package name
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+reference to the associated item
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+QTreeWidgetItem
+</dd>
+</dl>
 <a NAME="PipxWidget.__getRunningApps" ID="PipxWidget.__getRunningApps"></a>
 <h4>PipxWidget.__getRunningApps</h4>
 <b>__getRunningApps</b>(<i>apps</i>)
@@ -302,6 +367,26 @@
 set of str
 </dd>
 </dl>
+<a NAME="PipxWidget.__hasOutdatedItems" ID="PipxWidget.__hasOutdatedItems"></a>
+<h4>PipxWidget.__hasOutdatedItems</h4>
+<b>__hasOutdatedItems</b>(<i></i>)
+<p>
+        Private method to check, if the list of packages contains any entries
+        which is outdated or has outdated dependencies.
+</p>
+
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating outdated items
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
 <a NAME="PipxWidget.__initPipxMenu" ID="PipxWidget.__initPipxMenu"></a>
 <h4>PipxWidget.__initPipxMenu</h4>
 <b>__initPipxMenu</b>(<i></i>)
--- a/PipxInterface/PipxWidget.py	Sat Aug 24 15:36:20 2024 +0200
+++ b/PipxInterface/PipxWidget.py	Wed Aug 28 15:26:50 2024 +0200
@@ -211,11 +211,27 @@
         """
         Private slot to set the action enabled status.
         """
-        selectedPackages = self.__selectedPackages()
+        selectedPackageItems = self.__selectedPackageItems()
 
-        self.__reinstallPackagesAct.setEnabled(len(selectedPackages) == 1)
-        self.__upgradePackagesAct.setEnabled(bool(selectedPackages))
-        self.__uninstallPackagesAct.setEnabled(len(selectedPackages) == 1)
+        self.__reinstallPackagesAct.setEnabled(len(selectedPackageItems) == 1)
+        self.__upgradePackagesAct.setEnabled(
+            len(selectedPackageItems) == 1
+            and bool(selectedPackageItems[0].data(0, PipxWidget.LatestVersionRole))
+        )
+        self.__uninstallPackagesAct.setEnabled(len(selectedPackageItems) == 1)
+        self.__dependenciseSubmenuAct.setEnabled(len(selectedPackageItems) == 1)
+        self.__showOutdatedDependenciesAct.setEnabled(
+            len(selectedPackageItems) == 1
+            and bool(
+                selectedPackageItems[0].data(0, PipxWidget.OutdatedDependenciesRole)
+            )
+        )
+        self.__upgradeDependenciesAct.setEnabled(
+            len(selectedPackageItems) == 1
+            and bool(
+                selectedPackageItems[0].data(0, PipxWidget.OutdatedDependenciesRole)
+            )
+        )
 
     @pyqtSlot()
     def __installPackages(self):
@@ -355,35 +371,47 @@
                 )
             self.on_refreshButton_clicked()
 
+    def __checkPackageOutdated(self, itm):
+        """
+        Private method to check, if a package item is outdated or has outdated
+        dependencies.
+
+        @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.__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
+
     @pyqtSlot()
     def __checkOutdatedPackages(self):
         """
         Private slot to check, if there are any outdated packages.
         """
-        hasOutdated = False
+        outdatedItems = []
 
         with EricOverrideCursor():
             for row in range(self.packagesList.topLevelItemCount()):
                 itm = self.packagesList.topLevelItem(row)
-                package = itm.text(PipxWidget.PackageColumn)
-                latestVersion, outdatedDependencies = self.__pipx.checkPackageOutdated(
-                    package
-                )
-                if latestVersion is not None:
-                    self.__markPackageOutdated(itm, latestVersion, outdatedDependencies)
-                    hasOutdated = True
-                elif (
-                    self.__plugin.getPreferences("IncludeOutdatedDependencies")
-                    and outdatedDependencies
-                ):
-                    self.__markPackageDependenciesOutdated(itm)
-                    hasOutdated = True
-                else:
-                    self.__markPackageClean(itm)
-                    hasOutdated = False
+                if self.__checkPackageOutdated(itm):
+                    outdatedItems.append(itm)
 
         self.__resizePackagesColumns()
-        self.__plugin.setOutdatedIndicator(hasOutdated)
+        self.__plugin.setOutdatedIndicator(bool(outdatedItems))
 
     @pyqtSlot()
     def __upgradePackage(self):
@@ -405,7 +433,12 @@
         else:
             package = packageItem.text(PipxWidget.PackageColumn)
             self.__pipx.upgradePackage(package)
-            self.on_refreshButton_clicked()
+            packageItem = self.__getItemForPackage(package)
+            if packageItem:
+                self.__checkPackageOutdated(packageItem)
+
+            self.__resizePackagesColumns()
+            self.__plugin.setOutdatedIndicator(self.__hasOutdatedItems())
 
     @pyqtSlot()
     def __upgradeAllPackages(self):
@@ -433,7 +466,6 @@
         Private slot to upgrade the shared libraries.
         """
         self.__pipx.upgradeSharedLibraries()
-        self.on_refreshButton_clicked()
 
     @pyqtSlot()
     def __uninstallPackage(self):
@@ -545,7 +577,12 @@
         """
         package = self.__selectedPackages()[0]
         self.__pipx.upgradePackageDependencies(package=package)
-        self.on_refreshButton_clicked()
+        packageItem = self.__getItemForPackage(package)
+        if packageItem:
+            self.__checkPackageOutdated(packageItem)
+
+        self.__resizePackagesColumns()
+        self.__plugin.setOutdatedIndicator(self.__hasOutdatedItems())
 
     #######################################################################
     ## Main widget related methods below
@@ -690,6 +727,7 @@
                     self.__markPackageDependenciesOutdated(itm)
 
         self.__resizePackagesColumns()
+        self.__plugin.setOutdatedIndicator(bool(outdatedPackages))
 
     @pyqtSlot(QTreeWidgetItem, int)
     def on_packagesList_itemActivated(self, item, column):
@@ -711,25 +749,13 @@
         """
         Private slot to handle a change of selected packages and apps.
         """
-        selectedPackages = self.__selectedPackages()
         selectedPackageItems = self.__selectedPackageItems()
 
-        self.upgradeButton.setEnabled(bool(selectedPackages))
-        self.uninstallButton.setEnabled(len(selectedPackages) == 1)
-
-        self.__dependenciseSubmenuAct.setEnabled(len(selectedPackages) == 1)
-        self.__showOutdatedDependenciesAct.setEnabled(
-            len(selectedPackages) == 1
-            and bool(
-                selectedPackageItems[0].data(0, PipxWidget.OutdatedDependenciesRole)
-            )
+        self.upgradeButton.setEnabled(
+            len(selectedPackageItems) == 1
+            and bool(selectedPackageItems[0].data(0, PipxWidget.LatestVersionRole))
         )
-        self.__upgradeDependenciesAct.setEnabled(
-            len(selectedPackages) == 1
-            and bool(
-                selectedPackageItems[0].data(0, PipxWidget.OutdatedDependenciesRole)
-            )
-        )
+        self.uninstallButton.setEnabled(len(selectedPackageItems) == 1)
 
     def __selectedPackages(self):
         """
@@ -814,3 +840,36 @@
             allApps.extend(self.__packageApps(topItm))
 
         return self.__getRunningApps(allApps)
+
+    def __getItemForPackage(self, package):
+        """
+        Private method to get a reference to the item of a given package.
+
+        @param package package name
+        @type str
+        @return reference to the associated item
+        @rtype QTreeWidgetItem
+        """
+        for row in range(self.packagesList.topLevelItemCount()):
+            itm = self.packagesList.topLevelItem(row)
+            if itm.text(PipxWidget.PackageColumn) == package:
+                return itm
+
+        return None
+
+    def __hasOutdatedItems(self):
+        """
+        Private method to check, if the list of packages contains any entries
+        which is outdated or has outdated dependencies.
+
+        @return flag indicating outdated items
+        @rtype bool
+        """
+        for row in range(self.packagesList.topLevelItemCount()):
+            itm = self.packagesList.topLevelItem(row)
+            if itm.data(0, PipxWidget.LatestVersionRole) or itm.data(
+                0, PipxWidget.OutdatedDependenciesRole
+            ):
+                return True
+
+        return False
--- a/PluginPipxInterface.epj	Sat Aug 24 15:36:20 2024 +0200
+++ b/PluginPipxInterface.epj	Wed Aug 28 15:26:50 2024 +0200
@@ -69,7 +69,7 @@
         "DocstringType": "eric_black",
         "EnabledCheckerCategories": "ASY, C, D, E, I, L, M, NO, N, Y, U, W",
         "ExcludeFiles": "*/Ui_*.py",
-        "ExcludeMessages": "C101,E203,E265,E266,E305,E402,M201,M701,M702,M811,M834,M852,N802,N803,N807,N808,N821,U101,W293,W503,Y119,Y401,Y402",
+        "ExcludeMessages": "M201,C101,E203,E265,E266,E305,E402,M251,M701,M702,M811,M834,M852,N802,N803,N807,N808,N821,U101,W293,W503,Y119,Y401,Y402",
         "FixCodes": "",
         "FixIssues": false,
         "FutureChecker": "",
--- a/PluginPipxInterface.py	Sat Aug 24 15:36:20 2024 +0200
+++ b/PluginPipxInterface.py	Wed Aug 28 15:26:50 2024 +0200
@@ -36,7 +36,7 @@
     "author": "Detlev Offenbach <detlev@die-offenbachs.de>",
     "autoactivate": True,
     "deactivateable": True,
-    "version": "10.3.3",
+    "version": "10.3.4",
     "className": "PluginPipxInterface",
     "packageName": "PipxInterface",
     "shortDescription": "Graphical interface to the 'pipx' command.",
Binary file PluginPipxInterface.zip has changed
--- a/changelog.md	Sat Aug 24 15:36:20 2024 +0200
+++ b/changelog.md	Wed Aug 28 15:26:50 2024 +0200
@@ -1,6 +1,10 @@
 ChangeLog
 ---------
 
+__Version 10.3.4__
+
+- bug fixes
+
 __Version 10.3.3__
 
 - bug fixes

eric ide

mercurial