eric7/PipInterface/PipLicensesDialog.py

branch
eric7-maintenance
changeset 9111
4ac66b6c33a4
parent 9014
cdf68c00881d
child 9192
a763d57e23bc
--- a/eric7/PipInterface/PipLicensesDialog.py	Mon May 02 15:53:05 2022 +0200
+++ b/eric7/PipInterface/PipLicensesDialog.py	Wed Jun 01 13:48:49 2022 +0200
@@ -8,6 +8,7 @@
 """
 
 import os
+import re
 
 from PyQt6.QtCore import pyqtSlot, Qt
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QTreeWidgetItem
@@ -53,6 +54,8 @@
         self.__pip = pip
         self.__environment = environment
         
+        self.__allFilter = self.tr("<All>")
+        
         self.__saveCSVButton = self.buttonBox.addButton(
             self.tr("Save as CSV..."), QDialogButtonBox.ButtonRole.ActionRole)
         self.__saveCSVButton.clicked.connect(self.__saveAsCSV)
@@ -74,6 +77,9 @@
             # That should never happen; play it safe.
             self.environmentLabel.setText(self.tr("No environment specified."))
         
+        self.licenseFilterComboBox.currentTextChanged.connect(
+            self.__filterPackagesByLicense)
+        
         self.__refreshLicenses()
         
     @pyqtSlot()
@@ -84,6 +90,9 @@
         with EricOverrideCursor():
             self.licensesList.clear()
             self.summaryList.clear()
+            self.licenseFilterComboBox.clear()
+            
+            licensesForFilter = set()
             
             # step 1: show the licenses per package
             self.licensesList.setUpdatesEnabled(False)
@@ -118,6 +127,7 @@
                     "{0:4d}".format(lic["Count"]),
                     lic["License"].replace("; ", "\n"),
                 ])
+                licensesForFilter |= set(lic["License"].split("; "))
             
             self.summaryList.sortItems(
                 PipLicensesDialog.SummaryLicenseColumn,
@@ -125,10 +135,36 @@
             for col in range(self.summaryList.columnCount()):
                 self.summaryList.resizeColumnToContents(col)
             self.summaryList.setUpdatesEnabled(True)
+            
+            self.licenseFilterComboBox.addItems(
+                [self.__allFilter] + sorted(licensesForFilter))
         
         enable = bool(self.licensesList.topLevelItemCount())
         self.__saveCSVButton.setEnabled(enable)
     
+    @pyqtSlot(str)
+    def __filterPackagesByLicense(self, licenseName):
+        """
+        Private slot to filter the list of packages by license.
+        
+        @param licenseName license name
+        @type str
+        """
+        pattern = r"\b{0}".format(re.escape(licenseName))
+        if not licenseName.endswith((")", "]", "}")):
+            pattern += r"\b"
+        regexp = re.compile(pattern)
+        for row in range(self.licensesList.topLevelItemCount()):
+            itm = self.licensesList.topLevelItem(row)
+            if licenseName == self.__allFilter:
+                itm.setHidden(False)
+            else:
+                itm.setHidden(
+                    regexp.search(
+                        itm.text(PipLicensesDialog.LicensesLicenseColumn)
+                    ) is None
+                )
+    
     @pyqtSlot()
     def __saveAsCSV(self):
         """

eric ide

mercurial