src/eric7/RemoteServer/EricServerDebuggerRequestHandler.py

Wed, 09 Oct 2024 17:50:11 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 09 Oct 2024 17:50:11 +0200
branch
eric7
changeset 10961
7bbf95f41266
parent 10957
fbd61fd3fdc1
child 10962
b56b76c0221b
permissions
-rw-r--r--

Added some more exception handlers to the 'EricServerDebuggerRequestHandler' class.

10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de>
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the debugger request handler of the eric-ide server.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
10954
c3d109783fbd Made EricServerDebuggerRequestHandler a bit more fault tolerant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10953
diff changeset
10 import contextlib
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import json
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import os
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 import selectors
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 import socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 import subprocess
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 import sys
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 import types
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 from .EricRequestCategory import EricRequestCategory
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
20 from .EricServerBaseRequestHandler import EricServerBaseRequestHandler
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
22
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
23 class EricServerDebuggerRequestHandler(EricServerBaseRequestHandler):
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 Class implementing the debugger request handler of the eric-ide server.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 def __init__(self, server):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 Constructor
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 @param server reference to the eric-ide server object
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 @type EricServer
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 """
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
35 super().__init__(server)
10597
fbe93720ee9f Corrected a few formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10574
diff changeset
36
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
37 self._category = EricRequestCategory.Debugger
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
38
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
39 self._requestMethodMapping = {
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 "StartClient": self.__startClient,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 "StopClient": self.__stopClient,
10597
fbe93720ee9f Corrected a few formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10574
diff changeset
42 "DebugClientCommand": self.__relayDebugClientCommand,
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 }
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 self.__mainClientId = None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 self.__client = None
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
47 self.__inStartClient = False
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 self.__pendingConnections = []
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 self.__connections = {}
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 address = ("127.0.0.1", 0)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 self.__socket = socket.create_server(address, family=socket.AF_INET)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
54 self.__originalPathString = os.getenv("PATH")
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
55
10953
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
56 def sendError(self, request, reqestUuid="", errorMessage=None):
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
57 """
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
58 Public method to send an error report to the IDE.
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
59
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
60 @param request request name
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
61 @type str
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
62 @param reqestUuid UUID of the associated request as sent by the eric IDE
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
63 (defaults to "", i.e. no UUID received)
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
64 @type str
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
65 @param errorMessage error message to be sent back (defaults to None)
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
66 @type str (optional)
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
67 """
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
68 if errorMessage:
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
69 self._server.sendJson(
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
70 category=self._category,
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
71 reply=request,
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
72 params={
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
73 "Error": f"Error during request type '{request}': {errorMessage}"
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
74 },
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
75 reqestUuid=reqestUuid,
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
76 )
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
77 else:
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
78 super().sendError(request=request, reqestUuid=reqestUuid)
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
79
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 def initServerSocket(self):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 Public method to initialize the server socket listening for debug client
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 connections.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 # listen on the debug server socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 self.__socket.listen()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 self.__socket.setblocking(False)
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
88 address = self.__socket.getsockname()
10610
bb0149571d94 Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10597
diff changeset
89 print( # noqa: M801
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
90 f"Listening for 'Debug Client' connections on"
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
91 f" {address[0]}, port {address[1]}"
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 data = types.SimpleNamespace(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 name="server", acceptHandler=self.__acceptDbgClientConnection
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 )
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
96 self._server.getSelector().register(
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 self.__socket, selectors.EVENT_READ, data=data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 #######################################################################
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 ## DebugServer like methods.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 #######################################################################
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 def __acceptDbgClientConnection(self, sock):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 Private method to accept the connection on the listening debug server socket.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 @param sock reference to the listening socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 @type socket.socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 connection, address = sock.accept() # Should be ready to read
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
112 print(f"'Debug Client' connection from {address[0]}, port {address[1]}")
10610
bb0149571d94 Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10597
diff changeset
113 # noqa: M801
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 connection.setblocking(False)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 self.__pendingConnections.append(connection)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 data = types.SimpleNamespace(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 name="debug_client",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 address=address,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 handler=self.__serviceDbgClientConnection,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 )
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
122 self._server.getSelector().register(connection, selectors.EVENT_READ, data=data)
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 def __serviceDbgClientConnection(self, key):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 Private method to service the debug client connection.
10597
fbe93720ee9f Corrected a few formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10574
diff changeset
127
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 @param key reference to the SelectorKey object associated with the connection
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 to be serviced
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 @type selectors.SelectorKey
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 sock = key.fileobj
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
133 data = self._server.receiveJsonCommand(sock)
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 if data is None:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 # socket was closed by debug client
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 self.__clientSocketDisconnected(sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 elif data:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 method = data["method"]
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
140
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
141 # 1. process debug client messages before relaying
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 if method == "DebuggerId" and sock in self.__pendingConnections:
10597
fbe93720ee9f Corrected a few formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10574
diff changeset
143 debuggerId = data["params"]["debuggerId"]
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 self.__connections[debuggerId] = sock
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 self.__pendingConnections.remove(sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 if self.__mainClientId is None:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 self.__mainClientId = debuggerId
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 elif method == "ResponseBanner":
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 # add an indicator for the eric-ide server
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 data["params"]["platform"] += " (eric-ide Server)"
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
153 # 2. pass on the data to the eric-ide
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 jsonStr = json.dumps(data)
10610
bb0149571d94 Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10597
diff changeset
155 # - print("Client Response:", jsonStr)
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
156 self._server.sendJson(
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 category=EricRequestCategory.Debugger,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 reply="DebugClientResponse",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 params={"response": jsonStr},
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 )
10597
fbe93720ee9f Corrected a few formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10574
diff changeset
161
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
162 # 3. process debug client messages after relaying
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
163 if method == "ResponseExit":
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
164 for sock in list(self.__connections.values()):
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
165 if not self._server.isSocketClosed(sock):
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
166 self.__clientSocketDisconnected(sock)
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 def __clientSocketDisconnected(self, sock):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 """
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
170 Private method handling a socket disconnecting.
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 @param sock reference to the disconnected socket
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
173 @type socket.socket
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 """
10956
1c22b555df34 Added some guards for harmless error conditions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10954
diff changeset
175 with contextlib.suppress(KeyError):
1c22b555df34 Added some guards for harmless error conditions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10954
diff changeset
176 self._server.getSelector().unregister(sock)
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177
10954
c3d109783fbd Made EricServerDebuggerRequestHandler a bit more fault tolerant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10953
diff changeset
178 with contextlib.suppress(OSError):
c3d109783fbd Made EricServerDebuggerRequestHandler a bit more fault tolerant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10953
diff changeset
179 address = sock.getpeername()
c3d109783fbd Made EricServerDebuggerRequestHandler a bit more fault tolerant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10953
diff changeset
180 print( # noqa: M801
c3d109783fbd Made EricServerDebuggerRequestHandler a bit more fault tolerant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10953
diff changeset
181 f"'Debug Client' connection from {address[0]}, port {address[1]}"
c3d109783fbd Made EricServerDebuggerRequestHandler a bit more fault tolerant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10953
diff changeset
182 f" closed."
c3d109783fbd Made EricServerDebuggerRequestHandler a bit more fault tolerant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10953
diff changeset
183 )
10633
dda7e43934dc Corrected some code formatting and coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10630
diff changeset
184
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 for debuggerId in list(self.__connections):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 if self.__connections[debuggerId] is sock:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 del self.__connections[debuggerId]
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
188 self._server.sendJson(
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 category=EricRequestCategory.Debugger,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 reply="DebugClientDisconnected",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 params={"debugger_id": debuggerId},
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 if debuggerId == self.__mainClientId:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 self.__mainClientId = None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 break
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 else:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 if sock in self.__pendingConnections:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 self.__pendingConnections.remove(sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201
10961
7bbf95f41266 Added some more exception handlers to the 'EricServerDebuggerRequestHandler' class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10957
diff changeset
202 with contextlib.suppress(OSError):
7bbf95f41266 Added some more exception handlers to the 'EricServerDebuggerRequestHandler' class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10957
diff changeset
203 sock.close()
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
205 def __mainClientExited(self):
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
206 """
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
207 Private method to handle exiting of the main debug client.
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
208 """
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
209 self._server.sendJson(
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
210 category=EricRequestCategory.Debugger,
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
211 reply="MainClientExited",
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
212 params={"debugger_id": self.__mainClientId if self.__mainClientId else ""},
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
213 )
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
214
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 def shutdownClients(self):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 Public method to shut down all connected clients.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 if not self.__client:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 # no client started yet
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 return
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 while self.__pendingConnections:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 sock = self.__pendingConnections.pop()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 commandDict = self.__prepareClientCommand("RequestShutdown", {})
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
226 self._server.sendJsonCommand(commandDict, sock)
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 self.__shutdownSocket("", sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 while self.__connections:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 debuggerId, sock = self.__connections.popitem()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 commandDict = self.__prepareClientCommand("RequestShutdown", {})
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
232 self._server.sendJsonCommand(commandDict, sock)
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 self.__shutdownSocket(debuggerId, sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 # reinitialize
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 self.__mainClientId = None
10957
fbd61fd3fdc1 Implemented a fix for the eric-ide server not stopping the debug process upon a 'StopClient' command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10956
diff changeset
237 if self.__client:
fbd61fd3fdc1 Implemented a fix for the eric-ide server not stopping the debug process upon a 'StopClient' command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10956
diff changeset
238 self.__client.kill()
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 self.__client = None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 def __shutdownSocket(self, debuggerId, sock):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 """
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
243 Private method to shut down a socket.
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 @param debuggerId ID of the debugger the socket belongs to
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 @type str
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 @param sock reference to the socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 @type socket.socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 """
10961
7bbf95f41266 Added some more exception handlers to the 'EricServerDebuggerRequestHandler' class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10957
diff changeset
250 with contextlib.suppress(KeyError, OSError):
10954
c3d109783fbd Made EricServerDebuggerRequestHandler a bit more fault tolerant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10953
diff changeset
251 # Socket might have been unregister automatically (e.g. due to a crash of
c3d109783fbd Made EricServerDebuggerRequestHandler a bit more fault tolerant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10953
diff changeset
252 # the script being debugged).
c3d109783fbd Made EricServerDebuggerRequestHandler a bit more fault tolerant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10953
diff changeset
253 self._server.getSelector().unregister(sock)
10961
7bbf95f41266 Added some more exception handlers to the 'EricServerDebuggerRequestHandler' class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10957
diff changeset
254 sock.shutdown(socket.SHUT_RDWR)
7bbf95f41266 Added some more exception handlers to the 'EricServerDebuggerRequestHandler' class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10957
diff changeset
255 sock.close()
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 if debuggerId:
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
258 self._server.sendJson(
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 category=EricRequestCategory.Debugger,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 reply="DebugClientDisconnected",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 params={"debugger_id": debuggerId},
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 def __prepareClientCommand(self, command, params):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 Private method to prepare a command dictionary for the debug client.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 @param command command to be sent
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 @type str
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 @param params dictionary containing the command parameters
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 @type dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 @return completed command dictionary to be sent to the debug client
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 @rtype dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 return {
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 "jsonrpc": "2.0",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 "method": command,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 "params": params,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 }
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 #######################################################################
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 ## Individual request handler methods.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 #######################################################################
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 def __startClient(self, params):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 Private method to start a debug client process.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 @param params dictionary containing the request data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 @type dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 """
10957
fbd61fd3fdc1 Implemented a fix for the eric-ide server not stopping the debug process upon a 'StopClient' command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10956
diff changeset
292 self.shutdownClients() # stop all running clients first (just in case)
fbd61fd3fdc1 Implemented a fix for the eric-ide server not stopping the debug process upon a 'StopClient' command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10956
diff changeset
293
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
294 self.__inStartClient = True
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
295
10567
b098e0d028cc Added some code to handle error conditions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10563
diff changeset
296 # start a debug client
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 debugClient = os.path.abspath(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 os.path.join(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 os.path.dirname(__file__),
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 "..",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 "DebugClients",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 "Python",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 "DebugClient.py",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 ipaddr, port = self.__socket.getsockname()
10764
5915ca2466b2 Added code to support eric-ide server environments for debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10633
diff changeset
307 args = [
5915ca2466b2 Added code to support eric-ide server environments for debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10633
diff changeset
308 params["interpreter"] if params["interpreter"] else sys.executable,
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
309 debugClient,
10764
5915ca2466b2 Added code to support eric-ide server environments for debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10633
diff changeset
310 ]
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 args.extend(params["arguments"])
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 args.extend([str(port), "True", ipaddr])
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
314 workingDir = params["working_dir"] if params["working_dir"] else None
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
315
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
316 clientEnv = os.environ.copy()
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
317 if self.__originalPathString:
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
318 clientEnv["PATH"] = self.__originalPathString
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
319
10953
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
320 try:
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
321 self.__client = subprocess.Popen(
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
322 args,
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
323 stdout=subprocess.PIPE,
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
324 stderr=subprocess.PIPE,
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
325 cwd=workingDir,
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
326 env=clientEnv,
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
327 )
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
328 except (OSError, ValueError, subprocess.SubprocessError) as err:
42166c630d9b eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10767
diff changeset
329 self.sendError(request="StartClient", errorMessage=str(err))
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
330
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
331 def __stopClient(self, params): # noqa: U100
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 Private method to stop the current debug client process.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 @param params dictionary containing the request data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 @type dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 @return dictionary containing the reply data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 @rtype dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 self.shutdownClients()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 return {"ok": True}
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 def __relayDebugClientCommand(self, params):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 Private method to relay a debug client command to the client.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 @param params dictionary containing the request data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 @type dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 debuggerId = params["debugger_id"]
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 jsonStr = params["command"]
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
354 if not debuggerId and self.__mainClientId and "RequestBanner" in jsonStr:
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
355 # modify the target for the 'RequestBanner' request
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 debuggerId = self.__mainClientId
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
358 if debuggerId == "<<all>>":
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
359 # broadcast to all connected debug clients
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
360 for sock in self.__connections.values():
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
361 self._server.sendJsonCommand(jsonStr, sock)
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
362 else:
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
363 try: # noqa: Y105
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
364 sock = self.__connections[debuggerId]
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
365 self._server.sendJsonCommand(jsonStr, sock)
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
366 except KeyError:
10957
fbd61fd3fdc1 Implemented a fix for the eric-ide server not stopping the debug process upon a 'StopClient' command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10956
diff changeset
367 # - print(f"Command for unknown debugger ID '{debuggerId}' received.")
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
368 pass

eric ide

mercurial