src/eric7/PipInterface/PipPackageDetailsDialog.py

branch
eric7
changeset 9659
3152923264c2
parent 9653
e67609152c5e
child 9676
9edcc7302ac4
equal deleted inserted replaced
9658:1da417a9645d 9659:3152923264c2
15 QHeaderView, 15 QHeaderView,
16 QLabel, 16 QLabel,
17 QTreeWidgetItem, 17 QTreeWidgetItem,
18 ) 18 )
19 19
20 from eric7 import Utilities
21
20 from .Ui_PipPackageDetailsDialog import Ui_PipPackageDetailsDialog 22 from .Ui_PipPackageDetailsDialog import Ui_PipPackageDetailsDialog
21 23
22 24
23 class PipPackageDetailsDialog(QDialog, Ui_PipPackageDetailsDialog): 25 class PipPackageDetailsDialog(QDialog, Ui_PipPackageDetailsDialog):
24 """ 26 """
27 29
28 ButtonInstall = 1 30 ButtonInstall = 1
29 ButtonRemove = 2 31 ButtonRemove = 2
30 ButtonUpgrade = 4 32 ButtonUpgrade = 4
31 33
32 def __init__(self, detailsData, buttonsMode=0, parent=None): 34 def __init__(self, detailsData, vulnerabilities=None, buttonsMode=0, parent=None):
33 """ 35 """
34 Constructor 36 Constructor
35 37
36 @param detailsData package details 38 @param detailsData package details
37 @type dict 39 @type dict
40 @param vulnerabilities list of known vulnerabilities (defaults to None)
41 @type list (optional)
38 @param buttonsMode flags telling which convenience buttons to enable 42 @param buttonsMode flags telling which convenience buttons to enable
39 (defaults to 0) 43 (defaults to 0)
40 @type int (optional) 44 @type int (optional)
41 @param parent reference to the parent widget (defaults to None) 45 @param parent reference to the parent widget (defaults to None)
42 @type QWidget (optional) 46 @type QWidget (optional)
71 self.__packageName = detailsData["info"]["name"] 75 self.__packageName = detailsData["info"]["name"]
72 76
73 self.__populateDetails(detailsData["info"]) 77 self.__populateDetails(detailsData["info"])
74 self.__populateDownloadUrls(detailsData["urls"]) 78 self.__populateDownloadUrls(detailsData["urls"])
75 self.__populateRequiresProvides(detailsData["info"]) 79 self.__populateRequiresProvides(detailsData["info"])
80 self.__populateVulnerabilities(vulnerabilities)
76 81
77 self.__installButton.setEnabled(buttonsMode & self.ButtonInstall) 82 self.__installButton.setEnabled(buttonsMode & self.ButtonInstall)
78 self.__removeButton.setEnabled(buttonsMode & self.ButtonRemove) 83 self.__removeButton.setEnabled(buttonsMode & self.ButtonRemove)
79 self.__upgradeButton.setEnabled(buttonsMode & self.ButtonUpgrade) 84 self.__upgradeButton.setEnabled(buttonsMode & self.ButtonUpgrade)
85
86 if vulnerabilities:
87 self.infoWidget.setCurrentWidget(self.security)
88 else:
89 self.infoWidget.setCurrentWidget(self.details)
80 90
81 def __populateDetails(self, detailsData): 91 def __populateDetails(self, detailsData):
82 """ 92 """
83 Private method to populate the details tab. 93 Private method to populate the details tab.
84 94
135 @param downloadsData downloads information 145 @param downloadsData downloads information
136 @type dict 146 @type dict
137 """ 147 """
138 index = self.infoWidget.indexOf(self.urls) 148 index = self.infoWidget.indexOf(self.urls)
139 if downloadsData: 149 if downloadsData:
140 self.infoWidget.setTabEnabled(index, True) 150 self.infoWidget.setTabVisible(index, True)
141 for download in downloadsData: 151 for download in downloadsData:
142 itm = QTreeWidgetItem( 152 itm = QTreeWidgetItem(
143 self.downloadUrlsList, 153 self.downloadUrlsList,
144 [ 154 [
145 "", 155 "",
172 urlLabel.setOpenExternalLinks(True) 182 urlLabel.setOpenExternalLinks(True)
173 self.downloadUrlsList.setItemWidget(itm, 0, urlLabel) 183 self.downloadUrlsList.setItemWidget(itm, 0, urlLabel)
174 header = self.downloadUrlsList.header() 184 header = self.downloadUrlsList.header()
175 header.resizeSections(QHeaderView.ResizeMode.ResizeToContents) 185 header.resizeSections(QHeaderView.ResizeMode.ResizeToContents)
176 else: 186 else:
177 self.infoWidget.setTabEnabled(index, False) 187 self.infoWidget.setTabVisible(index, False)
178 188
179 def __populateRequiresProvides(self, detailsData): 189 def __populateRequiresProvides(self, detailsData):
180 """ 190 """
181 Private method to populate the requires/provides tab. 191 Private method to populate the requires/provides tab.
182 192
197 if "provides_dist" in detailsData and detailsData["provides_dist"]: 207 if "provides_dist" in detailsData and detailsData["provides_dist"]:
198 self.providedDistributionsList.addItems(detailsData["provides_dist"]) 208 self.providedDistributionsList.addItems(detailsData["provides_dist"])
199 populatedItems += len(detailsData["provides_dist"]) 209 populatedItems += len(detailsData["provides_dist"])
200 210
201 index = self.infoWidget.indexOf(self.requires) 211 index = self.infoWidget.indexOf(self.requires)
202 self.infoWidget.setTabEnabled(index, populatedItems > 0) 212 self.infoWidget.setTabVisible(index, populatedItems > 0)
213
214 def __populateVulnerabilities(self, vulnerabilities):
215 """
216 Private method to populate the Security tab.
217
218 @param vulnerabilities list of known vulnerabilities
219 @type list
220 """
221 index = self.infoWidget.indexOf(self.security)
222 if vulnerabilities:
223 self.infoWidget.setTabVisible(index, True)
224 for vulnerability in vulnerabilities:
225 title = (
226 vulnerability.cve
227 if vulnerability.cve
228 else vulnerability.vulnerabilityId
229 )
230 self.vulnerabilitiesEdit.insertHtml(
231 self.tr(
232 "<h3>{0}</h3>"
233 "<table>"
234 "<tr><td>Installed Version:</td><td>{1}</td></tr>"
235 "<tr><td>Affected Version:</td><td>{2}</td></tr>"
236 "<tr><td>Advisory:</td><td>{3}</td></tr>"
237 "</table>"
238 ).format(
239 Utilities.html_encode(title),
240 Utilities.html_encode(vulnerability.version),
241 Utilities.html_encode(vulnerability.spec),
242 "<p>{0}</p>".format(
243 Utilities.html_encode(vulnerability.advisory).replace(
244 "\r\n", "<br/>"
245 )
246 )
247 ),
248 )
249 else:
250 self.infoWidget.setTabVisible(index, False)
203 251
204 def __sanitize(self, text, forUrl=False): 252 def __sanitize(self, text, forUrl=False):
205 """ 253 """
206 Private method to clean-up the given text. 254 Private method to clean-up the given text.
207 255

eric ide

mercurial