You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					188 lines
				
				8.3 KiB
			
		
		
			
		
	
	
					188 lines
				
				8.3 KiB
			| 
											7 years ago
										 | Metadata-Version: 1.1
 | ||
|  | Name: json-rpc
 | ||
|  | Version: 1.12.1
 | ||
|  | Summary: JSON-RPC transport implementation
 | ||
|  | Home-page: https://github.com/pavlov99/json-rpc
 | ||
|  | Author: Kirill Pavlov
 | ||
|  | Author-email: k@p99.io
 | ||
|  | License: MIT
 | ||
|  | Description: json-rpc
 | ||
|  |         ========
 | ||
|  |         
 | ||
|  |         .. image:: https://circleci.com/gh/pavlov99/json-rpc/tree/master.svg?style=svg
 | ||
|  |             :target: https://circleci.com/gh/pavlov99/json-rpc/tree/master
 | ||
|  |             :alt: Build Status
 | ||
|  |         
 | ||
|  |         .. image:: https://codecov.io/gh/pavlov99/json-rpc/branch/master/graph/badge.svg
 | ||
|  |             :target: https://codecov.io/gh/pavlov99/json-rpc
 | ||
|  |             :alt: Coverage Status
 | ||
|  |         
 | ||
|  |         .. image:: https://readthedocs.org/projects/json-rpc/badge/?version=latest
 | ||
|  |             :target: http://json-rpc.readthedocs.io/en/latest/?badge=latest
 | ||
|  |         
 | ||
|  |         .. image:: https://img.shields.io/pypi/v/json-rpc.svg
 | ||
|  |             :target: https://pypi.org/project/json-rpc/
 | ||
|  |             :alt: Latest PyPI version
 | ||
|  |         
 | ||
|  |         .. image:: https://img.shields.io/pypi/pyversions/json-rpc.svg
 | ||
|  |             :target: https://pypi.org/project/json-rpc/
 | ||
|  |             :alt: Supported Python versions
 | ||
|  |         
 | ||
|  |         .. image:: https://badges.gitter.im/pavlov99/json-rpc.svg
 | ||
|  |             :target: https://gitter.im/pavlov99/json-rpc
 | ||
|  |             :alt: Gitter
 | ||
|  |         
 | ||
|  |         
 | ||
|  |         .. image:: https://opencollective.com/json-rpc/tiers/backer/badge.svg?label=backer&color=brightgreen
 | ||
|  |             :target: https://opencollective.com/json-rpc
 | ||
|  |             :alt: Bakers
 | ||
|  |         
 | ||
|  |         .. image:: https://opencollective.com/json-rpc/tiers/backer/badge.svg?label=sponsor&color=brightgreen
 | ||
|  |             :target: https://opencollective.com/json-rpc
 | ||
|  |             :alt: Sponsors
 | ||
|  |         
 | ||
|  |         `JSON-RPC2.0 <http://www.jsonrpc.org/specification>`_ and `JSON-RPC1.0 <http://json-rpc.org/wiki/specification>`_ 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 <https://github.com/pavlov99/json-rpc/tree/master/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
 | ||
|  |         -------
 | ||
|  |         
 | ||
|  |         .. code-block:: python
 | ||
|  |         
 | ||
|  |             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`:
 | ||
|  |         
 | ||
|  |         .. code-block:: bash
 | ||
|  |         
 | ||
|  |             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 <https://circleci.com/>`_ 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 <http://werkzeug.pocoo.org/>`_)
 | ||
|  |         
 | ||
|  |         .. code-block:: python
 | ||
|  |         
 | ||
|  |             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 <http://www.python-requests.org/en/latest/>`_)
 | ||
|  |         
 | ||
|  |         .. code-block:: python
 | ||
|  |         
 | ||
|  |             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 <http://en.wikipedia.org/wiki/JSON-RPC#Implementations>`_ implementing JSON-RPC protocol. List below represents python libraries, none of the supports python3. tinyrpc looks better than others.
 | ||
|  |         
 | ||
|  | Platform: UNKNOWN
 | ||
|  | Classifier: Development Status :: 5 - Production/Stable
 | ||
|  | Classifier: Environment :: Console
 | ||
|  | Classifier: License :: OSI Approved :: MIT License
 | ||
|  | Classifier: Natural Language :: English
 | ||
|  | Classifier: Operating System :: OS Independent
 | ||
|  | Classifier: Programming Language :: Python :: 2.6
 | ||
|  | Classifier: Programming Language :: Python :: 2.7
 | ||
|  | Classifier: Programming Language :: Python :: 3.3
 | ||
|  | Classifier: Programming Language :: Python :: 3.4
 | ||
|  | Classifier: Programming Language :: Python :: 3.5
 | ||
|  | Classifier: Programming Language :: Python :: 3.6
 | ||
|  | Classifier: Programming Language :: Python :: 3.7
 | ||
|  | Classifier: Programming Language :: Python :: Implementation :: PyPy
 | ||
|  | Classifier: Topic :: Software Development :: Libraries :: Python Modules
 |