22# -*- coding: utf-8 -*-
33import json
44
5+
56class JsonRpcException (Exception ):
67 """Base class for exceptions in this module."""
78 pass
@@ -10,71 +11,71 @@ class JsonRpcException(Exception):
1011class JsonRpcParseError (Exception ):
1112 """Raised if Parse JSON-RPC 2.0 string failed.
1213 Params:
13- rpcError - `JsonRpcError` """
14+ rpcError - `JsonRpcError`"""
1415 def __init__ (self , rpcError ):
15- Exception .__init__ (self , rpcError )
16- self .rpcError = rpcError
16+ Exception .__init__ (self , rpcError )
17+ self .rpcError = rpcError
1718
1819
1920def defaultJsonEncode (o ):
20- return o .__dict__
21+ return o .__dict__
2122
2223
2324class JsonRpcMessage (object ):
2425
2526 @classmethod
26- def Request (cls , id , method , params = None ):
27- return JsonRpcRequest (id , method , params )
27+ def Request (cls , reqId , method , params = None ):
28+ return JsonRpcRequest (reqId , method , params )
2829
2930 @classmethod
30- def Notification (cls , method , params = None ):
31+ def Notification (cls , method , params = None ):
3132 return JsonRpcNotification (method , params )
3233
3334 @classmethod
34- def Success (cls , id , result ):
35- return JsonRpcSuccessResponse (id , result )
35+ def Success (cls , reqId , result ):
36+ return JsonRpcSuccessResponse (reqId , result )
3637
3738 @classmethod
38- def Error (cls , id , errorobj ):
39- return JsonRpcErrorResponse (id , errorobj )
40-
39+ def Error (cls , reqId , errorobj ):
40+ return JsonRpcErrorResponse (reqId , errorobj )
4141
42- def AsJson (self , indent = False , escape = True ):
43- return json .dumps (self , sort_keys = True , indent = indent ,
42+ def AsJson (self , indent = False , escape = True ):
43+ return json .dumps (
44+ self , sort_keys = True , indent = indent ,
4445 separators = (',' , ': ' ), default = defaultJsonEncode )
4546
4647
4748class JsonRpcRequest (JsonRpcMessage ):
4849 '''JSON-RPC 2.0 Request object'''
49- def __init__ (self , id , method , params = None ):
50- self .id = id
51- self .method = method
52- if not params is None :
50+ def __init__ (self , reqId , method , params = None ):
51+ self .id = reqId
52+ self .method = method
53+ if params is not None :
5354 self .params = params
5455
5556
5657class JsonRpcNotification (JsonRpcRequest ):
5758 '''JSON-RPC 2.0 Notification object'''
58- def __init__ (self , method , params = None ):
59+ def __init__ (self , method , params = None ):
5960 JsonRpcRequest .__init__ (self , None , method , params )
6061 del self .id
61-
62+
6263
6364class JsonRpcSuccessResponse (JsonRpcMessage ):
6465 '''JSON-RPC 2.0 Response Object reporting request success'''
65- def __init__ (self , id , result ):
66- self .id = id
66+ def __init__ (self , reqId , result ):
67+ self .id = reqId
6768 self .result = result
6869
6970
7071class JsonRpcErrorResponse (JsonRpcMessage ):
7172 '''JSON-RPC 2.0 Response Object reporting request error.
7273 Params:
73- id -- errornous request id or None,
74- err - `JsonRpcError` object with an error data
74+ reqId -- errornous request id or None,
75+ err - `JsonRpcError` object with an error data
7576 '''
76- def __init__ (self , id , err ):
77- self .id = id
77+ def __init__ (self , reqId , err ):
78+ self .id = reqId
7879 self .error = err
7980
8081
@@ -84,8 +85,8 @@ class JsonRpcParsedType(object):
8485 REQUEST = 'REQUEST'
8586 NOTIFICATION = 'NOTIFICATION'
8687 SUCCESS = 'SUCCESS'
87- ERROR = 'ERROR'
88-
88+ ERROR = 'ERROR'
89+
8990
9091class JsonRpcParsed (object ):
9192 '''Presents a json string parse result: parsedType and payload.
@@ -94,107 +95,116 @@ class JsonRpcParsed(object):
9495 payload -- `JsonRpcMessage`'''
9596 def __init__ (self , parsedType , payload ):
9697 self .parsedType = parsedType
97- self .payload = payload
98+ self .payload = payload
9899
99100 @classmethod
100101 def Parse (cls , jsonstr ):
101- '''Parses json formatted string.
102- Raises `JsonRpcParseError` if Parse fails.
102+ '''Parses json formatted string
103+ Raises `JsonRpcParseError` if Parse fails
103104 Return a `JsonRpcParsed`.'''
104-
105+
105106 def SubHasId (jsondict ):
106- return 'id' in jsondict
107+ return 'id' in jsondict
107108
108109 def SubHasValidId (jsondict ):
109110 '''Checks if Id message field present and has valid value'''
110111
111112 isIdValid = SubHasId (jsondict ) and (not jsondict ['id' ] is None ) \
112- and (jsondict ['id' ] <> '' )
113- return isIdValid
113+ and (jsondict ['id' ] != '' )
114+ return isIdValid
114115
115116 def SubHasMethod (jsondict ):
116- return 'method' in jsondict
117+ return 'method' in jsondict
117118
118119 def SubIsMethodCorrect (jsondict ):
119120 '''Checks if "method" message field has valid value.
120121 Returns boolean'''
121- methodValid = SubHasMethod (jsondict ) and (not jsondict ['method' ] is None ) \
122+ methodValid = SubHasMethod (jsondict )\
123+ and (not jsondict ['method' ] is None )\
122124 and len (jsondict ['method' ]) > 0
123- return methodValid
125+ return methodValid
124126
125- def SubValidateHeader (jsondict ):
127+ def SubValidateHeader (jsondict ):
126128 '''Parses header and validate values.
127129 Raises `JsonRpcException` in case of error'''
128- if not 'jsonrpc' in jsondict :
130+ if 'jsonrpc' not in jsondict :
129131 raise JsonRpcException ('Message have no "jsonrpc" field' )
130- if jsondict ['jsonrpc' ] <> '2.0' :
131- raise JsonRpcException ('"jsonrpc" field value should be 2.0' )
132+ if jsondict ['jsonrpc' ] != '2.0' :
133+ raise JsonRpcException ('"jsonrpc" field value should be 2.0' )
132134
133- def SubValidateMethod (jsondict ):
135+ def SubValidateMethod (jsondict ):
134136 '''Checks if method field exists and has correct value'''
135137 if not SubHasMethod (jsondict ):
136138 raise JsonRpcException ('No "method" field' )
137139 if not SubIsMethodCorrect (jsondict ):
138- raise JsonRpcException ('Invalid "method" field value' )
140+ raise JsonRpcException ('Invalid "method" field value' )
139141
140142 def SubValidateErrorObj (errdict ):
141143 '''Checks if Error object has JSON-RPC 2.0 required fields. '''
142144 hasCode = 'code' in errdict
143145 hasMessage = 'message' in errdict
144146 if not (hasCode and hasMessage ):
145- raise JsonRpcException ('Invalid JSON-RPC 2.0 Error object structure' )
147+ raise JsonRpcException (
148+ 'Invalid JSON-RPC 2.0 Error object structure' )
146149 allowedCodes = [- 32700 ]
147150 allowedCodes = allowedCodes + [x for x in range (- 32603 , - 32599 )]
148- allowedCodes = allowedCodes + [x for x in range (- 32099 ,- 31999 )]
151+ allowedCodes = allowedCodes + [x for x in range (- 32099 , - 31999 )]
149152 if not errdict ['code' ] in allowedCodes :
150- raise JsonRpcException ('Invalid JSON-RPC 2.0 Error code' )
153+ raise JsonRpcException ('Invalid JSON-RPC 2.0 Error code' )
151154
152- def SubParseNotification (jsondict ):
153- '''Parses jsondict, validates JSON-RPC 2.0 Notification structure and values.
155+ def SubParseNotification (jsondict ):
156+ '''Parses jsondict, validates JSON-RPC 2.0 Notification structure
157+ and values.
154158 Doesn't check JSON-RPC 2.0 "jsonrpc" and "id".
155- Raises `JsonRpcParseError` if parse failed, or params invalid.'''
156- try :
157- SubValidateMethod (jsondict )
158- except JsonRpcException as e :
159+ Raises `JsonRpcParseError` if parse failed, or params invalid.'''
160+ try :
161+ SubValidateMethod (jsondict )
162+ except JsonRpcException as e :
159163 raise JsonRpcParseError (JsonRpcError .InvalidRequest (str (e )))
160164 params = jsondict .get ('params' , None )
161165 payload = JsonRpcMessage .Notification (jsondict ['method' ], params )
162- return JsonRpcParsed (JsonRpcParsedType .NOTIFICATION , payload )
166+ return JsonRpcParsed (JsonRpcParsedType .NOTIFICATION , payload )
163167
164168 def SubParseRequest (jsondict ):
165- '''Parses jsondict, validates JSON-RPC 2.0 Request structure and values.
169+ '''Parses jsondict, validates JSON-RPC 2.0 Request structure
170+ and values.
166171 Doesn't check JSON-RPC 2.0 "jsonrpc","id", "method".
167- Raises `JsonRpcParseError` if parse failed, or params invalid.'''
168- id = jsondict ['id' ]
169- method = jsondict ['method' ]
170- params = jsondict .get ('params' , None )
171- payload = JsonRpcMessage .Request (id , method , params )
172+ Raises `JsonRpcParseError` if parse failed, or params invalid.'''
173+ reqId = jsondict ['id' ]
174+ method = jsondict ['method' ]
175+ params = jsondict .get ('params' , None )
176+ payload = JsonRpcMessage .Request (reqId , method , params )
172177 return JsonRpcParsed (JsonRpcParsedType .REQUEST , payload )
173178
174179 def SubParseSuccessResponse (jsondict ):
175- '''Parses jsondict, validates JSON-RPC 2.0 Response Success structure and values.
180+ '''Parses jsondict, validates JSON-RPC 2.0 Response Success
181+ structure and values.
176182 Doesn't check JSON-RPC 2.0 "jsonrpc","id".
177183 Raises `JsonRpcParseError` if parse failed, or result invalid.
178184 Params:
179185 jsondict - object, json parsed object
180186 '''
181- payload = JsonRpcMessage .Success (jsondict ['id' ], jsondict ['result' ])
182- return JsonRpcParsed (JsonRpcParsedType .SUCCESS , payload )
187+ payload = JsonRpcMessage .Success (jsondict ['id' ],
188+ jsondict ['result' ])
189+ return JsonRpcParsed (JsonRpcParsedType .SUCCESS , payload )
183190
184191 def SubParseErrorResponse (jsondict ):
185- '''Parses jsondict, validates JSON-RPC 2.0 Response Error structure and values.
192+ '''Parses jsondict, validates JSON-RPC 2.0 Response Error
193+ structure and values.
186194 Doesn't check JSON-RPC 2.0 "jsonrpc","id".
187- Raises `JsonRpcParseError` if parse failed, or error object invalid.
195+ Raises `JsonRpcParseError` if parse failed, or error object
196+ invalid.
197+
188198 Params:
189199 jsondict - object, json parsed object
190200 '''
191- err = jsondict .get ('error' , None )
201+ err = jsondict .get ('error' , None )
192202 try :
193203 SubValidateErrorObj (err )
194- errorobj = JsonRpcError (err ['code' ], err ['message' ], \
195- err .get ('data' , None ))
204+ errorobj = JsonRpcError (err ['code' ], err ['message' ],
205+ err .get ('data' , None ))
196206 payload = JsonRpcMessage .Error (jsondict ['id' ], errorobj )
197- return JsonRpcParsed (JsonRpcParsedType .ERROR , payload )
207+ return JsonRpcParsed (JsonRpcParsedType .ERROR , payload )
198208 except JsonRpcException as e :
199209 raise JsonRpcParseError (JsonRpcError .InvalidParams (str (e )))
200210
@@ -208,12 +218,12 @@ def SubParseJsonRpcObject(jsondict):
208218 raise JsonRpcParseError (JsonRpcError .InvalidRequest (str (e )))
209219
210220 isNotification = not SubHasValidId (jsondict )
211- if isNotification :
221+ if isNotification :
212222 return SubParseNotification (jsondict )
213223
214- #else it has Id so it may be: request, success, error message
224+ # else it has Id so it may be: request, success, error message
215225 isRequest = SubIsMethodCorrect (jsondict )
216- if isRequest :
226+ if isRequest :
217227 return SubParseRequest (jsondict )
218228
219229 # no METHOD field so it may be: success, error message
@@ -228,8 +238,8 @@ def SubParseJsonRpcObject(jsondict):
228238 raise JsonRpcParseError (
229239 JsonRpcError .InvalidRequest ('No reqired fields' ))
230240 try :
231- jsondict = json .loads (jsonstr )
232- except ValueError as e :
241+ jsondict = json .loads (jsonstr )
242+ except ValueError as e :
233243 raise JsonRpcParseError (JsonRpcError .ParseError (jsonstr ))
234244 try :
235245 parsedObjInfo = SubParseJsonRpcObject (jsondict )
@@ -239,6 +249,7 @@ def SubParseJsonRpcObject(jsondict):
239249 raise JsonRpcParseError (JsonRpcError .InternalError (str (e )))
240250 return parsedObjInfo
241251
252+
242253class JsonRpcError (object ):
243254 '''Class implements JSON-RPC 2.0 Error Object.
244255 Params:
@@ -247,20 +258,20 @@ class JsonRpcError(object):
247258 data -- any type, extra info (may be ommited)
248259 '''
249260
250- def __init__ (self , code , message , data = None ):
261+ def __init__ (self , code , message , data = None ):
251262 self .code = code
252- self .message = message
253- if not data is None :
263+ self .message = message
264+ if data is not None :
254265 self .data = data
255266
256267 @classmethod
257- def Error (cls , code , message , data = None ):
268+ def Error (cls , code , message , data = None ):
258269 '''Creates common Error object.'''
259270 return JsonRpcError (code , message , data )
260271
261272 @classmethod
262- def ParseError (cls , data = None ):
263- '''Creates `JsonRpcError` instance for prdefined JSON-RPC 2.0 error.
273+ def ParseError (cls , data = None ):
274+ '''Creates `JsonRpcError` instance for prdefined JSON-RPC 2.0 error
264275 Code -32700. Invalid JSON was received by the server.
265276 An error occurred on the server while parsing the JSON text.
266277 '''
@@ -269,33 +280,33 @@ def ParseError(cls, data = None):
269280 return JsonRpcError (code , message , data )
270281
271282 @classmethod
272- def InvalidRequest (cls , data = None ):
273- '''Creates `JsonRpcError` instance for prdefined JSON-RPC 2.0 error.
283+ def InvalidRequest (cls , data = None ):
284+ '''Creates `JsonRpcError` instance for prdefined JSON-RPC 2.0 error
274285 Code -32600. The JSON sent is not a valid Request object.'''
275286 code = - 32600
276287 message = 'Invalid Request'
277288 return JsonRpcError (code , message , data )
278289
279290 @classmethod
280- def MethodNotFound (cls , data = None ):
281- '''Creates `JsonRpcError` instance for prdefined JSON-RPC 2.0 error.
291+ def MethodNotFound (cls , data = None ):
292+ '''Creates `JsonRpcError` instance for prdefined JSON-RPC 2.0 error
282293 Code -32601. The method does not exist / is not available.'''
283294 code = - 32601
284295 message = 'Method Not Found'
285296 return JsonRpcError (code , message , data )
286297
287298 @classmethod
288- def InvalidParams (cls , data = None ):
289- '''Creates `JsonRpcError` instance for prdefined JSON-RPC 2.0 error.
299+ def InvalidParams (cls , data = None ):
300+ '''Creates `JsonRpcError` instance for prdefined JSON-RPC 2.0 error
290301 Code -32602. Invalid method parameter(s).'''
291302 code = - 32602
292303 message = 'Invalid Params'
293304 return JsonRpcError (code , message , data )
294305
295306 @classmethod
296- def InternalError (cls , data = None ):
297- '''Creates `JsonRpcError` instance for prdefined JSON-RPC 2.0 error.
298- Code -32603. Internal JSON-RPC error.'''
307+ def InternalError (cls , data = None ):
308+ '''Creates `JsonRpcError` instance for prdefined JSON-RPC 2.0 error.
309+ Code -32603. Internal JSON-RPC error.'''
299310 code = - 32603
300311 message = 'Internal Error'
301312 return JsonRpcError (code , message , data )
0 commit comments