{ "info": { "author": "Nick Whalen", "author_email": "nickw@mindstorm-networks.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "=========\nRabbitRPC\n=========\n:Author: Nick Whalen \n\nRabbitRPC is an RPC over AMQP framework for Python. It allows the user to worry less about how he's doing remote method\ncalls and more about her/his actual code. It was written to scratch an itch that developed during the development of a\nmuch larger software project which needed a highly scalable internal API.\n\nAs of 0.6.0, RabbitRPC is capable of completely mocking remote functions and their modules. This means that using the\nframework is as simple as instantiating the RPCClient class and calling 'start()' (after having written and registered\nsome server-side components, of course). See below for an example of how this works.\n\nRabbitRPC tries to keep things feeling as native as possible. As mentioned above, imports and function calls on modules\nwork exactly like you'd use them for local code. The RPC client will also return the exact data that was produced from\nthe server-side functions (within pickleable limits). Should an exception occur in the remote code, that exact\nexception will be thrown and its traceback will be shown.\n\nPlease keep in mind, this package is still a work in progress. Here's a current list of what is planned before 1.0.0:\n\n* Add support for remote class registrations and stateful class management from within the server, on a per-client basis.\n* Authentication\n* Authorization (along with the ability to create groups/roles specifying what functions/methods/classes may or may not be run by a particular account.\n* Dead-letter support in AMQP backend (for those rare times when something goes wrong and you need to recover).\n* 'Versioning' for RPC endpoints, which would allow servers to serve subsets of an API/set of endpoints\n\nReal documentation is in the plans, my time is just limited at the moment. All of the source is well documented with\ndoctags. Please check that out for the time being.\n\n**Bugs and Feature Requests:**\n\nPlease leave them on the project's Github tracker: https://github.com/nwhalen/rabbitrpc/issues\n\nExample\n=======\nFor actual, working code examples, see the 'examples' directory in the source tree. You'll need a RabbitMQ server set\nup before you run them. But you know that.\n\n**RPC Endpoints**::\n\n from rabbitrpc.server import register\n\n @register.RPCFunction\n def the_price_is_wrong():\n print '-- Bob Barker'\n\n**RPC Server**::\n\n import \n from config import RABBITCONF\n\n server = rpcserver.RPCServer(RABBITCONF)\n\n try:\n server.run()\n except KeyboardInterrupt:\n server.stop()\n\n**RPC Client**::\n\n from config import RABBITCONF\n\n # Fire up the client\n client = rpcclient.RPCClient(RABBITCONF)\n client.start()\n\n # This module is dynamically created by the client, along with it's function 'all_the_things'. Calling\n # 'all_the_things' will cause the client to transparently proxy the call out to the RPC server, via RabbitMQ.\n import rpcendpoints\n result = rpcendpoints.the_price_is_wrong()\n\n print 'result: %s' % result\n\n\nDependencies\n============\n\n* `pika`: http://pypi.python.org/pypi/pika\n\n**Tests Only:**\n\n* `pytest`: http://pypi.python.org/pypi/pytest\n* `mock`: http://pypi.python.org/pypi/mock\n\n\nLicense\n=======\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/nwhalen/rabbitrpc/tarball/master", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/nwhalen/rabbitrpc", "keywords": "rabbitmq rpc amqp", "license": "Apache License 2.0", "maintainer": null, "maintainer_email": null, "name": "rabbitrpc", "package_url": "https://pypi.org/project/rabbitrpc/", "platform": "Any", "project_url": "https://pypi.org/project/rabbitrpc/", "project_urls": { "Download": "https://github.com/nwhalen/rabbitrpc/tarball/master", "Homepage": "https://github.com/nwhalen/rabbitrpc" }, "release_url": "https://pypi.org/project/rabbitrpc/0.6.1/", "requires_dist": null, "requires_python": null, "summary": "RabbitMQ/AMQP-based RPC Client/Server Library", "version": "0.6.1" }, "last_serial": 798423, "releases": { "0.5.0": [ { "comment_text": "", "digests": { "md5": "abb0b4657c1f94bf72d66f3198cfcf72", "sha256": "dcb2dfbc0f032d233bf0bc5a96a0f29670e6699d2c7e31d86dc0d01a2ad898b9" }, "downloads": -1, "filename": "rabbitrpc-0.5.0.tar.gz", "has_sig": false, "md5_digest": "abb0b4657c1f94bf72d66f3198cfcf72", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5158, "upload_time": "2013-01-27T00:00:51", "url": "https://files.pythonhosted.org/packages/14/52/9673f4e2de39b063b15dfda0f10f4b11d8a1863638ee0f4731a5917a7a61/rabbitrpc-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "dd3ff7bb21eb35f52456ebfdbc72b21d", "sha256": "99d411598d48240e23c63856ce3b204edc8cd76e00ca91a58868799560920746" }, "downloads": -1, "filename": "rabbitrpc-0.5.1.tar.gz", "has_sig": false, "md5_digest": "dd3ff7bb21eb35f52456ebfdbc72b21d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5416, "upload_time": "2013-01-27T02:34:05", "url": "https://files.pythonhosted.org/packages/0b/a3/08bb194a1324eeec55e59de0169bde4ea2ebbb85f7c43c85853f620a682e/rabbitrpc-0.5.1.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "3082bee6697515de56790dae0496eb1a", "sha256": "da6da9c3d68dece89703382ec1e64d96f6d4ac7246925488c7e7f723a42f8e6d" }, "downloads": -1, "filename": "rabbitrpc-0.6.0.tar.gz", "has_sig": false, "md5_digest": "3082bee6697515de56790dae0496eb1a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10823, "upload_time": "2013-04-17T03:55:58", "url": "https://files.pythonhosted.org/packages/1a/54/d0a637ec3768ce6def97296b9222574c292415b0ba06c70529ffe2602f98/rabbitrpc-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "78c746f423a744d7290942635742b702", "sha256": "37dc317a63448b49cad1f339390fcf71bc010d89d06d0c2dd49b7c9827c88e7f" }, "downloads": -1, "filename": "rabbitrpc-0.6.1.tar.gz", "has_sig": false, "md5_digest": "78c746f423a744d7290942635742b702", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12542, "upload_time": "2013-05-10T03:28:04", "url": "https://files.pythonhosted.org/packages/a0/e5/91c3583a6b66fcf6fa761bed3aaef5441ad2d7042e0cc9b162c1b12cc6cd/rabbitrpc-0.6.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "78c746f423a744d7290942635742b702", "sha256": "37dc317a63448b49cad1f339390fcf71bc010d89d06d0c2dd49b7c9827c88e7f" }, "downloads": -1, "filename": "rabbitrpc-0.6.1.tar.gz", "has_sig": false, "md5_digest": "78c746f423a744d7290942635742b702", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12542, "upload_time": "2013-05-10T03:28:04", "url": "https://files.pythonhosted.org/packages/a0/e5/91c3583a6b66fcf6fa761bed3aaef5441ad2d7042e0cc9b162c1b12cc6cd/rabbitrpc-0.6.1.tar.gz" } ] }