Update
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "jsonrpc"
|
||||
version = "2.0"
|
||||
version = "3.0"
|
||||
authors = [
|
||||
{ name="RemiZOffAlex", email="remizoffalex@gmail.com" },
|
||||
]
|
||||
|
||||
@@ -11,20 +11,6 @@ from .exceptions import *
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Response:
|
||||
def __init__(self, id: int, result):
|
||||
self.id = id
|
||||
self.result = result
|
||||
|
||||
def __json__(self):
|
||||
response = {
|
||||
"jsonrpc": "3.0",
|
||||
"result": self.result,
|
||||
"id": self.id,
|
||||
}
|
||||
return response
|
||||
|
||||
|
||||
class Method:
|
||||
def __init__(self, function, middlewares=None, debug: bool = False):
|
||||
self.function = function
|
||||
@@ -71,11 +57,6 @@ class Method:
|
||||
return '<{}>'.format(self.function)
|
||||
|
||||
|
||||
class Wrapper:
|
||||
def __init__(self, func):
|
||||
self.func = func
|
||||
|
||||
|
||||
class JSONRPC:
|
||||
"""Основной класс JSON-RPC
|
||||
"""
|
||||
@@ -177,8 +158,6 @@ class JSONRPC:
|
||||
response = method(query)
|
||||
except JSONRPCError as e:
|
||||
log.error(traceback.format_exc())
|
||||
# print(traceback.format_exc())
|
||||
# response = traceback.format_exc()
|
||||
response = InternalError(
|
||||
id=query['id'],
|
||||
message=str(e)
|
||||
@@ -192,10 +171,11 @@ class JSONRPC:
|
||||
# message=traceback.format_exc()
|
||||
)
|
||||
else:
|
||||
response = Response(
|
||||
id=query['id'],
|
||||
result=response
|
||||
)
|
||||
response = {
|
||||
"jsonrpc": query['jsonrpc'],
|
||||
"id": query['id'],
|
||||
"result": response
|
||||
}
|
||||
result = response
|
||||
return result
|
||||
|
||||
|
||||
@@ -6,10 +6,11 @@ import logging
|
||||
import pathlib
|
||||
import aiohttp_jinja2
|
||||
|
||||
from aiohttp.web import Response, json_response
|
||||
from aiohttp.web import Response
|
||||
|
||||
from .. import JSONRPC
|
||||
from ..exceptions import ParseError
|
||||
from ..serialize import JSONRPCEncoder
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@@ -39,7 +40,13 @@ class APIHandler:
|
||||
try:
|
||||
json_data = await request.json()
|
||||
result = self.jsonrpc(json_data)
|
||||
return json_response(result)
|
||||
body = json.dumps(result, cls=JSONRPCEncoder)
|
||||
response = Response(
|
||||
text=body,
|
||||
status=200,
|
||||
content_type='application/json'
|
||||
)
|
||||
return response
|
||||
except ValueError as e:
|
||||
log.error('invalid json: %s', request_data)
|
||||
log.exception(e)
|
||||
|
||||
@@ -16,22 +16,21 @@ class Client:
|
||||
debug: bool = False
|
||||
):
|
||||
self.url = url
|
||||
self.headers = {'content-type': 'application/json'}
|
||||
self.debug = debug
|
||||
|
||||
def __call__(self, queries):
|
||||
"""Вызов метода
|
||||
"""
|
||||
if isinstance(queries, str):
|
||||
payload = queries
|
||||
elif isinstance(queries, dict | list):
|
||||
payload = json.dumps(queries)
|
||||
elif isinstance(queries, dict | list):
|
||||
payload = queries
|
||||
response = requests.post(
|
||||
self.url,
|
||||
data=payload,
|
||||
headers=self.headers
|
||||
json=payload
|
||||
)
|
||||
if self.debug:
|
||||
log.debug('status_code', response.status_code)
|
||||
log.debug('content', response.content)
|
||||
result = response.json()
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ __author__ = 'RemiZOffAlex'
|
||||
__email__ = 'remizoffalex@mail.ru'
|
||||
|
||||
import unittest
|
||||
from uuid import uuid4
|
||||
|
||||
from jsonrpc import JSONRPC
|
||||
|
||||
@@ -19,29 +20,36 @@ class Calc(unittest.TestCase):
|
||||
def test_example(self):
|
||||
self.assertEqual(
|
||||
jsonrpc.example('boo'),
|
||||
{'jsonrpc': '2.0', 'method': 'boo', 'id': 1}
|
||||
{
|
||||
'jsonrpc': '3.0',
|
||||
'method': 'boo',
|
||||
'id': '00000000-0000-0000-0000-000000000000'
|
||||
}
|
||||
)
|
||||
|
||||
def test_evaluate(self):
|
||||
request = {'jsonrpc': '2.0', 'method': 'boo', 'id': 1}
|
||||
id = str(uuid4())
|
||||
request = {'jsonrpc': '3.0', 'method': 'boo', 'id': id}
|
||||
response = jsonrpc(request)
|
||||
self.assertEqual(
|
||||
response,
|
||||
{'jsonrpc': '2.0', 'result': 'Welcome to JSON-RPC', 'id': 1}
|
||||
{'jsonrpc': '3.0', 'result': 'Welcome to JSON-RPC', 'id': id}
|
||||
)
|
||||
|
||||
def test_error(self):
|
||||
request = {'jsonrpc': '2.0', 'method': 'bla-bla', 'id': 1}
|
||||
id = str(uuid4())
|
||||
request = {'jsonrpc': '3.0', 'method': 'bla-bla', 'id': id}
|
||||
response = jsonrpc(request)
|
||||
print('test_error.response', response)
|
||||
print(response)
|
||||
self.assertEqual(
|
||||
response,
|
||||
{
|
||||
'jsonrpc': '2.0',
|
||||
'jsonrpc': '3.0',
|
||||
'error': {
|
||||
'code': -32601,
|
||||
'code': 'internal.error',
|
||||
'message': 'Метод не найден: bla-bla'
|
||||
},
|
||||
'id': 1
|
||||
'id': id
|
||||
}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user