Update
This commit is contained in:
@@ -35,6 +35,18 @@ class JsonRpcException(Exception):
|
||||
return json.dumps(self.as_dict())
|
||||
|
||||
|
||||
class Method:
|
||||
def __init__(self, function = None, handler = None, fields = None):
|
||||
self.function = function
|
||||
self.handler = handler
|
||||
self.fields = fields
|
||||
|
||||
def __call__(self, queries):
|
||||
if self.handler is None:
|
||||
return self.function()
|
||||
return self.function()
|
||||
|
||||
|
||||
class JSONRPC:
|
||||
"""Основной класс JSON-RPC
|
||||
"""
|
||||
@@ -85,7 +97,7 @@ class JSONRPC:
|
||||
return None
|
||||
func = self.methods[name]
|
||||
sig = signature(func)
|
||||
params = {}
|
||||
params = None
|
||||
for key in sig.parameters:
|
||||
params[key] = ''
|
||||
result = {
|
||||
@@ -119,29 +131,32 @@ class JSONRPC:
|
||||
"""Выполнение метода
|
||||
"""
|
||||
self.validate(query)
|
||||
method = query['method']
|
||||
if method not in self.methods:
|
||||
name = query['method']
|
||||
if name not in self.methods:
|
||||
return JsonRpcException(
|
||||
query['id'],
|
||||
METHOD_NOT_FOUND,
|
||||
f'Метод не найден: {method}'
|
||||
f'Метод не найден: {name}'
|
||||
).as_dict()
|
||||
|
||||
func = self.methods[method]
|
||||
method = self.methods[name]
|
||||
|
||||
if 'params' not in query:
|
||||
params = {}
|
||||
else:
|
||||
params = None
|
||||
if 'params' in query:
|
||||
params = query['params']
|
||||
# for key in params:
|
||||
# print(f'{key}: {type(params[key]).__name__} = {params[key]}')
|
||||
logging.debug('params: {}'.format(params))
|
||||
logging.debug('params: {}'.format(params))
|
||||
|
||||
try:
|
||||
if isinstance(params, (tuple, set, list)):
|
||||
response = func(*params)
|
||||
if method.handler is None:
|
||||
pass
|
||||
if isinstance(params, list):
|
||||
response = method.function(*params)
|
||||
elif isinstance(params, dict):
|
||||
response = func(**params)
|
||||
response = method.function(**params)
|
||||
elif isinstance(params, NoneType):
|
||||
response = method.function()
|
||||
else:
|
||||
return JsonRpcException(
|
||||
query['id'],
|
||||
@@ -185,8 +200,9 @@ class JSONRPC:
|
||||
def __len__(self):
|
||||
return len(self.methods)
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
self.methods[key] = value
|
||||
def __setitem__(self, key, function, handler = None, fields = None):
|
||||
method = Method(function = function, handler = None, fields = None)
|
||||
self.methods[key] = function
|
||||
|
||||
def __delitem__(self, key):
|
||||
del self.methods[key]
|
||||
|
||||
Reference in New Issue
Block a user