skip to navigation
skip to content

Not Logged In

json-rpc-3 1.8.1

Pure Python 3 JSON-RPC 2.0 transport realisation

Latest Version: 1.8.4

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.

 
File Type Py Version Uploaded on Size
json-rpc-3-1.8.1.tar.gz (md5) Source 2014-06-24 14KB
json_rpc_3-1.8.1-py3-none-any.whl (md5) Python Wheel 3.4 2014-06-24 20KB
  • Downloads (All Versions):
  • 24 downloads in the last day
  • 201 downloads in the last week
  • 1506 downloads in the last month