125 @type bool (optional) |
126 @type bool (optional) |
126 @return translated filename |
127 @return translated filename |
127 @rtype str |
128 @rtype str |
128 """ |
129 """ |
129 if remote2local: |
130 if remote2local: |
130 path = fn.replace(self.translateRemote, self.translateLocal) |
131 path = ( |
|
132 re.sub( |
|
133 f"^{re.escape(self.translateRemote)}", |
|
134 self.translateLocal, |
|
135 fn, |
|
136 flags=re.IGNORECASE, |
|
137 ) |
|
138 if self.translateRemoteWindows |
|
139 else fn.replace(self.translateRemote, self.translateLocal) |
|
140 ) |
131 if self.translateLocalWindows: |
141 if self.translateLocalWindows: |
132 path = path.replace("/", "\\") |
142 path = path.replace("/", "\\") |
133 else: |
143 else: |
134 path = fn.replace(self.translateLocal, self.translateRemote) |
144 path = ( |
|
145 re.sub( |
|
146 f"^{re.escape(self.translateLocal)}", |
|
147 self.translateRemote, |
|
148 fn, |
|
149 flags=re.IGNORECASE, |
|
150 ) |
|
151 if self.translateLocalWindows |
|
152 else fn.replace(self.translateLocal, self.translateRemote) |
|
153 ) |
135 if not self.translateRemoteWindows: |
154 if not self.translateRemoteWindows: |
136 path = path.replace("\\", "/") |
155 path = path.replace("\\", "/") |
137 |
156 |
138 return path |
157 return path |
139 |
158 |
209 @param workingDir directory to start the debugger client in (defaults to "") |
228 @param workingDir directory to start the debugger client in (defaults to "") |
210 @type str (optional) |
229 @type str (optional) |
211 @param configOverride dictionary containing the global config override data |
230 @param configOverride dictionary containing the global config override data |
212 (defaults to None) |
231 (defaults to None) |
213 @type dict (optional) |
232 @type dict (optional) |
214 @param startRemote flag indicating to start the client via an eric-ide server |
233 @param startViaServer flag indicating to start the client via an eric-ide server |
215 (defaults to None) |
234 (defaults to None) |
216 @type bool (optional) |
235 @type bool (optional) |
217 @return client process object, a flag to indicate a network connection |
236 @return client process object, a flag to indicate a network connection |
218 and the name of the interpreter in case of a local execution |
237 and the name of the interpreter in case of a local execution |
219 @rtype tuple of (QProcess, bool, str) |
238 @rtype tuple of (QProcess, bool, str) |
220 """ |
239 """ |
221 global origPathEnv |
240 global origPathEnv |
222 |
241 |
223 if ( |
242 if ( |
224 startRemote is True |
243 startViaServer is True |
225 or ( |
244 or ( |
226 startRemote is None |
245 startViaServer is None |
227 and ( |
246 and ( |
228 venvName == self.debugServer.getEricServerEnvironmentString() |
247 venvName == self.debugServer.getEricServerEnvironmentString() |
229 or self.__ericServerDebugging |
248 or self.__ericServerDebugging |
230 ) |
249 ) |
231 ) |
250 ) |
232 ) and ericApp().getObject("EricServer").isServerConnected(): |
251 ) and ericApp().getObject("EricServer").isServerConnected(): |
233 # TODO change this once server environment definitions are supported |
252 startViaServer = True |
234 startRemote = True |
|
235 if venvName: |
253 if venvName: |
236 venvManager = ericApp().getObject("VirtualEnvManager") |
254 venvManager = ericApp().getObject("VirtualEnvManager") |
237 interpreter = venvManager.getVirtualenvInterpreter(venvName) |
255 interpreter = venvManager.getVirtualenvInterpreter(venvName) |
238 else: |
256 else: |
239 venvName = self.debugServer.getEricServerEnvironmentString() |
257 venvName = self.debugServer.getEricServerEnvironmentString() |
280 "--call-trace-optimization" |
298 "--call-trace-optimization" |
281 if Preferences.getDebugger("PythonCallTraceOptimization") |
299 if Preferences.getDebugger("PythonCallTraceOptimization") |
282 else "" |
300 else "" |
283 ) |
301 ) |
284 |
302 |
285 if Preferences.getDebugger("RemoteDbgEnabled"): |
303 if Preferences.getDebugger("RemoteDbgEnabled") and not startViaServer: |
286 # remote debugging code |
304 # remote debugging code |
287 ipaddr = self.debugServer.getHostAddress(False) |
305 ipaddr = self.debugServer.getHostAddress(False) |
288 rexec = Preferences.getDebugger("RemoteExecution") |
306 rexec = Preferences.getDebugger("RemoteExecution") |
289 rhost = Preferences.getDebugger("RemoteHost") |
307 rhost = Preferences.getDebugger("RemoteHost") |
290 if rhost == "": |
308 if rhost == "": |
349 " login was given.</p>" |
367 " login was given.</p>" |
350 ), |
368 ), |
351 ) |
369 ) |
352 return None, False, "" |
370 return None, False, "" |
353 |
371 |
354 elif startRemote and self.__ericServerDebuggerInterface is not None: |
372 elif startViaServer and self.__ericServerDebuggerInterface is not None: |
355 # debugging via an eric-ide server |
373 # debugging via an eric-ide server |
356 self.translate = self.__ericServerTranslation |
374 self.translate = self.__ericServerTranslation |
357 self.__ericServerDebugging = True |
375 self.__ericServerDebugging = True |
358 |
376 |
359 args = [] |
377 args = [] |
498 @param workingDir directory to start the debugger client in |
516 @param workingDir directory to start the debugger client in |
499 @type str |
517 @type str |
500 @param configOverride dictionary containing the global config override |
518 @param configOverride dictionary containing the global config override |
501 data |
519 data |
502 @type dict |
520 @type dict |
503 @param startRemote flag indicating to start the client via an eric-ide server |
521 @param startViaServer flag indicating to start the client via an eric-ide server |
504 (defaults to False) |
522 (defaults to None) |
505 @type bool (optional) |
523 @type bool (optional) |
506 @return client process object, a flag to indicate a network connection |
524 @return client process object, a flag to indicate a network connection |
507 and the name of the interpreter in case of a local execution |
525 and the name of the interpreter in case of a local execution |
508 @rtype tuple of (QProcess, bool, str) |
526 @rtype tuple of (QProcess, bool, str) |
509 """ |
527 """ |
528 if Preferences.getDebugger("PythonCallTraceOptimization") |
546 if Preferences.getDebugger("PythonCallTraceOptimization") |
529 else "" |
547 else "" |
530 ) |
548 ) |
531 |
549 |
532 if ( |
550 if ( |
533 startRemote is True |
551 startViaServer is True |
534 or ( |
552 or ( |
535 startRemote is None |
553 startViaServer is None |
536 and ( |
554 and ( |
537 venvName == self.debugServer.getEricServerEnvironmentString() |
555 venvName == self.debugServer.getEricServerEnvironmentString() |
538 or self.__ericServerDebugging |
556 or self.__ericServerDebugging |
539 ) |
557 ) |
540 ) |
558 ) |
541 ) and ericApp().getObject("EricServer").isServerConnected(): |
559 ) and ericApp().getObject("EricServer").isServerConnected(): |
542 # TODO change this once server environment definitions are supported |
560 startViaServer = True |
543 startRemote = True |
|
544 if venvName and venvName != self.debugServer.getProjectEnvironmentString(): |
561 if venvName and venvName != self.debugServer.getProjectEnvironmentString(): |
545 venvManager = ericApp().getObject("VirtualEnvManager") |
562 venvManager = ericApp().getObject("VirtualEnvManager") |
546 interpreter = venvManager.getVirtualenvInterpreter(venvName) |
563 interpreter = venvManager.getVirtualenvInterpreter(venvName) |
547 else: |
564 else: |
548 venvName = project.getProjectVenv() |
565 venvName = project.getProjectVenv() |
569 |
586 |
570 self.__inShutdown = False |
587 self.__inShutdown = False |
571 |
588 |
572 self.__ericServerDebugging = False |
589 self.__ericServerDebugging = False |
573 |
590 |
574 if project.getDebugProperty("REMOTEDEBUGGER"): |
591 if project.getDebugProperty("REMOTEDEBUGGER") and not startViaServer: |
575 # remote debugging code |
592 # remote debugging code |
576 ipaddr = self.debugServer.getHostAddress(False) |
593 ipaddr = self.debugServer.getHostAddress(False) |
577 rexec = project.getDebugProperty("REMOTECOMMAND") |
594 rexec = project.getDebugProperty("REMOTECOMMAND") |
578 rhost = project.getDebugProperty("REMOTEHOST") |
595 rhost = project.getDebugProperty("REMOTEHOST") |
579 if rhost == "": |
596 if rhost == "": |
621 self.translateLocal = project.getDebugProperty("LOCALPATH") |
638 self.translateLocal = project.getDebugProperty("LOCALPATH") |
622 self.translateLocalWindows = "\\" in self.translateLocal |
639 self.translateLocalWindows = "\\" in self.translateLocal |
623 self.translate = self.__remoteTranslation |
640 self.translate = self.__remoteTranslation |
624 else: |
641 else: |
625 self.translate = self.__identityTranslation |
642 self.translate = self.__identityTranslation |
|
643 |
|
644 self.__startedVenv = "" if process is None else venvName |
|
645 |
626 return process, self.__isNetworked, "" |
646 return process, self.__isNetworked, "" |
627 else: |
647 else: |
628 # remote shell command is missing |
648 # remote shell command is missing |
629 return None, self.__isNetworked, "" |
649 return None, self.__isNetworked, "" |
630 |
650 |
631 elif startRemote and self.__ericServerDebuggerInterface is not None: |
651 elif startViaServer and self.__ericServerDebuggerInterface is not None: |
632 # debugging via an eric-ide server |
652 # debugging via an eric-ide server |
633 self.translate = self.__ericServerTranslation |
653 self.translate = self.__ericServerTranslation |
634 self.__ericServerDebugging = True |
654 self.__ericServerDebugging = True |
635 |
655 |
636 args = [] |
656 args = [] |
861 for jsonStr in self.__commandQueue: |
881 for jsonStr in self.__commandQueue: |
862 self.__ericServerDebuggerInterface.sendClientCommand( |
882 self.__ericServerDebuggerInterface.sendClientCommand( |
863 self.__mainDebugger, jsonStr |
883 self.__mainDebugger, jsonStr |
864 ) |
884 ) |
865 else: |
885 else: |
866 conn = self.__connections[self.__mainDebugger] |
886 with contextlib.suppress(KeyError): |
867 for jsonStr in self.__commandQueue: |
887 conn = self.__connections[self.__mainDebugger] |
868 self.__writeJsonCommandToSocket(jsonStr, conn) |
888 for jsonStr in self.__commandQueue: |
|
889 self.__writeJsonCommandToSocket(jsonStr, conn) |
869 |
890 |
870 self.__commandQueue.clear() |
891 self.__commandQueue.clear() |
871 |
892 |
872 def shutdown(self): |
893 def shutdown(self): |
873 """ |
894 """ |