src/eric7/Debugger/DebuggerInterfacePython.py

branch
eric7-maintenance
changeset 11019
27cd57e98461
parent 10941
07cad049002c
parent 11009
5206e4c572e8
child 11063
bb05d1db9286
--- a/src/eric7/Debugger/DebuggerInterfacePython.py	Thu Oct 03 17:06:51 2024 +0200
+++ b/src/eric7/Debugger/DebuggerInterfacePython.py	Thu Oct 31 10:54:33 2024 +0100
@@ -11,6 +11,7 @@
 import json
 import logging
 import os
+import re
 import shlex
 import struct
 import time
@@ -127,11 +128,29 @@
         @rtype str
         """
         if remote2local:
-            path = fn.replace(self.translateRemote, self.translateLocal)
+            path = (
+                re.sub(
+                    f"^{re.escape(self.translateRemote)}",
+                    self.translateLocal,
+                    fn,
+                    flags=re.IGNORECASE,
+                )
+                if self.translateRemoteWindows
+                else fn.replace(self.translateRemote, self.translateLocal)
+            )
             if self.translateLocalWindows:
                 path = path.replace("/", "\\")
         else:
-            path = fn.replace(self.translateLocal, self.translateRemote)
+            path = (
+                re.sub(
+                    f"^{re.escape(self.translateLocal)}",
+                    self.translateRemote,
+                    fn,
+                    flags=re.IGNORECASE,
+                )
+                if self.translateLocalWindows
+                else fn.replace(self.translateLocal, self.translateRemote)
+            )
             if not self.translateRemoteWindows:
                 path = path.replace("\\", "/")
 
@@ -192,7 +211,7 @@
         originalPathString,
         workingDir="",
         configOverride=None,
-        startRemote=None,
+        startViaServer=None,
     ):
         """
         Public method to start a remote Python interpreter.
@@ -211,7 +230,7 @@
         @param configOverride dictionary containing the global config override data
             (defaults to None)
         @type dict (optional)
-        @param startRemote flag indicating to start the client via an eric-ide server
+        @param startViaServer flag indicating to start the client via an eric-ide server
             (defaults to None)
         @type bool (optional)
         @return client process object, a flag to indicate a network connection
@@ -221,17 +240,16 @@
         global origPathEnv
 
         if (
-            startRemote is True
+            startViaServer is True
             or (
-                startRemote is None
+                startViaServer is None
                 and (
                     venvName == self.debugServer.getEricServerEnvironmentString()
                     or self.__ericServerDebugging
                 )
             )
         ) and ericApp().getObject("EricServer").isServerConnected():
-            # TODO change this once server environment definitions are supported
-            startRemote = True
+            startViaServer = True
             if venvName:
                 venvManager = ericApp().getObject("VirtualEnvManager")
                 interpreter = venvManager.getVirtualenvInterpreter(venvName)
@@ -282,7 +300,7 @@
             else ""
         )
 
-        if Preferences.getDebugger("RemoteDbgEnabled"):
+        if Preferences.getDebugger("RemoteDbgEnabled") and not startViaServer:
             # remote debugging code
             ipaddr = self.debugServer.getHostAddress(False)
             rexec = Preferences.getDebugger("RemoteExecution")
@@ -351,7 +369,7 @@
                 )
                 return None, False, ""
 
-        elif startRemote and self.__ericServerDebuggerInterface is not None:
+        elif startViaServer and self.__ericServerDebuggerInterface is not None:
             # debugging via an eric-ide server
             self.translate = self.__ericServerTranslation
             self.__ericServerDebugging = True
@@ -481,7 +499,7 @@
         originalPathString,
         workingDir=None,
         configOverride=None,
-        startRemote=False,
+        startViaServer=None,
     ):
         """
         Public method to start a remote Python interpreter for a project.
@@ -500,8 +518,8 @@
         @param configOverride dictionary containing the global config override
             data
         @type dict
-        @param startRemote flag indicating to start the client via an eric-ide server
-            (defaults to False)
+        @param startViaServer flag indicating to start the client via an eric-ide server
+            (defaults to None)
         @type bool (optional)
         @return client process object, a flag to indicate a network connection
             and the name of the interpreter in case of a local execution
@@ -530,17 +548,16 @@
         )
 
         if (
-            startRemote is True
+            startViaServer is True
             or (
-                startRemote is None
+                startViaServer is None
                 and (
                     venvName == self.debugServer.getEricServerEnvironmentString()
                     or self.__ericServerDebugging
                 )
             )
         ) and ericApp().getObject("EricServer").isServerConnected():
-            # TODO change this once server environment definitions are supported
-            startRemote = True
+            startViaServer = True
             if venvName and venvName != self.debugServer.getProjectEnvironmentString():
                 venvManager = ericApp().getObject("VirtualEnvManager")
                 interpreter = venvManager.getVirtualenvInterpreter(venvName)
@@ -571,7 +588,7 @@
 
         self.__ericServerDebugging = False
 
-        if project.getDebugProperty("REMOTEDEBUGGER"):
+        if project.getDebugProperty("REMOTEDEBUGGER") and not startViaServer:
             # remote debugging code
             ipaddr = self.debugServer.getHostAddress(False)
             rexec = project.getDebugProperty("REMOTECOMMAND")
@@ -623,12 +640,15 @@
                     self.translate = self.__remoteTranslation
                 else:
                     self.translate = self.__identityTranslation
+
+                self.__startedVenv = "" if process is None else venvName
+
                 return process, self.__isNetworked, ""
             else:
                 # remote shell command is missing
                 return None, self.__isNetworked, ""
 
-        elif startRemote and self.__ericServerDebuggerInterface is not None:
+        elif startViaServer and self.__ericServerDebuggerInterface is not None:
             # debugging via an eric-ide server
             self.translate = self.__ericServerTranslation
             self.__ericServerDebugging = True
@@ -863,9 +883,10 @@
                         self.__mainDebugger, jsonStr
                     )
             else:
-                conn = self.__connections[self.__mainDebugger]
-                for jsonStr in self.__commandQueue:
-                    self.__writeJsonCommandToSocket(jsonStr, conn)
+                with contextlib.suppress(KeyError):
+                    conn = self.__connections[self.__mainDebugger]
+                    for jsonStr in self.__commandQueue:
+                        self.__writeJsonCommandToSocket(jsonStr, conn)
 
         self.__commandQueue.clear()
 

eric ide

mercurial