src/eric7/PipInterface/PipPackagesWidget.py

branch
eric7-maintenance
changeset 10101
34f74c19ed7a
parent 10079
0222a480e93d
parent 10093
245505200513
child 10148
31ba20629af4
--- a/src/eric7/PipInterface/PipPackagesWidget.py	Sun May 28 14:40:38 2023 +0200
+++ b/src/eric7/PipInterface/PipPackagesWidget.py	Sun Jul 02 17:39:33 2023 +0200
@@ -12,7 +12,7 @@
 import os
 import textwrap
 
-from packaging.specifiers import SpecifierSet
+from packaging.specifiers import InvalidSpecifier, SpecifierSet
 from PyQt6.QtCore import Qt, QUrl, QUrlQuery, pyqtSlot
 from PyQt6.QtGui import QIcon
 from PyQt6.QtNetwork import QNetworkReply, QNetworkRequest
@@ -177,8 +177,8 @@
 
         @param pip reference to the global pip interface
         @type Pip
-        @param parent reference to the parent widget
-        @type QWidget
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
         """
         super().__init__(parent)
         self.setupUi(self)
@@ -246,9 +246,10 @@
         venvManager.virtualEnvironmentRemoved.connect(self.on_refreshButton_clicked)
         self.__selectedEnvironment = None
 
-        project = ericApp().getObject("Project")
-        project.projectOpened.connect(self.__projectOpened)
-        project.projectClosed.connect(self.__projectClosed)
+        with contextlib.suppress(KeyError):
+            project = ericApp().getObject("Project")
+            project.projectOpened.connect(self.__projectOpened)
+            project.projectClosed.connect(self.__projectClosed)
 
         self.__initPipMenu()
         self.__populateEnvironments()
@@ -1554,7 +1555,28 @@
         """
         Private slot to open the configuration page.
         """
-        ericApp().getObject("UserInterface").showPreferences("pipPage")
+        try:
+            ericApp().getObject("UserInterface").showPreferences("pipPage")
+        except KeyError:
+            # we were called from outside the eric IDE
+            from eric7.Preferences.ConfigurationDialog import (  # noqa: I101
+                ConfigurationDialog,
+                ConfigurationMode,
+            )
+
+            dlg = ConfigurationDialog(
+                None,
+                "Configuration",
+                True,
+                fromEric=False,
+                displayMode=ConfigurationMode.PIPMANAGERMODE,
+            )
+            dlg.show()
+            dlg.showConfigurationPageByName("pipPage")
+            dlg.exec()
+            if dlg.result() == QDialog.DialogCode.Accepted:
+                dlg.setPreferences()
+                Preferences.syncPreferences()
 
     @pyqtSlot()
     def __showCacheInfo(self):
@@ -1848,11 +1870,17 @@
                 if dependency["required_version"][0] in "0123456789"
                 else dependency["required_version"]
             )
-            specifierSet = SpecifierSet(specifiers=spec)
-            if not specifierSet.contains(dependency["installed_version"]):
-                itm.setIcon(
+            try:
+                specifierSet = SpecifierSet(specifiers=spec)
+                if not specifierSet.contains(dependency["installed_version"]):
+                    itm.setIcon(
+                        PipPackagesWidget.DepRequiredVersionColumn,
+                        EricPixmapCache.getIcon("warning"),
+                    )
+            except InvalidSpecifier:
+                itm.setText(
                     PipPackagesWidget.DepRequiredVersionColumn,
-                    EricPixmapCache.getIcon("warning"),
+                    dependency["required_version"],
                 )
 
         elif dependency["required_version"].lower() == "any":

eric ide

mercurial