src/eric7/PipInterface/PipPackagesWidget.py

branch
eric7
changeset 10105
5765f4c8543f
parent 10104
3634d3c2a363
child 10133
39d1353996b9
diff -r 3634d3c2a363 -r 5765f4c8543f src/eric7/PipInterface/PipPackagesWidget.py
--- a/src/eric7/PipInterface/PipPackagesWidget.py	Mon Jul 03 10:04:30 2023 +0200
+++ b/src/eric7/PipInterface/PipPackagesWidget.py	Mon Jul 03 12:04:39 2023 +0200
@@ -158,6 +158,7 @@
     ShowProcessClassifiersMode = 1
     ShowProcessEntryPointsMode = 2
     ShowProcessFilesListMode = 3
+    ShowProcessUrlsListMode = 4
 
     SearchVersionRole = Qt.ItemDataRole.UserRole + 1
     VulnerabilityRole = Qt.ItemDataRole.UserRole + 2
@@ -223,22 +224,24 @@
         )
 
         self.__infoLabels = {
-            "name": self.tr("Name:"),
-            "version": self.tr("Version:"),
-            "location": self.tr("Location:"),
-            "requires": self.tr("Requires:"),
-            "summary": self.tr("Summary:"),
-            "home-page": self.tr("Homepage:"),
             "author": self.tr("Author:"),
             "author-email": self.tr("Author Email:"),
-            "license": self.tr("License:"),
-            "metadata-version": self.tr("Metadata Version:"),
-            "installer": self.tr("Installer:"),
             "classifiers": self.tr("Classifiers:"),
             "entry-points": self.tr("Entry Points:"),
             "files": self.tr("Files:"),
+            "home-page": self.tr("Homepage:"),
+            "installer": self.tr("Installer:"),
+            "license": self.tr("License:"),
+            "location": self.tr("Location:"),
+            "metadata-version": self.tr("Metadata Version:"),
+            "name": self.tr("Name:"),
+            "project-urls": self.tr("Project URLs:"),
+            "requires": self.tr("Requires:"),
+            "required-by": self.tr("Required By:"),
+            "summary": self.tr("Summary:"),
+            "version": self.tr("Version:"),
         }
-        self.infoWidget.setHeaderLabels(["Key", "Value"])
+        self.packageInfoWidget.setHeaderLabels(["Key", "Value"])
         self.dependencyInfoWidget.setHeaderLabels(["Key", "Value"])
 
         venvManager = ericApp().getObject("VirtualEnvManager")
@@ -268,6 +271,7 @@
         self.__replies = []
 
         self.viewsStackWidget.setCurrentWidget(self.packagesPage)
+        self.on_packagesList_currentItemChanged(None, None)
 
     @pyqtSlot()
     def __projectOpened(self):
@@ -585,6 +589,8 @@
                                 mode = self.ShowProcessClassifiersMode
                             elif label == "entry-points":
                                 mode = self.ShowProcessEntryPointsMode
+                            elif label == "project-urls":
+                                mode = self.ShowProcessUrlsListMode
                 infoWidget.scrollToTop()
 
             header = infoWidget.header()
@@ -599,36 +605,42 @@
         Private slot reacting on a change of selected items.
         """
         if len(self.packagesList.selectedItems()) == 0:
-            self.infoWidget.clear()
+            self.packageInfoWidget.clear()
+            self.vulnerabilitiesInfoWidget.clear()
+            self.infoWidget.tabBar().hide()
 
-    @pyqtSlot(QTreeWidgetItem, int)
-    def on_packagesList_itemPressed(self, item, column):
+    @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem)
+    def on_packagesList_currentItemChanged(self, curr, prev):
         """
-        Private slot reacting on a package item being pressed.
+        Private slot to handle a change of the current item.
 
-        @param item reference to the pressed item
+        @param curr new current item
+        @type QTreeWidgetItem
+        @param prev previous current item
         @type QTreeWidgetItem
