{ "info": { "author": "Nathaniel J. Smith", "author_email": "njs@pobox.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: AsyncIO", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": ".. image:: https://img.shields.io/badge/chat-join%20now-blue.svg\n :target: https://gitter.im/python-trio/general\n :alt: Join chatroom\n\n.. image:: https://img.shields.io/badge/docs-read%20now-blue.svg\n :target: https://async-generator.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n.. image:: https://travis-ci.org/python-trio/async_generator.svg?branch=master\n :target: https://travis-ci.org/python-trio/async_generator\n :alt: Automated test status\n\n.. image:: https://ci.appveyor.com/api/projects/status/af4eyed8o8tc3t0r/branch/master?svg=true\n :target: https://ci.appveyor.com/project/python-trio/trio/history\n :alt: Automated test status (Windows)\n\n.. image:: https://codecov.io/gh/python-trio/async_generator/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/python-trio/async_generator\n :alt: Test coverage\n\nThe async_generator library\n===========================\n\nPython 3.6 added `async generators\n`__. (What's an async\ngenerator? `Check out my 5-minute lightning talk demo from PyCon 2016\n`__.) Python 3.7 adds some more\ntools to make them usable, like ``contextlib.asynccontextmanager``.\n\nThis library gives you all that back to Python 3.5.\n\nFor example, this code only works in Python 3.6+:\n\n.. code-block:: python3\n\n async def load_json_lines(stream_reader):\n async for line in stream_reader:\n yield json.loads(line)\n\nBut this code does the same thing, and works on Python 3.5+:\n\n.. code-block:: python3\n\n from async_generator import async_generator, yield_\n\n @async_generator\n async def load_json_lines(stream_reader):\n async for line in stream_reader:\n await yield_(json.loads(line))\n\nOr in Python 3.7, you can write:\n\n.. code-block:: python3\n\n from contextlib import asynccontextmanager\n\n @asynccontextmanager\n async def background_server():\n async with trio.open_nursery() as nursery:\n value = await nursery.start(my_server)\n try:\n yield value\n finally:\n # Kill the server when the scope exits\n nursery.cancel_scope.cancel()\n\nThis is the same, but back to 3.5:\n\n.. code-block:: python3\n\n from async_generator import async_generator, yield_, asynccontextmanager\n\n @asynccontextmanager\n @async_generator\n async def background_server():\n async with trio.open_nursery() as nursery:\n value = await nursery.start(my_server)\n try:\n await yield_(value)\n finally:\n # Kill the server when the scope exits\n nursery.cancel_scope.cancel()\n\n(And if you're on 3.6, you can use ``@asynccontextmanager`` with\nnative generators.)\n\n\nLet's do this\n=============\n\n* Install: ``python3 -m pip install -U async_generator`` (or on Windows,\n maybe ``py -3 -m pip install -U async_generator``\n\n* Manual: https://async-generator.readthedocs.io/\n\n* Bug tracker and source code: https://github.com/python-trio/async_generator\n\n* Real-time chat: https://gitter.im/python-trio/general\n\n* License: MIT or Apache 2, your choice\n\n* Contributor guide: https://trio.readthedocs.io/en/latest/contributing.html\n\n* Code of conduct: Contributors are requested to follow our `code of\n conduct\n `__ in\n all project spaces.\n\n\nHow come some of those links talk about \"trio\"?\n===============================================\n\n`Trio `__ is a new async concurrency\nlibrary for Python that's obsessed with usability and correctness \u2013 we\nwant to make it *easy* to get things *right*. The ``async_generator``\nlibrary is maintained by the Trio project as part of that mission, and\nbecause Trio uses ``async_generator`` internally.\n\nYou can use ``async_generator`` with any async library. It works great\nwith ``asyncio``, or Twisted, or whatever you like. (But we think Trio\nis pretty sweet.)\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/python-trio/async_generator", "keywords": "async", "license": "MIT -or- Apache License 2.0", "maintainer": "", "maintainer_email": "", "name": "async_generator", "package_url": "https://pypi.org/project/async_generator/", "platform": "", "project_url": "https://pypi.org/project/async_generator/", "project_urls": { "Homepage": "https://github.com/python-trio/async_generator" }, "release_url": "https://pypi.org/project/async_generator/1.10/", "requires_dist": null, "requires_python": ">=3.5", "summary": "Async generators and context managers for Python 3.5+", "version": "1.10" }, "last_serial": 4123013, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "5635930168bfda2a892bb36c2df7bf6e", "sha256": "9aac800f525cd566ce67cfc1765377d56148a6801a3439e789a2c879f59434db" }, "downloads": -1, "filename": "async_generator-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5635930168bfda2a892bb36c2df7bf6e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6962, "upload_time": "2016-05-31T18:25:33", "url": "https://files.pythonhosted.org/packages/5b/97/a42f36ab6be2de9db06752ff2c67ffa3ca4c551c0b6cceca89b93ae35528/async_generator-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9b8c4b879e6851de0443397d4e50d2bd", "sha256": "97395f027c3dbe5de9a8a87bfd4f9110d9408f904e55037ed18c9c1c9b419294" }, "downloads": -1, "filename": "async_generator-0.0.1.tar.gz", "has_sig": false, "md5_digest": "9b8c4b879e6851de0443397d4e50d2bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6085, "upload_time": "2016-05-31T18:27:04", "url": "https://files.pythonhosted.org/packages/b3/0d/6373b24c977b6f04e6a7af031d02939956c1ad0933fe29174d583a3d3956/async_generator-0.0.1.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "f9f7f37afdca04724e2fcbf146647afe", "sha256": "7bb68c18d3f4555b3a9df5e6d18885ca7fea5db27aca4f37b3fdcb2349aa9acd" }, "downloads": -1, "filename": "async_generator-1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f9f7f37afdca04724e2fcbf146647afe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10322, "upload_time": "2016-07-03T10:40:33", "url": "https://files.pythonhosted.org/packages/00/eb/17ff23833c4d621da5235e669ed2c6e3d295b937af1d017a7bb214282208/async_generator-1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "facd1300959eaa4665cd88c7d17b4374", "sha256": "99e22985e4ea79cdd9b46e659ecc3329e5c0ca0de056d1e79b8e55eee58c0895" }, "downloads": -1, "filename": "async_generator-1.0.zip", "has_sig": false, "md5_digest": "facd1300959eaa4665cd88c7d17b4374", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16191, "upload_time": "2016-07-03T10:40:37", "url": "https://files.pythonhosted.org/packages/2a/2e/3dc458f01f1dc1403dd8acc051f5086397568498b11825a23ead872f1b3c/async_generator-1.0.zip" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "6a5bf269b395d9af21337505fc924f55", "sha256": "a46195e86832fad03b6b2f4fd4618fe8234693ed41ed5826ae3cd2754e5eec6f" }, "downloads": -1, "filename": "async_generator-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6a5bf269b395d9af21337505fc924f55", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11223, "upload_time": "2016-11-07T05:47:52", "url": "https://files.pythonhosted.org/packages/28/d7/8ba8e8d5e5897a677d14ea300b83cb2fa4b7d8ea5602dfea07e925913b81/async_generator-1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "452388b7a472010528aabac222a7b9da", "sha256": "296b088b9071e3bd176f354904cad13d0501a37a49f405f1bca5f2d40daf45c8" }, "downloads": -1, "filename": "async_generator-1.1.zip", "has_sig": false, "md5_digest": "452388b7a472010528aabac222a7b9da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16709, "upload_time": "2016-11-07T05:47:55", "url": "https://files.pythonhosted.org/packages/35/c4/0e8aa96874e8f7b3a2c1e78eb8009f21832a6482e167c3816392cce0c78f/async_generator-1.1.zip" } ], "1.10": [ { "comment_text": "", "digests": { "md5": "f42a694c403397d825208a4cf97379e6", "sha256": "01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b" }, "downloads": -1, "filename": "async_generator-1.10-py3-none-any.whl", "has_sig": false, "md5_digest": "f42a694c403397d825208a4cf97379e6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 18857, "upload_time": "2018-08-01T03:36:20", "url": "https://files.pythonhosted.org/packages/71/52/39d20e03abd0ac9159c162ec24b93fbcaa111e8400308f2465432495ca2b/async_generator-1.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "078a29b4afb3d7f38c097a530f042a55", "sha256": "6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144" }, "downloads": -1, "filename": "async_generator-1.10.tar.gz", "has_sig": false, "md5_digest": "078a29b4afb3d7f38c097a530f042a55", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 29870, "upload_time": "2018-08-01T03:36:21", "url": "https://files.pythonhosted.org/packages/ce/b6/6fa6b3b598a03cba5e80f829e0dadbb49d7645f523d209b2fb7ea0bbb02a/async_generator-1.10.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "6486dcf84b7f836f79ac215182b51630", "sha256": "0e45a37b2d5596d64a498cb698286e39bb492db61cd01027247e66e8036e0fc9" }, "downloads": -1, "filename": "async_generator-1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "6486dcf84b7f836f79ac215182b51630", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15077, "upload_time": "2016-11-15T06:44:01", "url": "https://files.pythonhosted.org/packages/4b/31/e4ae6e7f89a36ad36ed21844263a9df9a3e97ecd127ddd68fa8088c064d3/async_generator-1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3c94d6b61a1248e11177824d9abaa0be", "sha256": "f29f45317b74baa05adecd19d5af871d2e90347d78c580a9e492cbf9b604caf5" }, "downloads": -1, "filename": "async_generator-1.2.zip", "has_sig": false, "md5_digest": "3c94d6b61a1248e11177824d9abaa0be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21458, "upload_time": "2016-11-15T06:44:04", "url": "https://files.pythonhosted.org/packages/0a/33/4df322ca64e66be0d28862e7c38dd7aa0913f2a511b7cd99ae2f75dcdd18/async_generator-1.2.zip" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "a57da320c8de7defe43deeb1614249fa", "sha256": "55e7c6f07761105f0460836ef2296837edd00d2e84876d336ac6ac0058137d23" }, "downloads": -1, "filename": "async_generator-1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "a57da320c8de7defe43deeb1614249fa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15997, "upload_time": "2016-11-25T07:23:27", "url": "https://files.pythonhosted.org/packages/f4/6a/7483e05af831cc75ce3d75b288b925cb568949856b49fcf94429d25bef7b/async_generator-1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e51fa5a90e7d6640f4b7d604f9bc538", "sha256": "240f0ba990fe088b050963fc1ba09dfadd4cf96c79c969084e7582b4015a084b" }, "downloads": -1, "filename": "async_generator-1.3.zip", "has_sig": false, "md5_digest": "5e51fa5a90e7d6640f4b7d604f9bc538", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22700, "upload_time": "2016-11-25T07:23:29", "url": "https://files.pythonhosted.org/packages/1d/3f/a82710d4511843f2de5e7b2c6e65072574559ba7541ab1cf12e1056e7098/async_generator-1.3.zip" } ], "1.4": [ { "comment_text": "", "digests": { "md5": "861ec98f6a44f32a2d04502c91eecdad", "sha256": "073980550d8bcaebda30225b006babfb8f53dd72d858dc762e93e963a78473b0" }, "downloads": -1, "filename": "async_generator-1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "861ec98f6a44f32a2d04502c91eecdad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16230, "upload_time": "2016-12-06T05:23:41", "url": "https://files.pythonhosted.org/packages/7e/5d/2f1918cbae096d5e99c38aa13b4ec35e13cbcdf7e4edcd18fa00d8fd38db/async_generator-1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dae846c99201a095e500af508c3eb3b1", "sha256": "092d2f5f3039f103485df926635cf735acf8cc27769707dcf15a828427d8cbfd" }, "downloads": -1, "filename": "async_generator-1.4.zip", "has_sig": false, "md5_digest": "dae846c99201a095e500af508c3eb3b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23088, "upload_time": "2016-12-06T05:23:43", "url": "https://files.pythonhosted.org/packages/22/4f/ead172cf45f536cc33df0b472f166d703d38536019d0cb5e1aa0a4d573c1/async_generator-1.4.zip" } ], "1.5": [ { "comment_text": "", "digests": { "md5": "22c555f0f76295bcc937bda74293f8b4", "sha256": "5ccd6451ba30944c5dcbfcf3330a6c8793e8e1cfa7d5c8d8f018bf2c4ff00959" }, "downloads": -1, "filename": "async_generator-1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "22c555f0f76295bcc937bda74293f8b4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17745, "upload_time": "2017-01-15T10:44:15", "url": "https://files.pythonhosted.org/packages/81/39/653703890b2e7f2896932d958ec3309869cf2f8293e56571902c4387ae1c/async_generator-1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b1ce28264e25b7d95312a716accdcbea", "sha256": "392b776f4a158cc3b7ba5127d88d73eee10fa420e36d7099431c6b04fc0032cf" }, "downloads": -1, "filename": "async_generator-1.5.zip", "has_sig": false, "md5_digest": "b1ce28264e25b7d95312a716accdcbea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25021, "upload_time": "2017-01-15T10:44:17", "url": "https://files.pythonhosted.org/packages/58/05/943637243afde0a9dc38a820e42153392b97c41de0bd37132ca03b8e7d82/async_generator-1.5.zip" } ], "1.6": [ { "comment_text": "", "digests": { "md5": "2775c21bd80fd2ad2c75125467029982", "sha256": "657196d620c2ca4b87f2f615b87d46558be4dc1fdec3c49774c98d1ffb8c9c60" }, "downloads": -1, "filename": "async_generator-1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "2775c21bd80fd2ad2c75125467029982", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18204, "upload_time": "2017-02-18T03:06:04", "url": "https://files.pythonhosted.org/packages/07/68/0c0c77f265f9e91f1108ff0f95df467f43a0d64a84fdb81dfb5a67b1f7a3/async_generator-1.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "931eda157cbfe97fd1014ff0d64a1b32", "sha256": "1d6e9e5e5eb688030c03154feb8b20b0633e93c3a8c37e8023800d1c7c66d3a3" }, "downloads": -1, "filename": "async_generator-1.6.zip", "has_sig": false, "md5_digest": "931eda157cbfe97fd1014ff0d64a1b32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25555, "upload_time": "2017-02-18T03:06:05", "url": "https://files.pythonhosted.org/packages/1c/53/736c92d2afc040186c8d961350072c7aab0a0d5e6063c41d7265af5e4a77/async_generator-1.6.zip" } ], "1.7": [ { "comment_text": "", "digests": { "md5": "2bb560c8d0153219dc34b1d87304c404", "sha256": "96c272dcf22cbac9eaf6bd1de01434cd7b33d734dab32702521b62685885093e" }, "downloads": -1, "filename": "async_generator-1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "2bb560c8d0153219dc34b1d87304c404", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18807, "upload_time": "2017-05-13T08:34:03", "url": "https://files.pythonhosted.org/packages/ac/03/8df9e1742a673894afd77fbe16dde3a1cc89ad72a2bbaac4eefaf6f547c3/async_generator-1.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fb0eafee5ceb17ab028f7e532f72fede", "sha256": "8cb1ea4416908436c86b8cec03b01b67028dda3bac285e6cef4d7b26eeac5710" }, "downloads": -1, "filename": "async_generator-1.7.tar.gz", "has_sig": false, "md5_digest": "fb0eafee5ceb17ab028f7e532f72fede", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19391, "upload_time": "2017-05-13T08:34:05", "url": "https://files.pythonhosted.org/packages/09/4a/57d086d0bbd581e70dde9e9e7daca3126fbe3bc91c2dbdd71b1e6e1e3a47/async_generator-1.7.tar.gz" } ], "1.8": [ { "comment_text": "", "digests": { "md5": "fc25b18290628a31905e758e03ddc1fe", "sha256": "d9253336202cb9df50ba617893fe794c61394a7eb4b9054f285c860f395ac6ff" }, "downloads": -1, "filename": "async_generator-1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "fc25b18290628a31905e758e03ddc1fe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19916, "upload_time": "2017-06-18T00:02:08", "url": "https://files.pythonhosted.org/packages/a7/82/a9312aaaaaf354d23a54d198dc6fa0b8192d88db9a51845f957a878c4527/async_generator-1.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a97473393c097193e5316a957e96020c", "sha256": "928b644cfc92be498f2d6c431e0082ae79ea736fbdf1ce4247881071dd525348" }, "downloads": -1, "filename": "async_generator-1.8.zip", "has_sig": false, "md5_digest": "a97473393c097193e5316a957e96020c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27558, "upload_time": "2017-06-18T00:02:10", "url": "https://files.pythonhosted.org/packages/cf/2f/0577dc1ebcee37f5b4ace6f32da5bd2b2dc9073d82186143b75259b52123/async_generator-1.8.zip" } ], "1.9": [ { "comment_text": "", "digests": { "md5": "8fb128e275f61d4e2fa3e7dc4bb0221c", "sha256": "2f45541002a14f80fffc6d52788f92470ff0d9bfe81c434ea8cd60babe43de9e" }, "downloads": -1, "filename": "async_generator-1.9-py3-none-any.whl", "has_sig": false, "md5_digest": "8fb128e275f61d4e2fa3e7dc4bb0221c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 18571, "upload_time": "2018-01-19T12:36:23", "url": "https://files.pythonhosted.org/packages/d9/c9/4a1806709a86b0e81849abb51242a4c6cfaba9c52dce05828e9125d7081d/async_generator-1.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a0a4922839f6309135e4122975ed4a96", "sha256": "b7d5465c6174fe86dba498ececb175f93a6097ffb7cc91946405e1f05b848371" }, "downloads": -1, "filename": "async_generator-1.9.tar.gz", "has_sig": false, "md5_digest": "a0a4922839f6309135e4122975ed4a96", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 15711, "upload_time": "2018-01-19T12:36:24", "url": "https://files.pythonhosted.org/packages/d6/fd/d9c76bac900882ceb0b2579d071588f60556557cc5d1a92ddcade14cc210/async_generator-1.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f42a694c403397d825208a4cf97379e6", "sha256": "01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b" }, "downloads": -1, "filename": "async_generator-1.10-py3-none-any.whl", "has_sig": false, "md5_digest": "f42a694c403397d825208a4cf97379e6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 18857, "upload_time": "2018-08-01T03:36:20", "url": "https://files.pythonhosted.org/packages/71/52/39d20e03abd0ac9159c162ec24b93fbcaa111e8400308f2465432495ca2b/async_generator-1.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "078a29b4afb3d7f38c097a530f042a55", "sha256": "6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144" }, "downloads": -1, "filename": "async_generator-1.10.tar.gz", "has_sig": false, "md5_digest": "078a29b4afb3d7f38c097a530f042a55", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 29870, "upload_time": "2018-08-01T03:36:21", "url": "https://files.pythonhosted.org/packages/ce/b6/6fa6b3b598a03cba5e80f829e0dadbb49d7645f523d209b2fb7ea0bbb02a/async_generator-1.10.tar.gz" } ] }