src/eric7/PipInterface/PipPackagesWidget.py

branch
eric7
changeset 10105
5765f4c8543f
parent 10104
3634d3c2a363
child 10133
39d1353996b9
equal deleted inserted replaced
10104:3634d3c2a363 10105:5765f4c8543f
156 156
157 ShowProcessGeneralMode = 0 157 ShowProcessGeneralMode = 0
158 ShowProcessClassifiersMode = 1 158 ShowProcessClassifiersMode = 1
159 ShowProcessEntryPointsMode = 2 159 ShowProcessEntryPointsMode = 2
160 ShowProcessFilesListMode = 3 160 ShowProcessFilesListMode = 3
161 ShowProcessUrlsListMode = 4
161 162
162 SearchVersionRole = Qt.ItemDataRole.UserRole + 1 163 SearchVersionRole = Qt.ItemDataRole.UserRole + 1
163 VulnerabilityRole = Qt.ItemDataRole.UserRole + 2 164 VulnerabilityRole = Qt.ItemDataRole.UserRole + 2
164 165
165 PackageColumn = 0 166 PackageColumn = 0
221 self.dependenciesList.header().setSortIndicator( 222 self.dependenciesList.header().setSortIndicator(
222 PipPackagesWidget.DepPackageColumn, Qt.SortOrder.AscendingOrder 223 PipPackagesWidget.DepPackageColumn, Qt.SortOrder.AscendingOrder
223 ) 224 )
224 225
225 self.__infoLabels = { 226 self.__infoLabels = {
226 "name": self.tr("Name:"),
227 "version": self.tr("Version:"),
228 "location": self.tr("Location:"),
229 "requires": self.tr("Requires:"),
230 "summary": self.tr("Summary:"),
231 "home-page": self.tr("Homepage:"),
232 "author": self.tr("Author:"), 227 "author": self.tr("Author:"),
233 "author-email": self.tr("Author Email:"), 228 "author-email": self.tr("Author Email:"),
234 "license": self.tr("License:"),
235 "metadata-version": self.tr("Metadata Version:"),
236 "installer": self.tr("Installer:"),
237 "classifiers": self.tr("Classifiers:"), 229 "classifiers": self.tr("Classifiers:"),
238 "entry-points": self.tr("Entry Points:"), 230 "entry-points": self.tr("Entry Points:"),
239 "files": self.tr("Files:"), 231 "files": self.tr("Files:"),
232 "home-page": self.tr("Homepage:"),
233 "installer": self.tr("Installer:"),
234 "license": self.tr("License:"),
235 "location": self.tr("Location:"),
236 "metadata-version": self.tr("Metadata Version:"),
237 "name": self.tr("Name:"),
238 "project-urls": self.tr("Project URLs:"),
239 "requires": self.tr("Requires:"),
240 "required-by": self.tr("Required By:"),
241 "summary": self.tr("Summary:"),
242 "version": self.tr("Version:"),
240 } 243 }
241 self.infoWidget.setHeaderLabels(["Key", "Value"]) 244 self.packageInfoWidget.setHeaderLabels(["Key", "Value"])
242 self.dependencyInfoWidget.setHeaderLabels(["Key", "Value"]) 245 self.dependencyInfoWidget.setHeaderLabels(["Key", "Value"])
243 246
244 venvManager = ericApp().getObject("VirtualEnvManager") 247 venvManager = ericApp().getObject("VirtualEnvManager")
245 venvManager.virtualEnvironmentAdded.connect(self.on_refreshButton_clicked) 248 venvManager.virtualEnvironmentAdded.connect(self.on_refreshButton_clicked)
246 venvManager.virtualEnvironmentRemoved.connect(self.on_refreshButton_clicked) 249 venvManager.virtualEnvironmentRemoved.connect(self.on_refreshButton_clicked)
266 self.__querySummary = [] 269 self.__querySummary = []
267 270
268 self.__replies = [] 271 self.__replies = []
269 272
270 self.viewsStackWidget.setCurrentWidget(self.packagesPage) 273 self.viewsStackWidget.setCurrentWidget(self.packagesPage)
274 self.on_packagesList_currentItemChanged(None, None)
271 275
272 @pyqtSlot() 276 @pyqtSlot()
273 def __projectOpened(self): 277 def __projectOpened(self):
274 """ 278 """
275 Private slot to handle the projectOpened signal. 279 Private slot to handle the projectOpened signal.
583 mode = self.ShowProcessFilesListMode 587 mode = self.ShowProcessFilesListMode
584 elif label == "classifiers": 588 elif label == "classifiers":
585 mode = self.ShowProcessClassifiersMode 589 mode = self.ShowProcessClassifiersMode
586 elif label == "entry-points": 590 elif label == "entry-points":
587 mode = self.ShowProcessEntryPointsMode 591 mode = self.ShowProcessEntryPointsMode
592 elif label == "project-urls":
593 mode = self.ShowProcessUrlsListMode
588 infoWidget.scrollToTop() 594 infoWidget.scrollToTop()
589 595
590 header = infoWidget.header() 596 header = infoWidget.header()
591 header.setStretchLastSection(False) 597 header.setStretchLastSection(False)
592 header.resizeSections(QHeaderView.ResizeMode.ResizeToContents) 598 header.resizeSections(QHeaderView.ResizeMode.ResizeToContents)
597 def on_packagesList_itemSelectionChanged(self): 603 def on_packagesList_itemSelectionChanged(self):
598 """ 604 """
599 Private slot reacting on a change of selected items. 605 Private slot reacting on a change of selected items.
600 """ 606 """
601 if len(self.packagesList.selectedItems()) == 0: 607 if len(self.packagesList.selectedItems()) == 0:
602 self.infoWidget.clear() 608 self.packageInfoWidget.clear()
603 609 self.vulnerabilitiesInfoWidget.clear()
604 @pyqtSlot(QTreeWidgetItem, int) 610 self.infoWidget.tabBar().hide()
605 def on_packagesList_itemPressed(self, item, column): 611
606 """ 612 @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem)
607 Private slot reacting on a package item being pressed. 613 def on_packagesList_currentItemChanged(self, curr, prev):
608 614 """
609 @param item reference to the pressed item 615 Private slot to handle a change of the current item.
616
617 @param curr new current item
610 @type QTreeWidgetItem 618 @type QTreeWidgetItem
611 @param column pressed column 619 @param prev previous current item
612 @type int 620 @type QTreeWidgetItem
613 """ 621 """
614 self.infoWidget.clear() 622 self.packageInfoWidget.clear()
615 623 self.vulnerabilitiesInfoWidget.clear()
616 if item is not None: 624
617 if column == PipPackagesWidget.VulnerabilityColumn and bool( 625 if curr is None:
618 item.text(PipPackagesWidget.VulnerabilityColumn) 626 self.infoWidget.tabBar().hide()
619 ): 627 else:
628 self.__showPackageInformation(
629 curr.text(PipPackagesWidget.PackageColumn), self.packageInfoWidget
630 )
631 if bool(curr.text(PipPackagesWidget.VulnerabilityColumn)):
620 self.__showVulnerabilityInformation( 632 self.__showVulnerabilityInformation(
621 item.text(PipPackagesWidget.PackageColumn), 633 curr.text(PipPackagesWidget.PackageColumn),
622 item.text(PipPackagesWidget.InstalledVersionColumn), 634 curr.text(PipPackagesWidget.InstalledVersionColumn),
623 item.data( 635 curr.data(
624 PipPackagesWidget.VulnerabilityColumn, 636 PipPackagesWidget.VulnerabilityColumn,
625 PipPackagesWidget.VulnerabilityRole, 637 PipPackagesWidget.VulnerabilityRole,
626 ), 638 ),
627 ) 639 )
640 self.infoWidget.tabBar().show()
628 else: 641 else:
629 self.__showPackageInformation( 642 self.infoWidget.tabBar().hide()
630 item.text(PipPackagesWidget.PackageColumn), self.infoWidget 643 self.infoWidget.setCurrentIndex(0)
631 )
632 644
633 self.__updateActionButtons() 645 self.__updateActionButtons()
634 646
635 @pyqtSlot(QTreeWidgetItem, int) 647 @pyqtSlot(QTreeWidgetItem, int)
636 def on_packagesList_itemActivated(self, item, column): 648 def on_packagesList_itemActivated(self, item, column):
677 checkbox. 689 checkbox.
678 690
679 @param checked state of the checkbox 691 @param checked state of the checkbox
680 @type bool 692 @type bool
681 """ 693 """
682 self.on_packagesList_itemPressed( 694 self.on_packagesList_currentItemChanged(self.packagesList.currentItem(), None)
683 self.packagesList.currentItem(), self.packagesList.currentColumn()
684 )
685 695
686 @pyqtSlot(bool) 696 @pyqtSlot(bool)
687 def on_installedFilesCheckBox_clicked(self, checked): 697 def on_installedFilesCheckBox_clicked(self, checked):
688 """ 698 """
689 Private slot to handle a change of the installed files information 699 Private slot to handle a change of the installed files information
690 checkbox. 700 checkbox.
691 701
692 @param checked state of the checkbox 702 @param checked state of the checkbox
693 @type bool 703 @type bool
694 """ 704 """
695 self.on_packagesList_itemPressed( 705 self.on_packagesList_currentItemChanged(self.packagesList.currentItem(), None)
696 self.packagesList.currentItem(), self.packagesList.currentColumn()
697 )
698 706
699 @pyqtSlot() 707 @pyqtSlot()
700 def on_refreshButton_clicked(self): 708 def on_refreshButton_clicked(self):
701 """ 709 """
702 Private slot to refresh the display. 710 Private slot to refresh the display.
1734 @param packageVersion installed version number 1742 @param packageVersion installed version number
1735 @type str 1743 @type str
1736 @param vulnerabilities list of vulnerabilities 1744 @param vulnerabilities list of vulnerabilities
1737 @type list of Vulnerability 1745 @type list of Vulnerability
1738 """ 1746 """
1739 header = self.tr("{0} {1}", "package name, package version").format( 1747 if vulnerabilities:
1740 packageName, packageVersion 1748 header = self.tr("{0} {1}", "package name, package version").format(
1741 ) 1749 packageName, packageVersion
1742 topItem = QTreeWidgetItem(self.infoWidget, [header]) 1750 )
1743 topItem.setFirstColumnSpanned(True) 1751 topItem = QTreeWidgetItem(self.vulnerabilitiesInfoWidget, [header])
1744 topItem.setExpanded(True) 1752 topItem.setFirstColumnSpanned(True)
1745 font = topItem.font(0) 1753 topItem.setExpanded(True)
1746 font.setBold(True) 1754 font = topItem.font(0)
1747 topItem.setFont(0, font) 1755 font.setBold(True)
1748 1756 topItem.setFont(0, font)
1749 for vulnerability in vulnerabilities: 1757
1750 title = ( 1758 for vulnerability in vulnerabilities:
1751 vulnerability.cve 1759 title = (
1752 if vulnerability.cve 1760 vulnerability.cve
1753 else vulnerability.vulnerabilityId 1761 if vulnerability.cve
1754 ) 1762 else vulnerability.vulnerabilityId
1755 titleItem = QTreeWidgetItem(topItem, [title]) 1763 )
1756 titleItem.setFirstColumnSpanned(True) 1764 titleItem = QTreeWidgetItem(topItem, [title])
1757 titleItem.setExpanded(True) 1765 titleItem.setFirstColumnSpanned(True)
1758 1766 titleItem.setExpanded(True)
1759 QTreeWidgetItem( 1767
1760 titleItem, [self.tr("Affected Version:"), vulnerability.spec] 1768 QTreeWidgetItem(
1761 ) 1769 titleItem, [self.tr("Affected Version:"), vulnerability.spec]
1762 itm = QTreeWidgetItem( 1770 )
1763 titleItem, [self.tr("Advisory:"), vulnerability.advisory] 1771 itm = QTreeWidgetItem(
1764 ) 1772 titleItem, [self.tr("Advisory:"), vulnerability.advisory]
1765 itm.setToolTip( 1773 )
1766 1, "<p>{0}</p>".format(vulnerability.advisory.replace("\r\n", "<br/>")) 1774 itm.setToolTip(
1767 ) 1775 1,
1768 1776 "<p>{0}</p>".format(
1769 self.infoWidget.scrollToTop() 1777 vulnerability.advisory.replace("\r\n", "<br/>")
1770 self.infoWidget.resizeColumnToContents(0) 1778 ),
1771 1779 )
1772 header = self.infoWidget.header() 1780
1773 header.setStretchLastSection(True) 1781 self.vulnerabilitiesInfoWidget.scrollToTop()
1782 self.vulnerabilitiesInfoWidget.resizeColumnToContents(0)
1783
1784 header = self.vulnerabilitiesInfoWidget.header()
1785 header.setStretchLastSection(True)
1786 else:
1787 self.vulnerabilitiesInfoWidget.clear()
1774 1788
1775 ####################################################################### 1789 #######################################################################
1776 ## Dependency tree related methods below 1790 ## Dependency tree related methods below
1777 ####################################################################### 1791 #######################################################################
1778 1792

eric ide

mercurial