{ "info": { "author": "Andrew Stepanov", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: AsyncIO", "Framework :: Pytest", "Framework :: Trio", "Intended Audience :: Developers", "Intended Audience :: Telecommunications Industry", "License :: OSI Approved :: Apache Software License", "Operating System :: MacOS", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX :: BSD", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: HTTP Servers", "Topic :: Software Development :: Code Generators", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Networking" ], "description": "# purerpc\n\n[![Build Status](https://img.shields.io/travis/standy66/purerpc.svg?style=flat)](https://travis-ci.org/standy66/purerpc)\n[![PyPI version](https://img.shields.io/pypi/v/purerpc.svg?style=flat)](https://pypi.org/project/purerpc/)\n[![Downloads](https://pepy.tech/badge/purerpc/month)](https://pepy.tech/project/purerpc)\n\nAsynchronous pure Python gRPC client and server implementation supporting\n[asyncio](https://docs.python.org/3/library/asyncio.html),\n[uvloop](https://github.com/MagicStack/uvloop),\n[curio](https://github.com/dabeaz/curio) and\n[trio](https://github.com/python-trio/trio) (achieved with [anyio](https://github.com/agronholm/anyio) compatibility layer).\n\n## Requirements\n\n* CPython >= 3.5\n* PyPy >= 3.5\n\n## Installation\n\nLatest PyPI version:\n\n```bash\npip install purerpc\n```\n\nLatest development version:\n\n```bash\npip install git+https://github.com/standy66/purerpc.git\n```\n\nBy default purerpc uses asyncio event loop, if you want to use uvloop, curio or trio, please install them manually.\n\n## protoc plugin\n\npurerpc adds `protoc-gen-purerpc` plugin for `protoc` to your `PATH` enviroment variable\nso you can use it to generate service definition and stubs: \n\n```bash\nprotoc --purerpc_out=. --python_out=. -I. greeter.proto\n```\n\nor, if you installed `grpcio_tools` Python package:\n\n```bash\npython -m grpc_tools.protoc --purerpc_out=. --python_out=. -I. greeter.proto\n```\n\n## Usage\n\nNOTE: `greeter_grpc` module is generated by purerpc's `protoc-gen-purerpc` plugin.\n\nBelow are the examples for Python 3.6 and above which introduced asynchronous generators as a language concept.\nFor Python 3.5, where native asynchronous generators are not supported, you can use [async_generator](https://github.com/python-trio/async_generator) library for this purpose.\nJust mark yielding coroutines with `@async_generator` decorator and use `await yield_(value)` and `await yield_from_(async_iterable)` instead of `yield`.\n\n### Server\n\n```python\nfrom greeter_pb2 import HelloRequest, HelloReply\nfrom greeter_grpc import GreeterServicer\nfrom purerpc import Server\n\n\nclass Greeter(GreeterServicer):\n async def SayHello(self, message):\n return HelloReply(message=\"Hello, \" + message.name)\n\n async def SayHelloToMany(self, input_messages):\n async for message in input_messages:\n yield HelloReply(message=f\"Hello, {message.name}\")\n\n\nserver = Server(50055)\nserver.add_service(Greeter().service)\nserver.serve(backend=\"asyncio\") # backend can also be one of: \"uvloop\", \"curio\", \"trio\"\n```\n\n### Client\n\n```python\nimport anyio\nimport purerpc\nfrom greeter_pb2 import HelloRequest, HelloReply\nfrom greeter_grpc import GreeterStub\n\n\nasync def gen():\n for i in range(5):\n yield HelloRequest(name=str(i))\n\n\nasync def main():\n async with purerpc.insecure_channel(\"localhost\", 50055) as channel:\n stub = GreeterStub(channel)\n reply = await stub.SayHello(HelloRequest(name=\"World\"))\n print(reply.message)\n\n async for reply in stub.SayHelloToMany(gen()):\n print(reply.message)\n\n\nif __name__ == \"__main__\":\n anyio.run(main, backend=\"asyncio\") # backend can also be one of: \"uvloop\", \"curio\", \"trio\"\n```\n\nYou can mix server and client code, for example make a server that requests something using purerpc from another gRPC server, etc.\n\nMore examples in `misc/` folder\n\n# [Release 0.5.2](https://github.com/standy66/purerpc/compare/v0.5.1...v0.5.2) (2019-07-23)\n\n\n### Features\n\n* additional exception shielding for asyncio ([3cbd35c](https://github.com/standy66/purerpc/commit/3cbd35c))\n\n\n\n# [Release 0.5.1](https://github.com/standy66/purerpc/compare/v0.5.0...v0.5.1) (2019-07-23)\n\n\n### Bug Fixes\n\n* async generators on python 3.5 ([1c19229](https://github.com/standy66/purerpc/commit/1c19229))\n\n\n\n# [Release 0.5.0](https://github.com/standy66/purerpc/compare/v0.4.1...v0.5.0) (2019-07-23)\n\n\n### Features\n\n* can now pass contextmngr or setup_fn/teardown_fn to add_service ([208dd95](https://github.com/standy66/purerpc/commit/208dd95))\n\n\n\n# [Release 0.4.1](https://github.com/standy66/purerpc/compare/v0.4.0...v0.4.1) (2019-07-22)\n\n\n### Features\n\n* remove undocumented use of raw_socket in anyio ([6de2c9a](https://github.com/standy66/purerpc/commit/6de2c9a))\n\n\n\n# [Release 0.4.0](https://github.com/standy66/purerpc/compare/v0.3.2...v0.4.0) (2019-07-22)\n\n\n### Bug Fixes\n\n* speed improvements ([1cb3d46](https://github.com/standy66/purerpc/commit/1cb3d46))\n\n\n### Features\n\n* add state property to GRPCStream ([0019d8c](https://github.com/standy66/purerpc/commit/0019d8c))\n* answer PING frames ([c829901](https://github.com/standy66/purerpc/commit/c829901))\n* change MAX_CONCURRENT_STREAMS from 1000 to 65536 ([d2d461f](https://github.com/standy66/purerpc/commit/d2d461f))\n* decouple h2 and grpclib logic ([1f4e6b0](https://github.com/standy66/purerpc/commit/1f4e6b0))\n* support percent-encoded grpc-message header ([c6636f4](https://github.com/standy66/purerpc/commit/c6636f4))\n* change default max message length to 32 MB\n\n\n# [Release 0.3.2](https://github.com/standy66/purerpc/compare/v0.3.1...v0.3.2) (2019-02-15)\n\n\n### Bug Fixes\n\n* fix dependencies, remove some of anyio monkey patches ([ac6c5c2](https://github.com/standy66/purerpc/commit/ac6c5c2))\n\n\n\n# [Release 0.3.1](https://github.com/standy66/purerpc/compare/v0.3.0...v0.3.1) (2019-02-15)\n\n\n### Bug Fixes\n\n* fix pickling error in purerpc.test_utils._WrappedResult ([9f0a63d](https://github.com/standy66/purerpc/commit/9f0a63d))\n\n\n\n# [Release 0.3.0](https://github.com/standy66/purerpc/compare/v0.2.1...v0.3.0) (2019-02-14)\n\n\n### Features\n\n* expose new functions in purerpc.test_utils ([07b10e1](https://github.com/standy66/purerpc/commit/07b10e1))\n* migrate to pytest ([95c0a8b](https://github.com/standy66/purerpc/commit/95c0a8b))\n\n\n### BREAKING CHANGES\n\n* purerpc.test_utils.PureRPCTestCase is removed\n\n\n\n# [Release 0.2.0](https://github.com/standy66/purerpc/compare/v0.1.6...v0.2.0) (2019-02-10)\n\n\n### Features\n\n* add backend option to Server.serve ([5f47f8e](https://github.com/standy66/purerpc/commit/5f47f8e))\n* add support for Python 3.5 ([a681192](https://github.com/standy66/purerpc/commit/a681192))\n* improved exception handling in test utils ([b1df796](https://github.com/standy66/purerpc/commit/b1df796))\n* migrate to anyio ([746b1c2](https://github.com/standy66/purerpc/commit/746b1c2))\n\n\n### BREAKING CHANGES\n\n* Server and test now use asyncio event loop by default,\nthis behaviour can be changed with PURERPC_BACKEND environment variable\n* purerpc.Channel is removed, migrate to\npurerpc.insecure_channel async context manager (now supports correct\nshutdown)\n\n## Release 0.1.6\n\n* Allow passing request headers to method handlers in request argument\n* Allow passing custom metadata to method stub calls (in metadata optional keyword argument)\n\n## Release 0.1.5\n\n* Enforce SO_KEEPALIVE with small timeouts\n* Expose PureRPCTestCase in purerpc API for unit testing purerpc services\n\n## Release 0.1.4\n\n* Speed up protoc plugin\n\n## Release 0.1.3 [PyPI only]\n\n* Fix long description on PyPI\n\n## Release 0.1.2\n\n* Fix unit tests on Python 3.7\n\n## Release 0.1.0\n\n* Implement immediate mode\n\n## Release 0.0.1\n\n* Initial release\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/standy66/purerpc", "keywords": "async,await,grpc,pure-python,pypy,network,rpc,http2", "license": "Apache License Version 2.0", "maintainer": "", "maintainer_email": "", "name": "purerpc", "package_url": "https://pypi.org/project/purerpc/", "platform": "", "project_url": "https://pypi.org/project/purerpc/", "project_urls": { "Homepage": "https://github.com/standy66/purerpc" }, "release_url": "https://pypi.org/project/purerpc/0.5.2/", "requires_dist": [ "h2 (<4,>=3.1.0)", "protobuf (<4,>=3.5.1)", "anyio (<2,>=1.0.0)", "async-exit-stack (<2,>=1.0.1)", "tblib (<2,>=1.3.2)", "async-generator (<2.0,>=1.10)", "python-forge (~=18.6)" ], "requires_python": ">=3.5", "summary": "Asynchronous pure Python gRPC client and server implementation supporting asyncio, uvloop, curio and trio", "version": "0.5.2" }, "last_serial": 5574754, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "d5c6c10fa3eef10d27a4a4e28f0fa728", "sha256": "591cefd976e1021e54092958d577d3211dfdb831f5dc993fd7bd8d4bf9a8dd6a" }, "downloads": -1, "filename": "purerpc-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d5c6c10fa3eef10d27a4a4e28f0fa728", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 30114, "upload_time": "2018-06-14T16:47:02", "url": "https://files.pythonhosted.org/packages/ef/ba/b0496963999371f6aa40baf18b2702f723f4a3b0ebbecd6791a268b0ef95/purerpc-0.0.1-py3-none-any.whl" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "d865a90ac110f1ac940712f136530891", "sha256": "3d556f3dc44873045ee69d1832af2482c1cfac2b6fa904454a1509704da5f5bd" }, "downloads": -1, "filename": "purerpc-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d865a90ac110f1ac940712f136530891", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 21572, "upload_time": "2018-06-14T21:07:25", "url": "https://files.pythonhosted.org/packages/42/b2/44337763d326fabe82a281fb910d156c86d42435d1cbfc1ef96e311ed0f4/purerpc-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6827634ad767f7de5c03c8bbffcbaf49", "sha256": "f308b8000468bd3a22346a4df62df42053efb9b6bd1fbc9a2a325ffd74cfcf8b" }, "downloads": -1, "filename": "purerpc-0.1.0.tar.gz", "has_sig": false, "md5_digest": "6827634ad767f7de5c03c8bbffcbaf49", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 16302, "upload_time": "2018-06-14T21:07:26", "url": "https://files.pythonhosted.org/packages/c9/42/b41d7c9a4aac1010964a8d9825f4811b7a368d2c1b64ed616323b25e479d/purerpc-0.1.0.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "756101af82345499d156b17355ed4bfa", "sha256": "898c01830849eb3f40abe7d65b23a518a2bfca44dfb6470bf5afab701cd0fdd1" }, "downloads": -1, "filename": "purerpc-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "756101af82345499d156b17355ed4bfa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 22742, "upload_time": "2018-06-17T12:01:48", "url": "https://files.pythonhosted.org/packages/79/95/000541c1374cc1f61c2b4e05ec27e82de69fc22f81b141a0bb76a25eb875/purerpc-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b37d1f95fbed9cdc89c7bb7d894bf1b5", "sha256": "99ab2b5363c4b6c8fe88aef41f956a3e899390118df483b41a1296d51f0bbe42" }, "downloads": -1, "filename": "purerpc-0.1.2.tar.gz", "has_sig": false, "md5_digest": "b37d1f95fbed9cdc89c7bb7d894bf1b5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 18943, "upload_time": "2018-06-17T12:01:49", "url": "https://files.pythonhosted.org/packages/0f/cc/c7d80c8221d0ab101dd7471a8da588126f206bbf8a921524be8fc32bdd2b/purerpc-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "23fe881a3e9911a4fc6b91460673e56b", "sha256": "9634afcf2bdd9eddb589160b0729109b08e245593d90c5154c6169605604907f" }, "downloads": -1, "filename": "purerpc-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "23fe881a3e9911a4fc6b91460673e56b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 31301, "upload_time": "2018-06-17T12:08:43", "url": "https://files.pythonhosted.org/packages/30/21/3e1a1efddb1c7b260569871a420285dd5af272de08dd510b6036e17cf688/purerpc-0.1.3-py3-none-any.whl" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "b9d8d314de1fbb5759b8ea0c15550507", "sha256": "d7ab3e5b261c739b4f811552d81b85cc1c42f508fb0e587483577ca29ef2932a" }, "downloads": -1, "filename": "purerpc-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "b9d8d314de1fbb5759b8ea0c15550507", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 22806, "upload_time": "2018-06-23T20:57:54", "url": "https://files.pythonhosted.org/packages/34/dc/21d6ce2c8b0f1a97bb2be50c5d1ea934231218b782b86c9a04d3eadefdec/purerpc-0.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4ee2db3288d18e969e07cee7ae75213a", "sha256": "4f827886dc36a2c8360933310c118bc35805476d03155b76484c06718cf3a533" }, "downloads": -1, "filename": "purerpc-0.1.4.tar.gz", "has_sig": false, "md5_digest": "4ee2db3288d18e969e07cee7ae75213a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 19191, "upload_time": "2018-06-23T20:57:55", "url": "https://files.pythonhosted.org/packages/0c/db/d54d5447b3af652547921bdf9eb2397f44f065644882a273a52a10170d89/purerpc-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "5a2baf8647bed1979d4a0b0511ccc607", "sha256": "7b61f410441171ae279d899f6ff5ca6dffa6d4b1c97816404de4290801881b9c" }, "downloads": -1, "filename": "purerpc-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "5a2baf8647bed1979d4a0b0511ccc607", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 24567, "upload_time": "2018-07-11T14:52:51", "url": "https://files.pythonhosted.org/packages/dc/fd/41873df511c91b30d58deae333c71e990629cc0356f3bf1e3294eb7da9f0/purerpc-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "88cced2a82d017ad08975925a8f101a9", "sha256": "aafaf060230591af7a5fc28b0643b2c1b9eda983f03e91454c56ceef56a1cce6" }, "downloads": -1, "filename": "purerpc-0.1.5.tar.gz", "has_sig": false, "md5_digest": "88cced2a82d017ad08975925a8f101a9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 20668, "upload_time": "2018-07-11T14:52:52", "url": "https://files.pythonhosted.org/packages/5b/e5/8855cdd0336d1d5623dd7c0c60650c581e4851c90e674b74d3074e302317/purerpc-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "6473a615677d7b52625ac63c74dc66e3", "sha256": "9aea134cfab6318a09578c0a6ea84cbe331f7bd1bc23d94bc614d896b120949a" }, "downloads": -1, "filename": "purerpc-0.1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "6473a615677d7b52625ac63c74dc66e3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 29875, "upload_time": "2018-11-18T12:42:16", "url": "https://files.pythonhosted.org/packages/99/36/ec996ea69bb3c387e832c179f97e93a563697bf638ea18b57afa487526f2/purerpc-0.1.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3612c28a7e4d003834fa1b07550557da", "sha256": "05e8210911d4c6584f1c254fe11b257effefe62f9c50fe9ec4eed370474b8f57" }, "downloads": -1, "filename": "purerpc-0.1.6.tar.gz", "has_sig": false, "md5_digest": "3612c28a7e4d003834fa1b07550557da", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 21517, "upload_time": "2018-11-18T12:42:18", "url": "https://files.pythonhosted.org/packages/98/24/cbaf896f2189c27c2cb018ea2e3ad5ace2b2575d2ab97dc7db2774b2dcc9/purerpc-0.1.6.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "3abf5715ef750a39aaf2470ae942fd45", "sha256": "ab35d18a4a56095653a8cc19de0ff8525c0d90dfdf01b4247a46bbe4d4649987" }, "downloads": -1, "filename": "purerpc-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3abf5715ef750a39aaf2470ae942fd45", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 32980, "upload_time": "2019-02-10T19:58:38", "url": "https://files.pythonhosted.org/packages/b5/84/5f63df746e1a9315ae0c85fd678563f2e7be513ad7536a4dbbb4234aa415/purerpc-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "034eb762b4dc01ecf93143de96664e7f", "sha256": "8127192de51e802fde333ba4de44c08a92e3c47d2f2c47b59b6c3404e3b2b351" }, "downloads": -1, "filename": "purerpc-0.2.0.tar.gz", "has_sig": false, "md5_digest": "034eb762b4dc01ecf93143de96664e7f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 24752, "upload_time": "2019-02-10T19:58:40", "url": "https://files.pythonhosted.org/packages/7a/9e/27892f369489e4bc0a693a5d9ff2de5b1ab0570b243cd823fb42b0872cd7/purerpc-0.2.0.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "46c97952616581f6e498cc6aefafb901", "sha256": "cf5efa6571ebd4ce8919305783e0f4721c6e405d38ac6c471ca1be27e5a95df6" }, "downloads": -1, "filename": "purerpc-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "46c97952616581f6e498cc6aefafb901", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 33445, "upload_time": "2019-02-15T09:04:55", "url": "https://files.pythonhosted.org/packages/e7/94/b8c1c1bde51a0e601a1f2467aa65c1dac5106920687fe55818736aafdf54/purerpc-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "87a1b790483467c896b6f288fd4a672c", "sha256": "467ea03264a4f09f481babfb9b64af286c31722b088a526a01757bc2ce191e1c" }, "downloads": -1, "filename": "purerpc-0.3.2.tar.gz", "has_sig": false, "md5_digest": "87a1b790483467c896b6f288fd4a672c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 25660, "upload_time": "2019-02-15T09:04:56", "url": "https://files.pythonhosted.org/packages/64/95/96b15f014fc9114b85330de6ac7fad0a746e5de084b36e0873fdbcc67e9b/purerpc-0.3.2.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "2c3a3421303c819d3d9e9d8bf922f467", "sha256": "d11d18a0481dc2b3a270e20fc4aae08a404b21ed259acf0d1778b5ba1fa45929" }, "downloads": -1, "filename": "purerpc-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2c3a3421303c819d3d9e9d8bf922f467", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 34535, "upload_time": "2019-07-22T11:50:28", "url": "https://files.pythonhosted.org/packages/24/ed/74be58447f326ce40b39fb9c5c2d8602405890ed751272e5fd5a3bdfc71b/purerpc-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ac99a35454a98962086c4426b930c2dc", "sha256": "40101af6738075b3eb63cc0a92df75377d914dbaa74820c9cfb47f7f105b519e" }, "downloads": -1, "filename": "purerpc-0.4.1.tar.gz", "has_sig": false, "md5_digest": "ac99a35454a98962086c4426b930c2dc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 26856, "upload_time": "2019-07-22T11:50:29", "url": "https://files.pythonhosted.org/packages/04/20/fb663b35afa42ebf5c7989b056725739e1002e92c2890989bec23d783a4f/purerpc-0.4.1.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "e27877b96f072fcf0c3c2aeed7a3fe2b", "sha256": "4f68f0b6db2acd60774f14d9fb0a9107cc6d9f4db2eea062f43e23a916049a98" }, "downloads": -1, "filename": "purerpc-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "e27877b96f072fcf0c3c2aeed7a3fe2b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 34831, "upload_time": "2019-07-23T15:25:50", "url": "https://files.pythonhosted.org/packages/35/e8/1277e89db533958f2a7a64310af43e6937b260bcb9ed57496cd78642529d/purerpc-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "de9e9886f105b03fa2c4f7a755d9ef2c", "sha256": "edfb6e759a81605ac45bc54e33d8aab0607e50663700c98f7370ea37e1ecc225" }, "downloads": -1, "filename": "purerpc-0.5.1.tar.gz", "has_sig": false, "md5_digest": "de9e9886f105b03fa2c4f7a755d9ef2c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 27216, "upload_time": "2019-07-23T15:25:51", "url": "https://files.pythonhosted.org/packages/22/d9/1e4b1c2189abf171b5917d809f89988d79c0f6edd4a0361a8d45e0895eed/purerpc-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "80475d35adbafa483e426ea7f37e9d1c", "sha256": "3eb83a3a42bea320b0b5553237eab5578d7b2c5636879b5efb174336c73ca1ae" }, "downloads": -1, "filename": "purerpc-0.5.2-py3-none-any.whl", "has_sig": false, "md5_digest": "80475d35adbafa483e426ea7f37e9d1c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 34892, "upload_time": "2019-07-23T22:34:36", "url": "https://files.pythonhosted.org/packages/35/44/3677934628c671077e39ca1c191dec19397d8a22fa2f05803b78b0c3a627/purerpc-0.5.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "29cf20aba7ff53d934e24d2cd2f2ce85", "sha256": "c8362ab6187d7f73624c7f82a6e4e846936b1b54e5aa3e34836b17ec1bb02bf2" }, "downloads": -1, "filename": "purerpc-0.5.2.tar.gz", "has_sig": false, "md5_digest": "29cf20aba7ff53d934e24d2cd2f2ce85", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 27318, "upload_time": "2019-07-23T22:34:37", "url": "https://files.pythonhosted.org/packages/7c/e1/e5e56c3a9275f48714430f9a0a094763fee399c77df1f6b12fdd61c43929/purerpc-0.5.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "80475d35adbafa483e426ea7f37e9d1c", "sha256": "3eb83a3a42bea320b0b5553237eab5578d7b2c5636879b5efb174336c73ca1ae" }, "downloads": -1, "filename": "purerpc-0.5.2-py3-none-any.whl", "has_sig": false, "md5_digest": "80475d35adbafa483e426ea7f37e9d1c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 34892, "upload_time": "2019-07-23T22:34:36", "url": "https://files.pythonhosted.org/packages/35/44/3677934628c671077e39ca1c191dec19397d8a22fa2f05803b78b0c3a627/purerpc-0.5.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "29cf20aba7ff53d934e24d2cd2f2ce85", "sha256": "c8362ab6187d7f73624c7f82a6e4e846936b1b54e5aa3e34836b17ec1bb02bf2" }, "downloads": -1, "filename": "purerpc-0.5.2.tar.gz", "has_sig": false, "md5_digest": "29cf20aba7ff53d934e24d2cd2f2ce85", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 27318, "upload_time": "2019-07-23T22:34:37", "url": "https://files.pythonhosted.org/packages/7c/e1/e5e56c3a9275f48714430f9a0a094763fee399c77df1f6b12fdd61c43929/purerpc-0.5.2.tar.gz" } ] }