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