+24
-5
@@ -11,6 +11,25 @@ from .exceptions import *
|
|||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def __handler_execute(handler, query):
|
||||||
|
params = None
|
||||||
|
if 'params' in query:
|
||||||
|
params = query['params']
|
||||||
|
if params is None:
|
||||||
|
response = handler()
|
||||||
|
elif isinstance(params, list):
|
||||||
|
response = handler(*params)
|
||||||
|
elif isinstance(params, dict):
|
||||||
|
response = handler(**params)
|
||||||
|
else:
|
||||||
|
raise InvalidParamsError(
|
||||||
|
id=query['id'],
|
||||||
|
message='Invalid params: {0}'.format(params)
|
||||||
|
)
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
class RPC:
|
class RPC:
|
||||||
"""Основной класс RPC
|
"""Основной класс RPC
|
||||||
"""
|
"""
|
||||||
@@ -94,7 +113,7 @@ class RPC:
|
|||||||
)
|
)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def process(self, query):
|
def __execute(self, query):
|
||||||
"""Выполнение метода
|
"""Выполнение метода
|
||||||
"""
|
"""
|
||||||
result = self.validate(query)
|
result = self.validate(query)
|
||||||
@@ -103,7 +122,7 @@ class RPC:
|
|||||||
name = query['method']
|
name = query['method']
|
||||||
if name not in self.__handlers:
|
if name not in self.__handlers:
|
||||||
result = MethodNotFoundError(
|
result = MethodNotFoundError(
|
||||||
message=f'Метод не найден: {name}',
|
message=f'Метод {name} не найден',
|
||||||
id=query['id']
|
id=query['id']
|
||||||
)
|
)
|
||||||
return result
|
return result
|
||||||
@@ -111,7 +130,7 @@ class RPC:
|
|||||||
handler = self.__handlers[name]
|
handler = self.__handlers[name]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = handler(query)
|
response = __handler_execute(handler, query)
|
||||||
except JSONRPCError as e:
|
except JSONRPCError as e:
|
||||||
log.error(traceback.format_exc())
|
log.error(traceback.format_exc())
|
||||||
response = InternalError(
|
response = InternalError(
|
||||||
@@ -139,11 +158,11 @@ class RPC:
|
|||||||
"""Вызов метода
|
"""Вызов метода
|
||||||
"""
|
"""
|
||||||
if isinstance(queries, dict):
|
if isinstance(queries, dict):
|
||||||
result = self.process(queries)
|
result = self.__execute(queries)
|
||||||
elif isinstance(queries, list):
|
elif isinstance(queries, list):
|
||||||
result = []
|
result = []
|
||||||
for query in queries:
|
for query in queries:
|
||||||
response = self.process(query)
|
response = self.__execute(query)
|
||||||
if response:
|
if response:
|
||||||
result.append(response)
|
result.append(response)
|
||||||
return result
|
return result
|
||||||
|
|||||||
Reference in New Issue
Block a user