src/eric7/PipInterface/Pip.py

branch
eric7
changeset 10919
4e4c8ee38c45
parent 10799
7f5228900da5
child 10928
46651e194fbe
--- a/src/eric7/PipInterface/Pip.py	Fri Sep 06 14:56:18 2024 +0200
+++ b/src/eric7/PipInterface/Pip.py	Sun Sep 15 16:56:58 2024 +0200
@@ -26,6 +26,7 @@
 from PyQt6.QtWidgets import QDialog, QInputDialog, QLineEdit
 
 from eric7 import Preferences
+from eric7.EricCore.EricProcess import EricProcess
 from eric7.EricNetwork.EricNetworkProxyFactory import (
     EricNetworkProxyFactory,
     proxyAuthenticationRequired,
@@ -86,6 +87,8 @@
             )
         self.__replies = []
 
+        self.__outdatedProc = None
+
         self.__vulnerabilityChecker = PipVulnerabilityChecker(self, self)
 
     def getNetworkAccessManager(self):
@@ -106,6 +109,14 @@
         """
         return self.__vulnerabilityChecker
 
+    def shutdown(self):
+        """
+        Public method to perform shutdown actions.
+        """
+        if self.__outdatedProc is not None:
+            self.__outdatedProc.kill()  # end the process forcefully
+            self.__outdatedProc = None
+
     ##########################################################################
     ## Methods below implement some utility functions
     ##########################################################################
@@ -925,8 +936,12 @@
                     indexUrl = Preferences.getPip("PipSearchIndex") + "/simple"
                     args += ["--index-url", indexUrl]
 
-                proc = QProcess()
                 if callback:
+                    if self.__outdatedProc is not None:
+                        self.__outdatedProc.kill()  # end the process forcefully
+                        self.__outdatedProc = None
+
+                    proc = EricProcess(timeout=30000)
                     self.__outdatedProc = proc
                     proc.finished.connect(
                         functools.partial(self.__outdatedFinished, callback, proc)
@@ -934,6 +949,7 @@
                     proc.start(interpreter, args)
                     return None
 
+                proc = QProcess()
                 proc.start(interpreter, args)
                 if proc.waitForStarted(15000) and proc.waitForFinished(30000):
                     packages = self.__extractOutdatedPackages(proc)
@@ -989,7 +1005,11 @@
         """
         packages = (
             self.__extractOutdatedPackages(proc)
-            if exitStatus == QProcess.ExitStatus.NormalExit and exitCode == 0
+            if (
+                not proc.timedOut()
+                and exitStatus == QProcess.ExitStatus.NormalExit
+                and exitCode == 0
+            )
             else {}
         )
         callback(packages)

eric ide

mercurial