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