src/eric7/PipInterface/PipPackagesWidget.py

branch
eric7
changeset 10133
39d1353996b9
parent 10105
5765f4c8543f
child 10148
31ba20629af4
child 10206
d6921563be6c
diff -r 66c11ab8fefd -r 39d1353996b9 src/eric7/PipInterface/PipPackagesWidget.py
--- a/src/eric7/PipInterface/PipPackagesWidget.py	Mon Jul 24 14:36:06 2023 +0200
+++ b/src/eric7/PipInterface/PipPackagesWidget.py	Mon Jul 24 16:23:02 2023 +0200
@@ -213,6 +213,7 @@
         self.refreshDependenciesButton.setIcon(EricPixmapCache.getIcon("reload"))
         self.showDepPackageDetailsButton.setIcon(EricPixmapCache.getIcon("info"))
         self.dependencyRepairButton.setIcon(EricPixmapCache.getIcon("repair"))
+        self.dependencyRepairAllButton.setIcon(EricPixmapCache.getIcon("repairAll"))
 
         self.__pip = pip
 
@@ -2006,15 +2007,24 @@
             )
         )
 
+        itm = self.dependenciesList.topLevelItem(0)
+        while itm:
+            if not itm.icon(PipPackagesWidget.DepRequiredVersionColumn).isNull():
+                self.dependencyRepairAllButton.setEnabled(True)
+                break
+            itm = self.dependenciesList.itemBelow(itm)
+        else:
+            self.dependencyRepairAllButton.setEnabled(False)
+
     @pyqtSlot()
     def on_dependencyRepairButton_clicked(self):
         """
         Private slot to repair all selected dependencies.
         """
-        packages = []
+        packages = set()
         for itm in self.dependenciesList.selectedItems():
             if not itm.icon(PipPackagesWidget.DepRequiredVersionColumn).isNull():
-                packages.append(
+                packages.add(
                     "{0}{1}".format(
                         itm.text(PipPackagesWidget.DepPackageColumn),
                         itm.text(PipPackagesWidget.DepRequiredVersionColumn),
@@ -2024,7 +2034,35 @@
         venvName = self.environmentsComboBox.currentText()
         if venvName and packages:
             self.__pip.installPackages(
-                packages, venvName=venvName, userSite=self.userDepCheckBox.isChecked()
+                list(packages),
+                venvName=venvName,
+                userSite=self.userDepCheckBox.isChecked(),
+            )
+            self.on_refreshDependenciesButton_clicked()
+
+    @pyqtSlot()
+    def on_dependencyRepairAllButton_clicked(self):
+        """
+        Private slot to repair all dependencies.
+        """
+        packages = set()
+        itm = self.dependenciesList.topLevelItem(0)
+        while itm:
+            if not itm.icon(PipPackagesWidget.DepRequiredVersionColumn).isNull():
+                packages.add(
+                    "{0}{1}".format(
+                        itm.text(PipPackagesWidget.DepPackageColumn),
+                        itm.text(PipPackagesWidget.DepRequiredVersionColumn),
+                    )
+                )
+            itm = self.dependenciesList.itemBelow(itm)
+
+        venvName = self.environmentsComboBox.currentText()
+        if venvName and packages:
+            self.__pip.installPackages(
+                list(packages),
+                venvName=venvName,
+                userSite=self.userDepCheckBox.isChecked(),
             )
             self.on_refreshDependenciesButton_clicked()
 

eric ide

mercurial