eric6/CondaInterface/CondaPackagesWidget.py

changeset 7771
787a6b3f8c9f
parent 7759
51aa6c6b66f7
child 7780
41420f82c0ac
equal deleted inserted replaced
7770:49f3377aebf1 7771:787a6b3f8c9f
9 9
10 10
11 import os 11 import os
12 12
13 from PyQt5.QtCore import pyqtSlot, Qt 13 from PyQt5.QtCore import pyqtSlot, Qt
14 from PyQt5.QtGui import QCursor
15 from PyQt5.QtWidgets import ( 14 from PyQt5.QtWidgets import (
16 QWidget, QToolButton, QMenu, QTreeWidgetItem, QApplication, QLineEdit, 15 QWidget, QToolButton, QMenu, QTreeWidgetItem, QApplication, QLineEdit,
17 QDialog 16 QDialog
18 ) 17 )
19 18
20 from E5Gui import E5FileDialog, E5MessageBox, E5TextInputDialog 19 from E5Gui import E5FileDialog, E5MessageBox, E5TextInputDialog
21 from E5Gui.E5Application import e5App 20 from E5Gui.E5Application import e5App
21 from E5Gui.E5OverrideCursor import E5OverrideCursor
22 22
23 from .Ui_CondaPackagesWidget import Ui_CondaPackagesWidget 23 from .Ui_CondaPackagesWidget import Ui_CondaPackagesWidget
24 24
25 import UI.PixmapCache 25 import UI.PixmapCache
26 26
216 @type int 216 @type int
217 """ 217 """
218 self.packagesList.clear() 218 self.packagesList.clear()
219 prefix = self.environmentsComboBox.itemData(index) 219 prefix = self.environmentsComboBox.itemData(index)
220 if prefix: 220 if prefix:
221 QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
222 self.statusLabel.show() 221 self.statusLabel.show()
223 self.statusLabel.setText(self.tr("Getting installed packages...")) 222 self.statusLabel.setText(self.tr("Getting installed packages..."))
224 QApplication.processEvents()
225 223
226 # 1. populate with installed packages 224 with E5OverrideCursor():
227 self.packagesList.setUpdatesEnabled(False) 225 # 1. populate with installed packages
228 installedPackages = self.__conda.getInstalledPackages( 226 self.packagesList.setUpdatesEnabled(False)
229 prefix=prefix) 227 installedPackages = self.__conda.getInstalledPackages(
230 for package, version, build in installedPackages: 228 prefix=prefix)
231 itm = QTreeWidgetItem(self.packagesList, [package, version]) 229 for package, version, build in installedPackages:
232 itm.setData(1, self.PackageVersionRole, version) 230 itm = QTreeWidgetItem(self.packagesList,
233 itm.setData(1, self.PackageBuildRole, build) 231 [package, version])
234 self.packagesList.setUpdatesEnabled(True) 232 itm.setData(1, self.PackageVersionRole, version)
235 self.statusLabel.setText(self.tr("Getting outdated packages...")) 233 itm.setData(1, self.PackageBuildRole, build)
236 QApplication.processEvents() 234 self.packagesList.setUpdatesEnabled(True)
237 235 self.statusLabel.setText(
238 # 2. update with update information 236 self.tr("Getting outdated packages..."))
239 self.packagesList.setUpdatesEnabled(False) 237 QApplication.processEvents()
240 updateablePackages = self.__conda.getUpdateablePackages( 238
241 prefix=prefix) 239 # 2. update with update information
242 for package, version, build in updateablePackages: 240 self.packagesList.setUpdatesEnabled(False)
243 items = self.packagesList.findItems( 241 updateablePackages = self.__conda.getUpdateablePackages(
244 package, Qt.MatchExactly | Qt.MatchCaseSensitive) 242 prefix=prefix)
245 if items: 243 for package, version, build in updateablePackages:
246 itm = items[0] 244 items = self.packagesList.findItems(
247 itm.setText(2, version) 245 package, Qt.MatchExactly | Qt.MatchCaseSensitive)
248 itm.setData(2, self.PackageVersionRole, version) 246 if items:
249 itm.setData(2, self.PackageBuildRole, build) 247 itm = items[0]
250 if itm.data(1, self.PackageVersionRole) == version: 248 itm.setText(2, version)
251 # build must be different, show in version display 249 itm.setData(2, self.PackageVersionRole, version)
252 itm.setText(1, self.tr("{0} (Build: {1})").format( 250 itm.setData(2, self.PackageBuildRole, build)
253 itm.data(1, self.PackageVersionRole), 251 if itm.data(1, self.PackageVersionRole) == version:
254 itm.data(1, self.PackageBuildRole), 252 # build must be different, show in version display
255 )) 253 itm.setText(1, self.tr("{0} (Build: {1})").format(
256 itm.setText(2, self.tr("{0} (Build: {1})").format( 254 itm.data(1, self.PackageVersionRole),
257 itm.data(2, self.PackageVersionRole), 255 itm.data(1, self.PackageBuildRole),
258 itm.data(2, self.PackageBuildRole), 256 ))
259 )) 257 itm.setText(2, self.tr("{0} (Build: {1})").format(
260 258 itm.data(2, self.PackageVersionRole),
261 self.packagesList.sortItems(0, Qt.AscendingOrder) 259 itm.data(2, self.PackageBuildRole),
262 for col in range(self.packagesList.columnCount()): 260 ))
263 self.packagesList.resizeColumnToContents(col) 261
264 self.packagesList.setUpdatesEnabled(True) 262 self.packagesList.sortItems(0, Qt.AscendingOrder)
265 QApplication.restoreOverrideCursor() 263 for col in range(self.packagesList.columnCount()):
264 self.packagesList.resizeColumnToContents(col)
265 self.packagesList.setUpdatesEnabled(True)
266 self.statusLabel.hide() 266 self.statusLabel.hide()
267 267
268 self.__updateActionButtons() 268 self.__updateActionButtons()
269 self.__updateSearchActionButtons() 269 self.__updateSearchActionButtons()
270 270
282 """ 282 """
283 currentEnvironment = self.environmentsComboBox.currentText() 283 currentEnvironment = self.environmentsComboBox.currentText()
284 self.environmentsComboBox.clear() 284 self.environmentsComboBox.clear()
285 self.packagesList.clear() 285 self.packagesList.clear()
286 286
287 QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) 287 with E5OverrideCursor():
288 QApplication.processEvents() 288 self.__populateEnvironments()
289 289
290 self.__populateEnvironments() 290 index = self.environmentsComboBox.findText(
291 291 currentEnvironment, Qt.MatchExactly | Qt.MatchCaseSensitive)
292 index = self.environmentsComboBox.findText( 292 if index != -1:
293 currentEnvironment, Qt.MatchExactly | Qt.MatchCaseSensitive) 293 self.environmentsComboBox.setCurrentIndex(index)
294 if index != -1: 294
295 self.environmentsComboBox.setCurrentIndex(index)
296
297 QApplication.restoreOverrideCursor()
298 self.__updateActionButtons() 295 self.__updateActionButtons()
299 296
300 @pyqtSlot() 297 @pyqtSlot()
301 def on_upgradeButton_clicked(self): 298 def on_upgradeButton_clicked(self):
302 """ 299 """
353 Private method to search for packages. 350 Private method to search for packages.
354 """ 351 """
355 self.searchResultList.clear() 352 self.searchResultList.clear()
356 pattern = self.searchEdit.text() 353 pattern = self.searchEdit.text()
357 if pattern: 354 if pattern:
358 QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) 355 with E5OverrideCursor():
359 QApplication.processEvents() 356 if CondaInterface.condaVersion() >= (4, 4, 0):
360 357 prefix = ""
361 if CondaInterface.condaVersion() >= (4, 4, 0): 358 else:
362 prefix = "" 359 prefix = self.environmentsComboBox.itemData(
363 else: 360 self.environmentsComboBox.currentIndex())
364 prefix = self.environmentsComboBox.itemData( 361 ok, result = self.__conda.searchPackages(
365 self.environmentsComboBox.currentIndex()) 362 pattern,
366 ok, result = self.__conda.searchPackages( 363 fullNameOnly=self.fullNameButton.isChecked(),
367 pattern, 364 packageSpec=self.packageSpecButton.isChecked(),
368 fullNameOnly=self.fullNameButton.isChecked(), 365 platform=self.platformComboBox.currentText(),
369 packageSpec=self.packageSpecButton.isChecked(), 366 prefix=prefix,
370 platform=self.platformComboBox.currentText(), 367 )
371 prefix=prefix, 368
372 )
373
374 if result:
375 if ok: 369 if ok:
376 self.searchResultList.setUpdatesEnabled(False) 370 if result:
377 for package in result: 371 self.searchResultList.setUpdatesEnabled(False)
378 itm = QTreeWidgetItem(self.searchResultList, [package]) 372 for package in result:
379 itm.setExpanded(False) 373 itm = QTreeWidgetItem(self.searchResultList,
380 for detail in result[package]: 374 [package])
381 version = detail["version"] 375 itm.setExpanded(False)
382 build = detail["build"] 376 for detail in result[package]:
383 if "subdir" in detail: 377 version = detail["version"]
384 platform = detail["subdir"] 378 build = detail["build"]
385 elif "platform" in detail: 379 if "subdir" in detail:
386 platform = detail["platform"] 380 platform = detail["subdir"]
387 else: 381 elif "platform" in detail:
388 platform = "" 382 platform = detail["platform"]
389 citm = QTreeWidgetItem( 383 else:
390 itm, ["", version, build, platform]) 384 platform = ""
391 citm.setData(0, self.PackageDetailedDataRole, 385 citm = QTreeWidgetItem(
392 detail) 386 itm, ["", version, build, platform])
393 387 citm.setData(0, self.PackageDetailedDataRole,
394 self.searchResultList.sortItems(0, Qt.AscendingOrder) 388 detail)
395 self.searchResultList.resizeColumnToContents(0) 389
396 self.searchResultList.setUpdatesEnabled(True) 390 self.searchResultList.sortItems(0, Qt.AscendingOrder)
397 else: 391 self.searchResultList.resizeColumnToContents(0)
398 QApplication.restoreOverrideCursor() 392 self.searchResultList.setUpdatesEnabled(True)
399 try: 393 if not ok:
400 message = result["message"] 394 try:
401 except KeyError: 395 message = result["message"]
402 message = result["error"] 396 except KeyError:
403 E5MessageBox.warning( 397 message = result["error"]
404 self, 398 E5MessageBox.warning(
405 self.tr("Conda Search Package Error"), 399 self,
406 message) 400 self.tr("Conda Search Package Error"),
407 QApplication.restoreOverrideCursor() 401 message)
408 402
409 def __showDetails(self, item): 403 def __showDetails(self, item):
410 """ 404 """
411 Private method to show a dialog with details about a package item. 405 Private method to show a dialog with details about a package item.
412 406

eric ide

mercurial