Added functionality to uninstall single or all pipx managed packages.

Thu, 27 Jun 2024 16:20:56 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 27 Jun 2024 16:20:56 +0200
changeset 11
6af0704c8175
parent 10
89e0e6e5ca7a
child 12
a09f763d5e1f

Added functionality to uninstall single or all pipx managed packages.

PipxInterface/Pipx.py file | annotate | diff | comparison | revisions
PipxInterface/PipxWidget.py file | annotate | diff | comparison | revisions
PipxInterface/PipxWidget.ui file | annotate | diff | comparison | revisions
PipxInterface/Ui_PipxWidget.py file | annotate | diff | comparison | revisions
--- a/PipxInterface/Pipx.py	Thu Jun 27 15:42:50 2024 +0200
+++ b/PipxInterface/Pipx.py	Thu Jun 27 16:20:56 2024 +0200
@@ -305,3 +305,26 @@
                 return False, str(err)
         else:
             return False, output
+
+    def uninstallPackage(self, package):
+        """
+        Public method to uninstall the given package.
+
+        @param package name of the package to be uninstalled
+        @type str
+        """
+        args = ["uninstall", package]
+        dia = PipxExecDialog(self.tr("Uninstall Package"))
+        res = dia.startProcess(self.__getPipxExecutable(), args)
+        if res:
+            dia.exec()
+
+    def uninstallAllPackages(self):
+        """
+        Public method to uninstall all pipx managed packages.
+        """
+        args = ["uninstall-all"]
+        dia = PipxExecDialog(self.tr("Uninstall All Packages"))
+        res = dia.startProcess(self.__getPipxExecutable(), args)
+        if res:
+            dia.exec()
--- a/PipxInterface/PipxWidget.py	Thu Jun 27 15:42:50 2024 +0200
+++ b/PipxInterface/PipxWidget.py	Thu Jun 27 16:20:56 2024 +0200
@@ -63,8 +63,8 @@
         self.uninstallButton.setIcon(EricPixmapCache.getIcon("minus"))
 
         self.installButton.clicked.connect(self.__installPackages)
-        self.upgradeButton.clicked.connect(self.__upgradePackages)
-        self.uninstallButton.clicked.connect(self.__uninstallPackages)
+        self.upgradeButton.clicked.connect(self.__upgradePackage)
+        self.uninstallButton.clicked.connect(self.__uninstallPackage)
 
         self.pipxMenuButton.setAutoRaise(True)
         self.pipxMenuButton.setShowMenuInside(True)
@@ -123,7 +123,7 @@
 
         self.__upgradeSubmenu = QMenu(self.tr("Upgrade"))
         self.__upgradePackagesAct = self.__upgradeSubmenu.addAction(
-            self.tr("Upgrade Selected Packages"), self.__upgradePackages
+            self.tr("Upgrade Selected Package"), self.__upgradePackage
         )
         self.__upgradeAllPackagesAct = self.__upgradeSubmenu.addAction(
             self.tr("Upgrade All Packages"), self.__upgradeAllPackages
@@ -139,7 +139,7 @@
 
         self.__uninstallSubmenu = QMenu(self.tr("Uninstall"))
         self.__uninstallPackagesAct = self.__uninstallSubmenu.addAction(
-            self.tr("Uninstall Selected Packages"), self.__uninstallPackages
+            self.tr("Uninstall Selected Package"), self.__uninstallPackage
         )
         self.__uninstallAllPackagesAct = self.__uninstallSubmenu.addAction(
             self.tr("Uninstall All Packages"), self.__uninstallAllPackages
@@ -277,9 +277,9 @@
         pass
 
     @pyqtSlot()
-    def __upgradePackages(self):
+    def __upgradePackage(self):
         """
-        Private slot to upgrade the selected packages.
+        Private slot to upgrade the selected package.
         """
         # TODO: not implemented yet
         pass
@@ -301,12 +301,21 @@
         pass
 
     @pyqtSlot()
-    def __uninstallPackages(self):
+    def __uninstallPackage(self):
+        """
+        Private slot to uninstall the selected package.
         """
-        Private slot to uninstall the selected packages.
-        """
-        # TODO: not implemented yet
-        pass
+        package = self.__selectedPackages()[0]
+        yes = EricMessageBox.yesNo(
+            self,
+            self.tr("Uninstall Package"),
+            self.tr(
+                "<p>Shall the package <b>{0}</b> really be uninstalled?</p>"
+            ).format(package),
+        )
+        if yes:
+            self.__pipx.uninstallPackage(package)
+            self.on_refreshButton_clicked()
 
     @pyqtSlot()
     def __uninstallAllPackages(self):
@@ -314,7 +323,16 @@
         Private slot to uninstall all packages.
         """
         # TODO: not implemented yet
-        pass
+        yes = EricMessageBox.yesNo(
+            self,
+            self.tr("Uninstall All Packages"),
+            self.tr(
+                "<p>Do you really want to uninstall <b>ALL</b> packages?</p>"
+            ),
+        )
+        if yes:
+            self.__pipx.uninstallAllPackages()
+            self.on_refreshButton_clicked()
 
     #######################################################################
     ## Main widget related methods below
--- a/PipxInterface/PipxWidget.ui	Thu Jun 27 15:42:50 2024 +0200
+++ b/PipxInterface/PipxWidget.ui	Thu Jun 27 16:20:56 2024 +0200
@@ -152,14 +152,14 @@
      <item>
       <widget class="QToolButton" name="upgradeButton">
        <property name="toolTip">
-        <string>Press to upgrade the selected packages.</string>
+        <string>Press to upgrade the selected package.</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QToolButton" name="uninstallButton">
        <property name="toolTip">
-        <string>Press to uninstall the selected packages.</string>
+        <string>Press to uninstall the selected package.</string>
        </property>
       </widget>
      </item>
--- a/PipxInterface/Ui_PipxWidget.py	Thu Jun 27 15:42:50 2024 +0200
+++ b/PipxInterface/Ui_PipxWidget.py	Thu Jun 27 16:20:56 2024 +0200
@@ -109,8 +109,8 @@
         self.label_5.setText(_translate("PipxWidget", "Standalone Interpreters:"))
         self.refreshButton.setToolTip(_translate("PipxWidget", "Press to refresh the packages list."))
         self.installButton.setToolTip(_translate("PipxWidget", "Press to install packages."))
-        self.upgradeButton.setToolTip(_translate("PipxWidget", "Press to upgrade the selected packages."))
-        self.uninstallButton.setToolTip(_translate("PipxWidget", "Press to uninstall the selected packages."))
+        self.upgradeButton.setToolTip(_translate("PipxWidget", "Press to upgrade the selected package."))
+        self.uninstallButton.setToolTip(_translate("PipxWidget", "Press to uninstall the selected package."))
         self.packagesList.setSortingEnabled(True)
         self.packagesList.headerItem().setText(0, _translate("PipxWidget", "Package/Application"))
         self.packagesList.headerItem().setText(1, _translate("PipxWidget", "Version"))

eric ide

mercurial