{ "info": { "author": "Niko Wenselowski", "author_email": "niko@nerdno.de", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Affero General Public License v3", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3 :: Only" ], "description": "# \ud83d\udc0d\ud83c\udf2a\ufe0f tornado-jsonrpc2\n\n[![Build Status](https://travis-ci.com/okin/tornado-jsonrpc2.svg?branch=development)](https://travis-ci.com/okin/tornado-jsonrpc2)\n[![codecov](https://codecov.io/gh/okin/tornado-jsonrpc2/branch/development/graph/badge.svg)](https://codecov.io/gh/okin/tornado-jsonrpc2)\n\nA [JSON-RPC](https://www.jsonrpc.org/) request handler for [Tornado](https://www.tornadoweb.org/).\n\nIt follows the specifications for [JSON-RPC 2.0](https://www.jsonrpc.org/specification) and [1.0](https://www.jsonrpc.org/specification_v1).\nDifferences between the versions are described [here](http://www.simple-is-better.org/rpc/#differences-between-1-0-and-2-0) in short form.\nBy default both versions will be handled and answers are made according to the version detected for the request.\n\nThe aim is to have a spec-compliant handler that can be set up in a flexible way.\n\n\n## Requirements\n\nThe current requirement for this is to have at least Python 3.6 and Tornado 5.\n\n\n### Python\n\nThe usage of `json.JSONDecodeError` leads to the minimum version Python 3.6.\n\nThe usage of `async` / `await` means the lowest ever supported version will be Python 3.5.\nWhile currently not in focus having this running on Python 3.5 may become an option.\n\n\n## Usage\n\nTo allow for flexible configuration the `JSONRPCHandler` will have to be passed a parameter `response_creator` which takes an callable that the request in form will get passed to.\nThe request is an instance of `tornado_jsonrpc2.jsonrpc.JSONRPCRequest` with the attributes `method` and `params` (and `id` and `version` should they be required).\n\nThe following example shows how this can be used to execute methods on a backend instance.\nBy using functools we are able to create a function that only requires the request as an parameter.\n\n\n```Python\nimport functools\nimport tornado.web\n\nfrom tornado_jsonrpc2.handler import JSONRPCHandler\nfrom tornado_jsonrpc2.exceptions import MethodNotFound\n\n\nclass MyBackend:\n def subtract(self, minuend, subtrahend):\n return minuend - subtrahend\n\n\nasync def create_response(request, backend):\n try:\n method = getattr(backend, request.method)\n except AttributeError:\n raise MethodNotFound(\"Method {!r} not found!\".format(request.method))\n\n try:\n params = request.params\n except AttributeError:\n return method()\n\n if isinstance(params, list):\n return method(*params)\n elif isinstance(params, dict):\n return method(**params)\n\n\ndef make_app():\n simple_creator = functools.partial(create_response,\n backend=MyBackend())\n\n return tornado.web.Application([\n (r\"/jsonrpc\", JSONRPCHandler, {\"response_creator\": simple_creator}),\n ])\n\n\nif __name__ == \"__main__\":\n app = make_app()\n app.listen(8888)\n tornado.ioloop.IOLoop.current().start()\n```\n\nYou can access this example app on port 8888 with curl:\n\n```\n$ curl --insecure --data '{\"jsonrpc\": \"2.0\", \"method\": \"subtract\", \"params\": [5, 1], \"id\": 1}' http://localhost:8888/jsonrpc\n\n{\"jsonrpc\": \"2.0\", \"id\": 1, \"result\": 4}\n```\n\nYou can also name the parameters:\n```\n$ curl --insecure --data '{\"jsonrpc\": \"2.0\", \"method\": \"subtract\", \"params\": {\"minuend\": 5, \"subtrahend\": 1}, \"id\": 1}' http://localhost:8888/jsonrpc\n\n{\"jsonrpc\": \"2.0\", \"id\": 1, \"result\": 4}\n```\n\n\n### Handling specific JSON-RPC versions\n\nBy default the handler will process JSON-RPC 1.0 and 2.0.\nIt is possible to configure the handler to only work with one specific\nversion by adding a key _version_ with the value `\"1.0\"` or `\"2.0\"` to\nthe route spec.\n\nThe following example adds a specific route for each version:\n```Python\ndef make_app():\n simple_creator = functools.partial(create_response,\n backend=MyBackend())\n\n return tornado.web.Application([\n (r\"/jsonrpc\", JSONRPCHandler, {\"response_creator\": simple_creator}),\n (r\"/jsonrpc1\", JSONRPCHandler, {\"version\": \"1.0\",\n \"response_creator\": simple_creator}),\n (r\"/jsonrpc2\", JSONRPCHandler, {\"version\": \"2.0\",\n \"response_creator\": simple_creator}),\n ])\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/okin/tornado-jsonrpc2", "keywords": "tornado jsonrpc jsonrpc2 rpc json requesthandler", "license": "", "maintainer": "", "maintainer_email": "", "name": "tornado-jsonrpc2", "package_url": "https://pypi.org/project/tornado-jsonrpc2/", "platform": "", "project_url": "https://pypi.org/project/tornado-jsonrpc2/", "project_urls": { "Homepage": "https://github.com/okin/tornado-jsonrpc2", "Source": "https://github.com/okin/tornado-jsonrpc2" }, "release_url": "https://pypi.org/project/tornado-jsonrpc2/0.5/", "requires_dist": [ "tornado (>=5.0)", "pytest-tornado (>=0.7) ; extra == 'test'" ], "requires_python": ">=3.6", "summary": "JSON-RPC request handler for Tornado.", "version": "0.5" }, "last_serial": 5213896, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "274e7e4b5ed0d94f23e072615df32f09", "sha256": "7610b6a2bb98c66a07e54343cccf8f0c2e617bca5f2502485c71cc8b6618d9c8" }, "downloads": -1, "filename": "tornado_jsonrpc2-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "274e7e4b5ed0d94f23e072615df32f09", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 17796, "upload_time": "2018-11-13T22:20:12", "url": "https://files.pythonhosted.org/packages/e8/3e/c68fc86684e05b460b18c38356fada80c5ee02663d38392862ec0a15a867/tornado_jsonrpc2-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "73e76cb429ee2549606ee6d8bc56cfa7", "sha256": "9e38c62c6c5101920af2ed4294c69673a0c583243c397208e2e2578cf9c4338e" }, "downloads": -1, "filename": "tornado-jsonrpc2-0.1.tar.gz", "has_sig": false, "md5_digest": "73e76cb429ee2549606ee6d8bc56cfa7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4933, "upload_time": "2018-11-13T22:20:14", "url": "https://files.pythonhosted.org/packages/63/ef/085ea5fb40417ffc03ad129300a53a70b1f92faf991af12e25a1c8c6b9e2/tornado-jsonrpc2-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "a0b886c436f47cf70d3283795678f440", "sha256": "8a69a5b18f5e9dd1cef8f8181393715070c8ca1681d7c86488c1fe9697739d7a" }, "downloads": -1, "filename": "tornado_jsonrpc2-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a0b886c436f47cf70d3283795678f440", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6610, "upload_time": "2018-11-19T20:53:33", "url": "https://files.pythonhosted.org/packages/7a/f9/a2cf12688f2a33f97e42ffc83cac1f464969252c8ee3b55a6429fa0f0fff/tornado_jsonrpc2-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e2dc629e2bacd1dc3ef35222e5c4a14d", "sha256": "fe1c53857dac68a13a7c02b8320318e4c6fa0ec4e08ca144284a011482ae7210" }, "downloads": -1, "filename": "tornado-jsonrpc2-0.2.tar.gz", "has_sig": false, "md5_digest": "e2dc629e2bacd1dc3ef35222e5c4a14d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5701, "upload_time": "2018-11-19T20:53:35", "url": "https://files.pythonhosted.org/packages/0a/0b/7809c5762ced2288e83f6444b4148c615e39ff6b027da57a3c84c4119f16/tornado-jsonrpc2-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "7de8b1d5d2b6d3e92ff44a685640ae38", "sha256": "463b1b77754b16016d02262b0ef9e68bfe910ddd08f451465117696529b927d7" }, "downloads": -1, "filename": "tornado_jsonrpc2-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "7de8b1d5d2b6d3e92ff44a685640ae38", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6784, "upload_time": "2018-11-28T13:59:58", "url": "https://files.pythonhosted.org/packages/a6/f2/d1e255b938c694c0bd664f2d90a97aa9f6b84893abd7bbfab0fd0fff899b/tornado_jsonrpc2-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5238c1a79d86e31332492246cae50dd2", "sha256": "2ab49ea57872ee61479468227f2efd96eb92b78e17f727eb630ab404c623c214" }, "downloads": -1, "filename": "tornado-jsonrpc2-0.3.tar.gz", "has_sig": false, "md5_digest": "5238c1a79d86e31332492246cae50dd2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5903, "upload_time": "2018-11-28T13:59:59", "url": "https://files.pythonhosted.org/packages/ae/f9/1d4dd7c63375b8206ba119f12d1694c2af3999687bf0fc696967a75332d2/tornado-jsonrpc2-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "9ab45018cb7ff4a8fe6140911f4b8d92", "sha256": "912a35c68f3484c3373eaeeffe491bfc2686bad2a2fb79a1a8f1c7b2ee695025" }, "downloads": -1, "filename": "tornado_jsonrpc2-0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "9ab45018cb7ff4a8fe6140911f4b8d92", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 47284, "upload_time": "2019-03-16T20:10:11", "url": "https://files.pythonhosted.org/packages/b4/cb/e18d6e8f1ec6b269fbb4a7819005f5223ec77ec47bf051a5f96b64624063/tornado_jsonrpc2-0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d2436f724ea1ec9c3a36fcdaa51d0efe", "sha256": "39794b340eb4cb2d475ab1c069c0ab27dbce817386d406cd0780d1bf6625a19b" }, "downloads": -1, "filename": "tornado-jsonrpc2-0.4.tar.gz", "has_sig": false, "md5_digest": "d2436f724ea1ec9c3a36fcdaa51d0efe", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 15358, "upload_time": "2019-03-16T20:10:09", "url": "https://files.pythonhosted.org/packages/ef/82/11602afd6cbf64b43eaaf298a406adce9fe71ad7eabffd92ed60bafe3d88/tornado-jsonrpc2-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "60bc3f1b7664ff344904dea83ca3dca4", "sha256": "0da80a3a5fb75ce04950cae8a67aa85075f709379e7c0325c244f1ec6df0b918" }, "downloads": -1, "filename": "tornado_jsonrpc2-0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "60bc3f1b7664ff344904dea83ca3dca4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 18942, "upload_time": "2019-05-01T19:19:39", "url": "https://files.pythonhosted.org/packages/96/6b/9221f50eae28858dfccce6cc931d8b44e450109c17571a3b231173910898/tornado_jsonrpc2-0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aff25373f38fa491886cd1fd0348d2a3", "sha256": "cb37bbeefec0ecb2a3cd7902dcfa4b7f45c701bf56f759d6aeb842445163b770" }, "downloads": -1, "filename": "tornado-jsonrpc2-0.5.tar.gz", "has_sig": false, "md5_digest": "aff25373f38fa491886cd1fd0348d2a3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 6016, "upload_time": "2019-05-01T19:19:41", "url": "https://files.pythonhosted.org/packages/a3/60/d9010369b7b15c355b2a43d3413655e8ada327a4db2566e88c82d71425aa/tornado-jsonrpc2-0.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "60bc3f1b7664ff344904dea83ca3dca4", "sha256": "0da80a3a5fb75ce04950cae8a67aa85075f709379e7c0325c244f1ec6df0b918" }, "downloads": -1, "filename": "tornado_jsonrpc2-0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "60bc3f1b7664ff344904dea83ca3dca4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 18942, "upload_time": "2019-05-01T19:19:39", "url": "https://files.pythonhosted.org/packages/96/6b/9221f50eae28858dfccce6cc931d8b44e450109c17571a3b231173910898/tornado_jsonrpc2-0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aff25373f38fa491886cd1fd0348d2a3", "sha256": "cb37bbeefec0ecb2a3cd7902dcfa4b7f45c701bf56f759d6aeb842445163b770" }, "downloads": -1, "filename": "tornado-jsonrpc2-0.5.tar.gz", "has_sig": false, "md5_digest": "aff25373f38fa491886cd1fd0348d2a3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 6016, "upload_time": "2019-05-01T19:19:41", "url": "https://files.pythonhosted.org/packages/a3/60/d9010369b7b15c355b2a43d3413655e8ada327a4db2566e88c82d71425aa/tornado-jsonrpc2-0.5.tar.gz" } ] }