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 |