Pure Python 3 JSON-RPC 2.0 transport realisation
Project description
Pure Python 3 JSON-RPC 2.0 transport specification implementation. Supports python3.2+. Fork of json-rpc.
Documentation: http://json-rpc-3.readthedocs.org
This implementation does not have any transport functionality realization, only protocol. Any client or server realization is easy based on current code, but requires transport libraries, such as requests, gevent or zmq, see examples.
Install
pip install json-rpc-3
Tests
nosetests
Quickstart
Server (uses Werkzeug)
from datetime import datetime
from werkzeug.wrappers import Request, Response
from werkzeug.serving import run_simple
from jsonrpc import JSONRPCResponseManager, dispatcher
manager = JSONRPCResponseManager()
def dict_to_list(dictionary):
return list(dictionary.items())
@dispatcher.add_method
def simple_add(first=0, **kwargs):
return first + kwargs["second"]
def echo_with_long_name(msg):
return msg
def time_ping():
return datetime.now().isoformat()
dispatcher.add_method(time_ping)
dispatcher.add_method(echo_with_long_name, name='echo')
dispatcher['subtract'] = lambda a, b: a - b
dispatcher['dict_to_list'] = dict_to_list
@Request.application
def application(request):
response = manager.handle(request.get_data(cache=False, as_text=True), dispatcher)
return Response(response.json, mimetype='application/json')
if __name__ == '__main__':
run_simple('localhost', 4000, application)
Client (uses requests)
import json
import requests
url = "http://localhost:4000/jsonrpc"
headers = {'content-type': 'application/json'}
def print_result(payload):
response = requests.post(
url,
data=json.dumps(payload),
headers=headers
).json()
print(
r"""
{0}
{1}
""".format(payload, response))
def main():
payloads = [
{
"method": "simple_add",
"params": {"first": 17, "second": 39},
"jsonrpc": "2.0",
"id": 0,
},
{
"method": "echo",
"params": ["Hello!"],
"jsonrpc": "2.0",
"id": 1
},
{
"method": "time_ping",
"jsonrpc": "2.0",
"id": 2
},
{
"method": "dict_to_list",
"jsonrpc": "2.0",
"params": [{1: 3, 'two': 'string', 3: [5, 'list', {'c': 0.3}]}],
"id": 3
},
# Exception!
{
"method": "subtract",
"jsonrpc": "2.0",
"params": [1, 2, 3],
"id": 2
}
]
for payload in payloads:
print_result(payload)
if __name__ == "__main__":
main()
Competitors
There are several libraries implementing JSON-RPC protocol. List below represents python libraries, none of the supports python3. tinyrpc looks better than others.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for json_rpc_3-1.8.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | baf14a76607a6b7e59302cc623671ee58a09f2f3b02ef9d5abeb021b72f83f57 |
|
MD5 | 227e37066d74e34549a906ac17807de7 |
|
BLAKE2b-256 | a2ae61b8dd31c5b3798f08130ed3a37946a7fd5d948cd19070981b951bcc5c1f |