diff -r 0a846d71f27c -r 54816b8f740f eric7/PipInterface/Pip.py --- a/eric7/PipInterface/Pip.py Sat Mar 05 18:10:28 2022 +0100 +++ b/eric7/PipInterface/Pip.py Sun Mar 06 19:53:19 2022 +0100 @@ -296,7 +296,7 @@ @param packages list of packages to upgrade @type list of str - @return flag indicating to abort the upgrade attempt + @return flag indicating a PyQt upgrade @rtype bool """ pyqtPackages = [ @@ -308,6 +308,21 @@ ] return bool(pyqtPackages) + def __checkUpgradeEric(self, packages): + """ + Private method to check, if an upgrade of the eric-ide package is + attempted. + + @param packages list of packages to upgrade + @type list of str + @return flag indicating an eric-ide upgrade + @rtype bool + """ + ericPackages = [ + p for p in packages if p.lower() == "eric-ide" + ] + return bool(ericPackages) + def upgradePackages(self, packages, venvName, userSite=False): """ Public method to upgrade the given list of packages. @@ -325,15 +340,20 @@ if not venvName: return False - if ( - self.getVirtualenvInterpreter(venvName) == sys.executable and - self.__checkUpgradePyQt(packages) - ): - try: - self.__ui.upgradePyQt() - return None # should not be reached; play it safe - except AttributeError: - return False + if self.getVirtualenvInterpreter(venvName) == sys.executable: + upgradePyQt = self.__checkUpgradePyQt(packages) + upgradeEric = self.__checkUpgradeEric(packages) + if upgradeEric or upgradePyQt: + try: + if upgradeEric and upgradePyQt: + self.__ui.upgradeEricPyQt() + elif upgradeEric: + self.__ui.upgradeEric() + elif upgradePyQt: + self.__ui.upgradePyQt() + return None # should not be reached; play it safe + except AttributeError: + return False interpreter = self.getVirtualenvInterpreter(venvName) if not interpreter: @@ -663,6 +683,31 @@ return packages + def checkPackageOutdated(self, packageStart, envName): + """ + Public method to check, if a group of packages is outdated. + + @param packageStart start string for package names to be checked + (case insensitive) + @type str + @param envName name of the environment to get the packages for + @type str + @return tuple containing a flag indicating outdated packages and the + list of tuples containing the package name, installed version + and available version + @rtype tuple of (bool, (str, str, str)) + """ + filteredPackages = [] + + if bool(envName) and bool(packageStart): + packages = self.getOutdatedPackages(envName) + filterStr = packageStart.lower() + filteredPackages = [ + p for p in packages + if p[0].lower().startswith(filterStr)] + + return bool(filteredPackages), filteredPackages + def getPackageDetails(self, name, version): """ Public method to get package details using the PyPI JSON interface.