-        @param column pressed column
-        @type int
         """
-        self.infoWidget.clear()
+        self.packageInfoWidget.clear()
+        self.vulnerabilitiesInfoWidget.clear()
 
-        if item is not None:
-            if column == PipPackagesWidget.VulnerabilityColumn and bool(
-                item.text(PipPackagesWidget.VulnerabilityColumn)
-            ):
+        if curr is None:
+            self.infoWidget.tabBar().hide()
+        else:
+            self.__showPackageInformation(
+                curr.text(PipPackagesWidget.PackageColumn), self.packageInfoWidget
+            )
+            if bool(curr.text(PipPackagesWidget.VulnerabilityColumn)):
                 self.__showVulnerabilityInformation(
-                    item.text(PipPackagesWidget.PackageColumn),
-                    item.text(PipPackagesWidget.InstalledVersionColumn),
-                    item.data(
+                    curr.text(PipPackagesWidget.PackageColumn),
+                    curr.text(PipPackagesWidget.InstalledVersionColumn),
+                    curr.data(
                         PipPackagesWidget.VulnerabilityColumn,
                         PipPackagesWidget.VulnerabilityRole,
                     ),
                 )
+                self.infoWidget.tabBar().show()
             else:
-                self.__showPackageInformation(
-                    item.text(PipPackagesWidget.PackageColumn), self.infoWidget
-                )
+                self.infoWidget.tabBar().hide()
+        self.infoWidget.setCurrentIndex(0)
 
         self.__updateActionButtons()
 
@@ -679,9 +691,7 @@
         @param checked state of the checkbox
         @type bool
         """
-        self.on_packagesList_itemPressed(
-            self.packagesList.currentItem(), self.packagesList.currentColumn()
-        )
+        self.on_packagesList_currentItemChanged(self.packagesList.currentItem(), None)
 
     @pyqtSlot(bool)
     def on_installedFilesCheckBox_clicked(self, checked):
@@ -692,9 +702,7 @@
         @param checked state of the checkbox
         @type bool
         """
-        self.on_packagesList_itemPressed(
-            self.packagesList.currentItem(), self.packagesList.currentColumn()
-        )
+        self.on_packagesList_currentItemChanged(self.packagesList.currentItem(), None)
 
     @pyqtSlot()
     def on_refreshButton_clicked(self):
@@ -1736,41 +1744,47 @@
         @param vulnerabilities list of vulnerabilities
         @type list of Vulnerability
         """
-        header = self.tr("{0} {1}", "package name, package version").format(
-            packageName, packageVersion
-        )
-        topItem = QTreeWidgetItem(self.infoWidget, [header])
-        topItem.setFirstColumnSpanned(True)
-        topItem.setExpanded(True)
-        font = topItem.font(0)
-        font.setBold(True)
-        topItem.setFont(0, font)
-
-        for vulnerability in vulnerabilities:
-            title = (
-                vulnerability.cve
-                if vulnerability.cve
-                else vulnerability.vulnerabilityId
+        if vulnerabilities:
+            header = self.tr("{0} {1}", "package name, package version").format(
+                packageName, packageVersion
             )
-            titleItem = QTreeWidgetItem(topItem, [title])
-            titleItem.setFirstColumnSpanned(True)
-            titleItem.setExpanded(True)
+            topItem = QTreeWidgetItem(self.vulnerabilitiesInfoWidget, [header])
+            topItem.setFirstColumnSpanned(True)
+            topItem.setExpanded(True)
+            font = topItem.font(0)
+            font.setBold(True)
+            topItem.setFont(0, font)
+
+            for vulnerability in vulnerabilities:
+                title = (
+                    vulnerability.cve
+                    if vulnerability.cve
+                    else vulnerability.vulnerabilityId
+                )
+                titleItem = QTreeWidgetItem(topItem, [title])
+                titleItem.setFirstColumnSpanned(True)
+                titleItem.setExpanded(True)
 
-            QTreeWidgetItem(
-                titleItem, [self.tr("Affected Version:"), vulnerability.spec]
-            )
-            itm = QTreeWidgetItem(
-                titleItem, [self.tr("Advisory:"), vulnerability.advisory]
-            )
-            itm.setToolTip(
-                1, "<p>{0}</p>".format(vulnerability.advisory.replace("\r\n", "<br/>"))
-            )
+                QTreeWidgetItem(
+                    titleItem, [self.tr("Affected Version:"), vulnerability.spec]
+                )
+                itm = QTreeWidgetItem(
+                    titleItem, [self.tr("Advisory:"), vulnerability.advisory]
+                )
+                itm.setToolTip(
+                    1,
+                    "<p>{0}</p>".format(
+                        vulnerability.advisory.replace("\r\n", "<br/>")
+                    ),
+                )
 
-        self.infoWidget.scrollToTop()
-        self.infoWidget.resizeColumnToContents(0)
+            self.vulnerabilitiesInfoWidget.scrollToTop()
+            self.vulnerabilitiesInfoWidget.resizeColumnToContents(0)
 
-        header = self.infoWidget.header()
-        header.setStretchLastSection(True)
+            header = self.vulnerabilitiesInfoWidget.header()
+            header.setStretchLastSection(True)
+        else:
+            self.vulnerabilitiesInfoWidget.clear()
 
     #######################################################################
     ## Dependency tree related methods below

eric ide

mercurial