--- 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()