Coder Social home page Coder Social logo

lin-calvin / json-rpc Goto Github PK

View Code? Open in Web Editor NEW

This project forked from pavlov99/json-rpc

0.0 0.0 0.0 343 KB

🔁 JSON-RPC 1/2 transport implementation. Supports python 2/3 and pypy.

Home Page: http://json-rpc.readthedocs.org

License: MIT License

Python 99.67% Makefile 0.33%

json-rpc's Introduction

json-rpc

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

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 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.

json-rpc's People

Contributors

pavlov99 avatar matee911 avatar proofit404 avatar xnox avatar smagafurov avatar lin-calvin avatar durden avatar liminspace avatar ppena-livedata avatar jw avatar vasilcovsky avatar bitdeli-chef avatar arnuschky avatar tacone avatar sergio-bershadsky avatar dropwhile avatar gitter-badger avatar sethrh avatar pipermerriam avatar mikepurvis avatar mattfisher avatar lmazuel avatar jcbohin avatar giorgosxou avatar ghisvail avatar dtran320 avatar cjerdonek avatar acatton avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.