src/eric7/RemoteServer/EricServer.py

Mon, 24 Feb 2025 15:43:49 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 24 Feb 2025 15:43:49 +0100
branch
eric7
changeset 11148
15e30f0c76a8
parent 11090
f5f5f5803935
permissions
-rw-r--r--

Adjusted the code to the modified issue codes.

10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
11090
f5f5f5803935 Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11033
diff changeset
3 # Copyright (c) 2024 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the eric remote server.
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import io
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import json
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
12 import selectors
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 import socket
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 import struct
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 import sys
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 import traceback
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
17 import types
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 import zlib
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
10719
34901362f648 Removed the dependency on 'eric7.UI.Info.Version' in favor of the new 'eric7.__version__.Version'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10633
diff changeset
20 from eric7.__version__ import Version
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 from .EricRequestCategory import EricRequestCategory
10574
622e59b51640 Implemented the profiling and code coverage interface of the dialogs to the eric-ide server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10567
diff changeset
23 from .EricServerCoverageRequestHandler import EricServerCoverageRequestHandler
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
24 from .EricServerDebuggerRequestHandler import EricServerDebuggerRequestHandler
10774
7f7ff7456904 Created a handler and interface for remote handling 'editor config' files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10719
diff changeset
25 from .EricServerEditorConfigRequestHandler import EricServerEditorConfigRequestHandler
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
26 from .EricServerFileSystemRequestHandler import EricServerFileSystemRequestHandler
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 class EricServer:
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 Class implementing the eric remote server.
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
11033
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
34 def __init__(self, port=42024, useIPv6=False, clientId=""):
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 Constructor
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 @param port port to listen on (defaults to 42024)
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @type int (optional)
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 @param useIPv6 flag indicating to use IPv6 protocol (defaults to False)
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @type bool (optional)
11033
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
42 @param clientId ID string used to check each received message for being
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
43 sent by a valid eric IDE (defaults to "")
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
44 @type str (optional)
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 """
11033
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
46 self.__clientId = clientId
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
47 self.__address = ("", port)
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
48 self.__useIPv6 = useIPv6
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
49
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
50 self.__requestCategoryHandlerRegistry = {}
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
51 # Dictionary containing the defined and registered request category
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
52 # handlers. The key is the request category and the value is the respective
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
53 # handler method. This method must have the signature:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
54 # handler(request:str, params:dict, reqestUuid:str) -> None
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
55 self.__registerInternalHandlers()
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 self.__connection = None
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
59 self.__selector = selectors.DefaultSelector()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
60
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
61 # create and register the 'Debugger' request handler
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
62 self.__debuggerRequestHandler = EricServerDebuggerRequestHandler(self)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
63 self.registerRequestHandler(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
64 EricRequestCategory.Debugger,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
65 self.__debuggerRequestHandler.handleRequest,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
66 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
67
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
68 # create and register the 'File System' request handler
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
69 self.__fileSystemRequestHandler = EricServerFileSystemRequestHandler(self)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
70 self.registerRequestHandler(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
71 EricRequestCategory.FileSystem,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
72 self.__fileSystemRequestHandler.handleRequest,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
73 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
74
10574
622e59b51640 Implemented the profiling and code coverage interface of the dialogs to the eric-ide server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10567
diff changeset
75 # create and register the 'Coverage' request handler
622e59b51640 Implemented the profiling and code coverage interface of the dialogs to the eric-ide server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10567
diff changeset
76 self.__coverageRequestHandler = EricServerCoverageRequestHandler(self)
622e59b51640 Implemented the profiling and code coverage interface of the dialogs to the eric-ide server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10567
diff changeset
77 self.registerRequestHandler(
622e59b51640 Implemented the profiling and code coverage interface of the dialogs to the eric-ide server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10567
diff changeset
78 EricRequestCategory.Coverage,
622e59b51640 Implemented the profiling and code coverage interface of the dialogs to the eric-ide server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10567
diff changeset
79 self.__coverageRequestHandler.handleRequest,
622e59b51640 Implemented the profiling and code coverage interface of the dialogs to the eric-ide server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10567
diff changeset
80 )
622e59b51640 Implemented the profiling and code coverage interface of the dialogs to the eric-ide server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10567
diff changeset
81
10774
7f7ff7456904 Created a handler and interface for remote handling 'editor config' files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10719
diff changeset
82 # create and register the 'Editor Config' request handler
7f7ff7456904 Created a handler and interface for remote handling 'editor config' files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10719
diff changeset
83 self.__editorConfigRequestHandler = EricServerEditorConfigRequestHandler(self)
7f7ff7456904 Created a handler and interface for remote handling 'editor config' files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10719
diff changeset
84 self.registerRequestHandler(
7f7ff7456904 Created a handler and interface for remote handling 'editor config' files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10719
diff changeset
85 EricRequestCategory.EditorConfig,
7f7ff7456904 Created a handler and interface for remote handling 'editor config' files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10719
diff changeset
86 self.__editorConfigRequestHandler.handleRequest,
7f7ff7456904 Created a handler and interface for remote handling 'editor config' files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10719
diff changeset
87 )
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
88
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
89 def getSelector(self):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
90 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
91 Public method to get a reference to the selector object.
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
92
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
93 @return reference to the selector object
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
94 @rtype selectors.BaseSelector
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
95 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
96 return self.__selector
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 #######################################################################
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 ## Methods for receiving requests and sending the results.
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 #######################################################################
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 def sendJson(self, category, reply, params, reqestUuid=""):
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 Public method to send a single refactoring command to the server.
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 @param category service category
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 @type EricRequestCategory
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 @param reply reply name to be sent
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 @type str
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 @param params dictionary of named parameters for the request
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 @type dict
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 @param reqestUuid UUID of the associated request as sent by the eric IDE
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 (defaults to "", i.e. no UUID received)
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 @type str
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 """
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
116 if self.__connection is not None:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
117 commandDict = {
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
118 "jsonrpc": "2.0",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
119 "category": category,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
120 "reply": reply,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
121 "params": params,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
122 "uuid": reqestUuid,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
123 }
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
124 self.sendJsonCommand(commandDict, self.__connection)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
125
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
126 def sendJsonCommand(self, jsonCommand, sock):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
127 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
128 Public method to send a JSON encoded command/response via a given socket.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
129
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
130 @param jsonCommand dictionary containing the command data or a JSON encoded
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
131 command string
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
132 @type dict or str
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
133 @param sock reference to the socket to send the data to
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
134 @type socket.socket
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
135 @return flag indicating a successful transmission
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
136 @rtype bool
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
137 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
138 if isinstance(jsonCommand, dict):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
139 jsonCommand = json.dumps(jsonCommand)
10610
bb0149571d94 Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10597
diff changeset
140 # - print("Eric Server Send:", jsonCommand) # for debugging
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
141
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
142 data = jsonCommand.encode("utf8", "backslashreplace")
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 header = struct.pack(b"!II", len(data), zlib.adler32(data) & 0xFFFFFFFF)
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
144 try:
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
145 sock.sendall(header)
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
146 sock.sendall(data)
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
147 return True
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
148 except BrokenPipeError:
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
149 return False
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
151 def __receiveBytes(self, length, sock):
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 Private method to receive the given length of bytes.
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 @param length bytes to receive
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 @type int
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
157 @param sock reference to the socket to receive the data from
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
158 @type socket.socket
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 @return received bytes or None if connection closed
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 @rtype bytes
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 data = bytearray()
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
163 while sock is not None and len(data) < length:
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
164 try:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
165 newData = sock.recv(length - len(data))
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
166 if not newData:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
167 return None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
168
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
169 data += newData
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
170 except OSError as err:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
171 if err.errno != 11:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
172 data = None # in case some data was received already
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
173 break
11030
46172eee98b6 Improved the eric-ide server slightly by adding a socket read timeout and an exception handler for memory errors.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10946
diff changeset
174 except MemoryError:
46172eee98b6 Improved the eric-ide server slightly by adding a socket read timeout and an exception handler for memory errors.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10946
diff changeset
175 data = None # in case some data was received already
46172eee98b6 Improved the eric-ide server slightly by adding a socket read timeout and an exception handler for memory errors.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10946
diff changeset
176 break
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
177 return data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
178
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
179 def receiveJsonCommand(self, sock):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
180 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
181 Public method to receive a JSON encoded command and data.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
182
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
183 @param sock reference to the socket to receive the data from
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
184 @type socket.socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
185 @return dictionary containing the JSON command data or None to signal
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
186 an issue while receiving data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
187 @rtype dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
188 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
189 if self.isSocketClosed(sock):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
190 return None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
191
11033
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
192 if self.__clientId and sock == self.__connection:
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
193 msgClientIdBytes = self.__receiveBytes(len(self.__clientId), sock)
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
194 try:
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
195 msgClientId = str(msgClientIdBytes, encoding="utf-8")
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
196 except UnicodeDecodeError:
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
197 msgClientId = str(bytes(msgClientIdBytes))
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
198 if msgClientId != self.__clientId:
11148
15e30f0c76a8 Adjusted the code to the modified issue codes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
199 print(f"Received illegal client ID '{msgClientId}'.") # noqa: M-801
11033
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
200 return {}
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
201
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
202 header = self.__receiveBytes(struct.calcsize(b"!II"), sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
203 if not header:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
204 return {}
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
205
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
206 length, datahash = struct.unpack(b"!II", header)
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
208 length = int(length)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
209 data = self.__receiveBytes(length, sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
210 if data is None:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
211 return None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
212
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
213 if not data or zlib.adler32(data) & 0xFFFFFFFF != datahash:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
214 self.sendJson(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
215 category=EricRequestCategory.Error,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
216 reply="EricServerChecksumException",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
217 params={
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
218 "ExceptionType": "ProtocolChecksumError",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
219 "ExceptionValue": "The checksum of the data does not match.",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
220 "ProtocolData": data.decode("utf8", "backslashreplace"),
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
221 },
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
222 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
223 return {}
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
224
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
225 jsonStr = data.decode("utf8", "backslashreplace")
11148
15e30f0c76a8 Adjusted the code to the modified issue codes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
226 # - print("Eric Server Receive:", jsonStr) # for debugging # noqa: M-801
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
227 try:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
228 return json.loads(jsonStr.strip())
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
229 except (TypeError, ValueError) as err:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
230 self.sendJson(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
231 category=EricRequestCategory.Error,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
232 reply="EricServerException",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
233 params={
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
234 "ExceptionType": "ProtocolError",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
235 "ExceptionValue": str(err),
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
236 "ProtocolData": jsonStr.strip(),
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
237 },
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
238 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
239 return {}
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 def __receiveJson(self):
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 Private method to receive a JSON encoded command and data from the
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 server.
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 @return tuple containing the received service category, the command,
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 a dictionary containing the associated data and the UUID of the
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 request
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 @rtype tuple of (int, str, dict, str)
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 """
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
251 requestDict = self.receiveJsonCommand(self.__connection)
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
253 if not requestDict:
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 return EricRequestCategory.Error, None, None, None
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 category = requestDict["category"]
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 request = requestDict["request"]
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 params = requestDict["params"]
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 reqestUuid = requestDict["uuid"]
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 return category, request, params, reqestUuid
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
263 def isSocketClosed(self, sock):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
264 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
265 Public method to check, if a given socket is closed.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
266
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
267 @param sock reference to the socket to be checked
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
268 @type socket.socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
269 @return flag indicating a closed state
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
270 @rtype bool
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
271 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
272 try:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
273 # this will try to read bytes without removing them from buffer (peek only)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
274 data = sock.recv(16, socket.MSG_PEEK)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
275 if len(data) == 0:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
276 return True
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
277 except BlockingIOError:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
278 return False # socket is open and reading from it would block
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
279 except ConnectionError:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
280 return True # socket was closed for some other reason
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
281 except Exception:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
282 return False
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
283 return False
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
284
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 #######################################################################
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 ## Methods for the server main loop.
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 #######################################################################
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
289 def __initializeIdeSocket(self):
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
290 """
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
291 Private method to initialize and register the eric-ide server socket.
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
292 """
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
293 if socket.has_dualstack_ipv6() and self.__useIPv6:
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
294 self.__socket = socket.create_server(
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
295 self.__address, family=socket.AF_INET6, backlog=0, dualstack_ipv6=True
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
296 )
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
297 else:
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
298 self.__socket = socket.create_server(
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
299 self.__address, family=socket.AF_INET, backlog=0
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
300 )
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
301
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
302 self.__socket.listen(0)
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
303 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
304 address = self.__socket.getsockname()
11148
15e30f0c76a8 Adjusted the code to the modified issue codes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
305 print( # noqa: M-801
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
306 f"Listening for 'eric-ide' connections on {address[0]}, port {address[1]}"
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
307 )
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
308 data = types.SimpleNamespace(
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
309 name="server", acceptHandler=self.__acceptIdeConnection
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
310 )
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
311 self.__selector.register(self.__socket, selectors.EVENT_READ, data=data)
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
312
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
313 def __unregisterIdeSocket(self):
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
314 """
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
315 Private method to unregister the eric-ide server socket because only one
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
316 connection is allowed.
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
317 """
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
318 self.__selector.unregister(self.__socket)
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
319 self.__socket.shutdown(socket.SHUT_RDWR)
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
320 self.__socket.close()
10567
b098e0d028cc Added some code to handle error conditions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10565
diff changeset
321 self.__socket = None
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
322
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 def __shutdown(self):
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 Private method to shut down the server.
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 """
10567
b098e0d028cc Added some code to handle error conditions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10565
diff changeset
327 self.__closeIdeConnection(shutdown=True)
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
328
11148
15e30f0c76a8 Adjusted the code to the modified issue codes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
329 print("Stop listening for 'eric-ide' connections.") # noqa: M-801
10567
b098e0d028cc Added some code to handle error conditions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10565
diff changeset
330 if self.__socket is not None:
b098e0d028cc Added some code to handle error conditions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10565
diff changeset
331 self.__socket.shutdown(socket.SHUT_RDWR)
b098e0d028cc Added some code to handle error conditions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10565
diff changeset
332 self.__socket.close()
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
334 self.__selector.close()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
335
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
336 def __acceptIdeConnection(self, sock):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
337 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
338 Private method to accept the connection on the listening IDE server socket.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
339
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
340 @param sock reference to the listening socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
341 @type socket.socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
342 """
11033
6b197c3389f7 IDE Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11030
diff changeset
343 connection, address = sock.accept() # Should be ready to read.
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
344 if self.__connection is None:
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
345 print(f"'eric-ide' connection from {address[0]}, port {address[1]}")
11148
15e30f0c76a8 Adjusted the code to the modified issue codes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
346 # noqa: M-801
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
347 self.__connection = connection
11030
46172eee98b6 Improved the eric-ide server slightly by adding a socket read timeout and an exception handler for memory errors.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10946
diff changeset
348 self.__connection.settimeout(10)
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
349 data = types.SimpleNamespace(
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
350 name="eric-ide", address=address, handler=self.__serviceIdeConnection
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
351 )
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
352 events = selectors.EVENT_READ
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
353 self.__selector.register(self.__connection, events, data=data)
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
354
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
355 self.__unregisterIdeSocket()
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
356 else:
11148
15e30f0c76a8 Adjusted the code to the modified issue codes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
357 print( # noqa: M-801
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
358 f"'eric-ide' connection from {address[0]}, port {address[1]} rejected"
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
359 )
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
360 connection.close()
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
361
10567
b098e0d028cc Added some code to handle error conditions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10565
diff changeset
362 def __closeIdeConnection(self, shutdown=False):
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
363 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
364 Private method to close the connection to an eric-ide.
10597
fbe93720ee9f Corrected a few formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10574
diff changeset
365
10574
622e59b51640 Implemented the profiling and code coverage interface of the dialogs to the eric-ide server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10567
diff changeset
366 @param shutdown flag indicating a shutdown process
622e59b51640 Implemented the profiling and code coverage interface of the dialogs to the eric-ide server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10567
diff changeset
367 @type bool
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
368 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
369 if self.__connection is not None:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
370 self.__selector.unregister(self.__connection)
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
371 try:
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
372 address = self.__connection.getpeername()
11148
15e30f0c76a8 Adjusted the code to the modified issue codes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
373 print( # noqa: M-801
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
374 f"Closing 'eric-ide' connection to {address[0]}, port {address[1]}."
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
375 )
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
376 self.__connection.shutdown(socket.SHUT_RDWR)
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
377 self.__connection.close()
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
378 except OSError:
11148
15e30f0c76a8 Adjusted the code to the modified issue codes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
379 print("'eric-ide' connection gone.") # noqa: M-801
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
380 self.__connection = None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
381
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
382 self.__debuggerRequestHandler.shutdownClients()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
383
10567
b098e0d028cc Added some code to handle error conditions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10565
diff changeset
384 if not shutdown:
b098e0d028cc Added some code to handle error conditions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10565
diff changeset
385 self.__initializeIdeSocket()
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
386
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
387 def __serviceIdeConnection(self, key):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
388 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
389 Private method to service the eric-ide connection.
10597
fbe93720ee9f Corrected a few formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10574
diff changeset
390
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
391 @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: 10547
diff changeset
392 to be serviced
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
393 @type selectors.SelectorKey
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
394 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
395 if key.data.name == "eric-ide":
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
396 category, request, params, reqestUuid = self.__receiveJson()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
397 if category == EricRequestCategory.Error or request is None:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
398 self.__closeIdeConnection()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
399 return
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
400
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
401 if category == EricRequestCategory.Server and request.lower() == "shutdown":
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
402 self.__shouldStop = True
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
403 return
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
404
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
405 self.__handleRequest(category, request, params, reqestUuid)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
406
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
407 def run(self):
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409 Public method implementing the remote server main loop.
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 Exiting the inner loop, that receives and dispatches the requests, will
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412 cause the server to stop and exit. The main loop handles these requests.
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 <ul>
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414 <li>exit - exit the handler loop and wait for the next connection</li>
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 <li>shutdown - exit the handler loop and perform a clean shutdown</li>
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 </ul>
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 @return flag indicating a clean shutdown
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419 @rtype bool
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421 cleanExit = True
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
422 self.__shouldStop = False
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
424 # initialize the eric-ide server socket and listen for new connections
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
425 self.__initializeIdeSocket()
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
426
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
427 # initialize the debug client server socket
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
428 self.__debuggerRequestHandler.initServerSocket()
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
429
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
430 while True:
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431 try:
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
432 events = self.__selector.select(timeout=None)
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
433 for key, _mask in events:
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
434 if key.data.name == "server":
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
435 # it is an event for a server socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
436 key.data.acceptHandler(key.fileobj)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
437 else:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
438 key.data.handler(key)
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440 except KeyboardInterrupt:
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
441 # intercept user pressing Ctrl+C
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
442 self.__shouldStop = True
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
443
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
444 except Exception:
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
445 exctype, excval, exctb = sys.exc_info()
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
446 tbinfofile = io.StringIO()
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
447 traceback.print_tb(exctb, None, tbinfofile)
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
448 tbinfofile.seek(0)
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
449 tbinfo = tbinfofile.read()
10597
fbe93720ee9f Corrected a few formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10574
diff changeset
450
11148
15e30f0c76a8 Adjusted the code to the modified issue codes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
451 print("Stopping due to an exception.\nDetails:") # noqa: M-801
15e30f0c76a8 Adjusted the code to the modified issue codes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
452 print(f"{str(exctype)} / {str(excval)} / {tbinfo}") # noqa: M-801
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
453
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
454 self.__shouldStop = True
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
455 cleanExit = False
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
456
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
457 if self.__shouldStop:
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
458 # exit the outer loop and shut down the server
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459 self.__shutdown()
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460 break
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
462 return cleanExit
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464 #######################################################################
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
465 ## Methods for registering and unregistering handlers.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
466 #######################################################################
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
467
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
468 def registerRequestHandler(self, requestCategory, handler):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
469 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
470 Public method to register a request handler method for the given request
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
471 category.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
472
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
473 @param requestCategory request category to be registered
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
474 @type EricRequestCategory or int (>= EricRequestCategory.UserCategory)
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
475 @param handler reference to the handler method. This handler must accept
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
476 the parameters 'request', 'params', and 'requestUuid'
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
477 @type function(request:str, params:dict, requestUuid:str)
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
478 @exception ValueError raised to signal a request category collision
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
479 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
480 if requestCategory in self.__requestCategoryHandlerRegistry:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
481 raise ValueError(f"Request category '{requestCategory} already registered.")
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
482
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
483 self.__requestCategoryHandlerRegistry[requestCategory] = handler
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
484
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
485 def unregisterRequestHandler(self, requestCategory, ignoreError=False):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
486 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
487 Public method to unregister a handler for the given request category.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
488
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
489 Note: This method will raise a KeyError exception in case the request
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
490 category has not been registered and ignoreError is False (the default).
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
491
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
492 @param requestCategory request category to be unregistered
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
493 @type EricRequestCategory or int (>= EricRequestCategory.UserCategory)
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
494 @param ignoreError flag indicating to ignore errors (defaults to False)
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
495 @type bool (optional)
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
496 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
497 try:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
498 del self.__requestCategoryHandlerRegistry[requestCategory]
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
499 except KeyError:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
500 if not ignoreError:
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
501 raise
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
502
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
503 def __registerInternalHandlers(self):
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
504 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
505 Private method to register request handler categories of this class.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
506 """
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
507 self.registerRequestHandler(EricRequestCategory.Echo, self.__handleEchoRequest)
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
508 self.registerRequestHandler(
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
509 EricRequestCategory.Server, self.__handleServerRequest
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
510 )
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
511 self.registerRequestHandler(EricRequestCategory.Error, None)
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
512 # Register a None handler to indicate we are not expecting a request of the
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
513 # 'Error' category.
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
514
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
515 #######################################################################
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
516 ## Request handler methods.
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
517 #######################################################################
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
518
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
519 def __handleRequest(self, category, request, params, reqestUuid):
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
520 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
521 Private method handling or dispatching the received requests.
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
522
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
523 @param category category of the request
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
524 @type EricRequestCategory
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
525 @param request request name
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
526 @type str
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
527 @param params request parameters
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
528 @type dict
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
529 @param reqestUuid UUID of the associated request as sent by the eric IDE
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
530 @type str
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
531 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
532 try:
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
533 handler = self.__requestCategoryHandlerRegistry[category]
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10547
diff changeset
534 handler(request=request, params=params, reqestUuid=reqestUuid)
10539
4274f189ff78 eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10531
diff changeset
535 except KeyError:
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
536 self.sendJson(
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
537 category=EricRequestCategory.Error,
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
538 reply="UnsupportedServiceCategory",
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
539 params={"Category": category},
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
540 )
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
541
11148
15e30f0c76a8 Adjusted the code to the modified issue codes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
542 def __handleEchoRequest(self, request, params, reqestUuid): # noqa: U-100
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
543 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
544 Private method to handle an 'Echo' request.
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
545
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
546 @param request request name
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
547 @type str
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
548 @param params request parameters
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
549 @type dict
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
550 @param reqestUuid UUID of the associated request as sent by the eric IDE
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
551 (defaults to "", i.e. no UUID received)
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
552 @type str
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
553 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
554 self.sendJson(
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
555 category=EricRequestCategory.Echo,
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
556 reply="Echo",
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
557 params=params,
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
558 reqestUuid=reqestUuid,
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
559 )
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
560
11148
15e30f0c76a8 Adjusted the code to the modified issue codes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
561 def __handleServerRequest(self, request, params, reqestUuid): # noqa: U-100
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
562 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
563 Private method to handle a 'Server' request.
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
564
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
565 @param request request name
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
566 @type str
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
567 @param params request parameters
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
568 @type dict
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
569 @param reqestUuid UUID of the associated request as sent by the eric IDE
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
570 (defaults to "", i.e. no UUID received)
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
571 @type str
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
572 """
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
573 # 'Exit' and 'Shutdown' are handled in the 'run()' method.
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
574
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
575 if request.lower() == "versions":
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
576 self.sendJson(
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
577 category=EricRequestCategory.Server,
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
578 reply="Versions",
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
579 params={
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
580 "python": sys.version.split()[0],
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
581 "py_bitsize": "64-Bit" if sys.maxsize > 2**32 else "32-Bit",
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
582 "version": Version,
10565
3583a10ce4d4 Changed the eric-ide server versions display to show the server host name as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10563
diff changeset
583 "hostname": socket.gethostname(),
10531
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
584 },
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
585 reqestUuid=reqestUuid,
3308e8349e4c Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
586 )

eric ide

mercurial