--- a/PipxInterface/PipxWidget.py Sat Sep 07 19:29:57 2024 +0200 +++ b/PipxInterface/PipxWidget.py Sun Sep 15 11:57:39 2024 +0200 @@ -29,7 +29,7 @@ class PipxWidget(QWidget, Ui_PipxWidget): """ - Class documentation goes here. + Class implementing the pipx management widget. """ PackageColumn = 0 @@ -58,6 +58,7 @@ self.__plugin = plugin self.__pipx = Pipx(self) + self.__pipx.outdatedPackage.connect(self.__handleOutdatedPackage) if fromEric: self.layout().setContentsMargins(0, 3, 0, 0) @@ -380,40 +381,45 @@ @param itm reference to the package item @type QTreeWidgetItem - @return flag indicating the outdated status - @rtype bool """ package = itm.text(PipxWidget.PackageColumn) - latestVersion, outdatedDependencies = self.__pipx.checkPackageOutdated(package) - if latestVersion is not None: + self.__pipx.checkPackageOutdated(package) + + @pyqtSlot(str, str, bool) + def __handleOutdatedPackage(self, package, latestVersion, outdatedDependencies): + """ + Private slot to handle the pipx client reporting an outdated package or a + package with outdated dependencies. + + @param package name of the package + @type str + @param latestVersion latest available version in case outdated + @type str + @param outdatedDependencies flag indicating outdated dependencies + @type bool + """ + itm = self.__getItemForPackage(package=package) + if latestVersion: self.__markPackageOutdated(itm, latestVersion, outdatedDependencies) - isOutdated = True elif ( self.__plugin.getPreferences("IncludeOutdatedDependencies") and outdatedDependencies ): self.__markPackageDependenciesOutdated(itm) - isOutdated = True else: self.__markPackageClean(itm) - isOutdated = False - return isOutdated + + self.__resizePackagesColumns() + self.__plugin.setOutdatedIndicator(self.__hasOutdatedItems()) @pyqtSlot() def __checkOutdatedPackages(self): """ Private slot to check, if there are any outdated packages. """ - outdatedItems = [] - - with EricOverrideCursor(): - for row in range(self.packagesList.topLevelItemCount()): - itm = self.packagesList.topLevelItem(row) - if self.__checkPackageOutdated(itm): - outdatedItems.append(itm) - - self.__resizePackagesColumns() - self.__plugin.setOutdatedIndicator(bool(outdatedItems)) + for row in range(self.packagesList.topLevelItemCount()): + itm = self.packagesList.topLevelItem(row) + self.__checkPackageOutdated(itm) @pyqtSlot() def __upgradePackage(self): @@ -435,6 +441,7 @@ else: package = packageItem.text(PipxWidget.PackageColumn) self.__pipx.upgradePackage(package) + self.__checkPackageVersion(packageItem) self.__checkPackageOutdated(packageItem) self.__resizePackagesColumns() @@ -528,8 +535,9 @@ """ Private slot to show a dialog with the dependencies of the selected package. """ - package = self.__selectedPackages()[0] - dependencies = self.__pipx.getAllPackageDependencies(package=package) + with EricOverrideCursor(): + package = self.__selectedPackages()[0] + dependencies = self.__pipx.getAllPackageDependencies(package=package) dlg = PipxDependenciesDialog( package=package, @@ -544,8 +552,9 @@ Private slot to show a dialog with the outdated dependencies of the selected package. """ - package = self.__selectedPackages()[0] - dependencies = self.__pipx.getOutdatedPackageDependencies(package=package) + with EricOverrideCursor(): + package = self.__selectedPackages()[0] + dependencies = self.__pipx.getOutdatedPackageDependencies(package=package) dlg = PipxDependenciesDialog( package=package, @@ -560,8 +569,9 @@ Private slot to show a dialog with the up-to-date dependencies of the selected package. """ - package = self.__selectedPackages()[0] - dependencies = self.__pipx.getUptodatePackageDependencies(package=package) + with EricOverrideCursor(): + package = self.__selectedPackages()[0] + dependencies = self.__pipx.getUptodatePackageDependencies(package=package) dlg = PipxDependenciesDialog( package=package, @@ -665,6 +675,18 @@ item.setIcon(PipxWidget.VersionColumn, QIcon()) item.setToolTip(PipxWidget.VersionColumn, self.tr("everything up-to-date")) + def __checkPackageVersion(self, itm): + """ + Private method to check the version of a package. + + @param itm reference to the package item + @type QTreeWidgetItem + """ + package = itm.text(PipxWidget.PackageColumn) + version = self.__pipx.getPackageVersion(package) + itm.setText(PipxWidget.VersionColumn, version) + itm.setData(0, PipxWidget.VersionRole, version) + def __populatePackages(self): """ Private method to populate the packages list. @@ -709,12 +731,13 @@ if itm.isExpanded(): expandedPackages.append(itm.text(PipxWidget.PackageColumn)) latestVersion = itm.data(0, PipxWidget.LatestVersionRole) - outdatedDependencies = itm.data(0, PipxWidget.OutdatedDependenciesRole) - if latestVersion or outdatedDependencies: - outdatedPackages[itm.text(PipxWidget.PackageColumn)] = ( - latestVersion, - outdatedDependencies, - ) + if not self.__plugin.getPreferences("AutoCheckOutdated"): + outdatedDependencies = itm.data(0, PipxWidget.OutdatedDependenciesRole) + if latestVersion or outdatedDependencies: + outdatedPackages[itm.text(PipxWidget.PackageColumn)] = ( + latestVersion, + outdatedDependencies, + ) self.__populatePackages()