Skip to main content

Pure Python 3 JSON-RPC 2.0 transport realisation

Project description

Build Status Coverage Status Version Downloads Download format License

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


Release history Release notifications

History Node

1.8.4

History Node

1.8.3

This version
History Node

1.8.2

History Node

1.8.1

History Node

1.7.4

History Node

1.7.3

History Node

1.7.2

History Node

1.7.1

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
json_rpc_3-1.8.2-py3-none-any.whl (20.7 kB) Copy SHA256 hash SHA256 Wheel 3.4 Jun 25, 2014
json-rpc-3-1.8.2.tar.gz (15.3 kB) Copy SHA256 hash SHA256 Source None Jun 25, 2014

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page