Skip to content
forked from pavlov99/json-rpc

jsonrpc transport implementation, supports python2/3 and pypy.

License

Notifications You must be signed in to change notification settings

AVOstap/json-rpc

 
 

Repository files navigation

json-rpc

Join the chat at https://gitter.im/pavlov99/json-rpc Build Status Coverage Status https://www.codacy.com/project/badge/34e0c2c696214041ae4fd5cfcb4af401

JSON-RPC2.0 and JSON-RPC1.0 transport specification implementation. Supports python2.6+, python3.3+, PyPy. Has optional Django and Flask support. 200+ tests.

Documentation: http://json-rpc.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

Tests

tox

Features

  • Vanilla python, no dependencies
  • Optional backend support for Django, Flask
  • json-rpc 1.1 and 2.0 support

Quickstart

Server (uses Werkzeug)

from werkzeug.wrappers import Request, Response
from werkzeug.serving import run_simple

from jsonrpc import JSONRPCResponseManager, dispatcher


@dispatcher.add_method
def foobar(**kwargs):
    return kwargs["foo"] + kwargs["bar"]


@Request.application
def application(request):
    # Dispatcher is dictionary {<method_name>: callable}
    dispatcher["echo"] = lambda s: s
    dispatcher["add"] = lambda a, b: a + b

    response = JSONRPCResponseManager.handle(
        request.data, dispatcher)
    return Response(response.json, mimetype='application/json')


if __name__ == '__main__':
    run_simple('localhost', 4000, application)

Client (uses requests)

import requests
import json


def main():
    url = "http://localhost:4000/jsonrpc"
    headers = {'content-type': 'application/json'}

    # Example echo method
    payload = {
        "method": "echo",
        "params": ["echome!"],
        "jsonrpc": "2.0",
        "id": 0,
    }
    response = requests.post(
        url, data=json.dumps(payload), headers=headers).json()

    assert response["result"] == "echome!"
    assert response["jsonrpc"]
    assert response["id"] == 0

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.

Testing

json-rpc is a python library, it supports pythons: 2.6, 2.7, 3.3, 3.4. There is optional support for django1.6 (python2.6 does not support django1.7).

Contributors

About

jsonrpc transport implementation, supports python2/3 and pypy.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 99.2%
  • Makefile 0.8%