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
							 |