Skip to main content

JSON-RPC transport implementation

Project description

Build Status Coverage Status https://readthedocs.org/projects/json-rpc/badge/?version=latest Latest PyPI version Supported Python versions Gitter Bakers Sponsors

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

Continuous integration

This project uses CircleCI for continuous integration. All of the python supported versions are managed via tox.ini and .circleci/config.yml files. 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

mock

unittest

Django

Flask

2.6

2.0.0

unittest2

1.6

0.12.2

2.7

2.0.0

1.11

0.12.2

3.3

1.11

0.12.2

3.4

1.11

0.12.2

3.5

1.11

0.12.2

3.6

1.11

0.12.2

pypy

2.0.0

1.11

0.12.2

pypy3

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"

    # Example echo method
    payload = {
        "method": "echo",
        "params": ["echome!"],
        "jsonrpc": "2.0",
        "id": 0,
    }
    response = requests.post(url, json=payload).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.

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

json-rpc-stateful-1.13.1.linux-x86_64.tar.gz (71.9 kB view details)

Uploaded Source

Built Distribution

json_rpc_stateful-1.13.1-py2.py3-none-any.whl (39.1 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file json-rpc-stateful-1.13.1.linux-x86_64.tar.gz.

File metadata

File hashes

Hashes for json-rpc-stateful-1.13.1.linux-x86_64.tar.gz
Algorithm Hash digest
SHA256 5e3a9847deddcf7476f6dc68a7240d0909a567ea1ee451e81bcc7dbf9a177c2e
MD5 daff8bd00c8f1f8c112fbd1d22b3f8b2
BLAKE2b-256 357ce6f0735647eb3cd2e16330183526341767dfca49eb7a71d40e62157d7bdb

See more details on using hashes here.

File details

Details for the file json_rpc_stateful-1.13.1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for json_rpc_stateful-1.13.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 cc749916039f545f628cfa349617316c24c3f04c01e4141d23114f7314051223
MD5 587709c3be6f34b568f938ed52119539
BLAKE2b-256 91f27493fe8e86a4e0f19615d6ef4927dc998454e41e9353103f73a0f8e7f756

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page