Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

JSON-RPC transport implementation

Project Description

JSON-RPC2.0 and JSON-RPC1.0 transport specification implementation. Supports Python 2.6+, Python 3.3+, PyPy. Has optional Django and Flask support. 200+ tests.

Features

This implementation does not have any transport functionality realization, only protocol. Any client or server implementation is easy based on current code, but requires transport libraries, such as requests, gevent or zmq, see examples.

  • Vanilla Python, no dependencies.
  • 200+ tests for multiple edge cases.
  • Optional backend support for Django, Flask.
  • json-rpc 1.1 and 2.0 support.

Install

pip install json-rpc

Tests

Quickstart

This is an essential part of the library as there are a lot of edge cases in JSON-RPC standard. To manage a variety of supported python versions as well as optional backends json-rpc uses tox:

tox

Tip

During local development use your python version with tox runner. For example, if your are using Python 3.6 run tox -e py36. It is easier to develop functionality for specific version first and then expands it to all of the supported versions.

Continuous integration

This project uses Travis for continuous integration. All of the python supported versions are managed via tox.ini and .travis.yml files. Only master and develop branches are tested. Master branch test status is displayed on the badge in the beginning of this document.

Test matrix

json-rpc supports multiple python versions: 2.6+, 3.3+, pypy. This introduces difficulties with testing libraries and optional dependencies management. For example, python before version 3.3 does not support mock and there is a limited support for unittest2. Every dependency translates into if-then blocks in the source code and adds complexity to it. Hence, while cross-python support is a core feature of this library, cross-Django or cross-Flask support is limited. In general, json-rpc uses latest stable release which supports current python version. For example, python 2.6 is compatible with Django 1.6 and not compatible with any future versions.

Below is a testing matrix:

Python Tests mock unittest Django Flask
2.6 nose 2.0.0 unittest2 1.6 0.12.2
2.7 nose2 2.0.0   1.11 0.12.2
3.3 nose2     1.11 0.12.2
3.4 nose2     1.11 0.12.2
3.5 nose2     1.11 0.12.2
3.6 nose2     1.11 0.12.2
pypy nose2 2.0.0   1.11 0.12.2
pypy3 nose2     1.11 0.12.2

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.

Release History

Release History

This version
History Node

1.10.8

History Node

1.10.7

History Node

1.10.6

History Node

1.10.5

History Node

1.10.4

History Node

1.10.3

History Node

1.10.2

History Node

1.10.1

History Node

1.9.2

History Node

1.9.1

History Node

1.9.0

History Node

1.8.4

History Node

1.8.3

History Node

1.8.2

History Node

1.8.1

History Node

1.8.0

History Node

1.7.0

History Node

1.6.0

History Node

1.5.0

History Node

1.4.0

History Node

1.3.0

History Node

1.2.1

History Node

1.2

History Node

1.1

History Node

1.1.rc2

History Node

1.1.rc1

History Node

1.0.6

History Node

1.0.5

History Node

1.0.4

History Node

1.0.3

History Node

1.0.2

History Node

1.0.1

History Node

1.0.0

History Node

0.9.3

History Node

0.9.2

History Node

0.9.1

History Node

0.2.3

History Node

0.2.2

History Node

0.2.1

History Node

0.2

History Node

0.1.0

History Node

0.1

Download Files

Download Files

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

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
json_rpc-1.10.8-py2.py3-none-any.whl (40.2 kB) Copy SHA256 Checksum SHA256 2.7 Wheel Nov 3, 2017
json-rpc-1.10.8.tar.gz (29.3 kB) Copy SHA256 Checksum SHA256 Source Nov 3, 2017

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting