Metadata-Version: 1.2
Name: async-generator
Version: 1.9
Summary: Async generators and context managers for Python 3.5+
Home-page: https://github.com/python-trio/async_generator
Author: Nathaniel J. Smith
Author-email: njs@pobox.com
License: MIT
Description: .. image:: https://img.shields.io/badge/chat-join%20now-blue.svg
           :target: https://gitter.im/python-trio/general
           :alt: Join chatroom
        
        .. image:: https://img.shields.io/badge/docs-read%20now-blue.svg
           :target: https://async-generator.readthedocs.io/en/latest/?badge=latest
           :alt: Documentation Status
        
        .. image:: https://travis-ci.org/njsmith/async_generator.svg?branch=master
           :target: https://travis-ci.org/njsmith/async_generator
           :alt: Automated test status
        
        .. image:: https://ci.appveyor.com/api/projects/status/af4eyed8o8tc3t0r/branch/master?svg=true
           :target: https://ci.appveyor.com/project/python-trio/trio/history
           :alt: Automated test status (Windows)
        
        .. image:: https://codecov.io/gh/njsmith/async_generator/branch/master/graph/badge.svg
           :target: https://codecov.io/gh/njsmith/async_generator
           :alt: Test coverage
        
        The async_generator library
        ===========================
        
        Python 3.6 added `async generators
        <https://www.python.org/dev/peps/pep-0525/>`__. (What's an async
        generator? `Check out my 5-minute lightning talk demo from PyCon 2016
        <https://youtu.be/PulzIT8KYLk?t=24m30s>`__.) Python 3.7 adds some more
        tools to make them usable, like ``contextlib.asynccontextmanager``.
        
        This library gives you all that back to Python 3.5.
        
        For example, this code only works in Python 3.6+:
        
        .. code-block:: python3
        
           async def load_json_lines(stream_reader):
               async for line in stream_reader:
                   yield json.loads(line)
        
        But this code does the same thing, and works on Python 3.5+:
        
        .. code-block:: python3
        
           from async_generator import async_generator, yield_
        
           @async_generator
           async def load_json_lines(stream_reader):
               async for line in stream_reader:
                   await yield_(json.loads(line))
        
        Or in Python 3.7, you can write:
        
        .. code-block:: python3
        
           from contextlib import asynccontextmanager
        
           @asynccontextmanager
           async def background_server():
               async with trio.open_nursery() as nursery:
                   value = await nursery.start(my_server)
                   try:
                       yield value
                   finally:
                       # Kill the server when the scope exits
                       nursery.cancel_scope.cancel()
        
        This is the same, but back to 3.5:
        
        .. code-block:: python3
        
           from async_generator import async_generator, yield_, asynccontextmanager
        
           @asynccontextmanager
           @async_generator
           async def background_server():
               async with trio.open_nursery() as nursery:
                   value = await nursery.start(my_server)
                   try:
                       await yield_(value)
                   finally:
                       # Kill the server when the scope exits
                       nursery.cancel_scope.cancel()
        
        (And if you're on 3.6, you can use ``@asynccontextmanager`` with
        native generators.)
        
        
        Let's do this
        =============
        
        * Install: ``python3 -m pip install -U async_generator`` (or on Windows,
          maybe ``py -3 -m pip install -U async_generator``
        
        * Manual: https://async-generator.readthedocs.io/
        
        * Bug tracker and source code: https://github.com/python-trio/async_generator
        
        * Real-time chat: https://gitter.im/python-trio/general
        
        * License: MIT or Apache 2, your choice
        
        * Contributor guide: https://trio.readthedocs.io/en/latest/contributing.html
        
        * Code of conduct: Contributors are requested to follow our `code of
          conduct
          <https://trio.readthedocs.io/en/latest/code-of-conduct.html>`__ in
          all project spaces.
        
        
        How come some of those links talk about "trio"?
        ===============================================
        
        `Trio <https://trio.readthedocs.io>`__ is a new async concurrency
        library for Python that's obsessed with usability and correctness – we
        want to make it *easy* to get things *right*. The ``async_generator``
        library is maintained by the Trio project as part of that mission, and
        because Trio uses ``async_generator`` internally.
        
        You can use ``async_generator`` with any async library. It works great
        with ``asyncio``, or Twisted, or whatever you like. (But we think Trio
        is pretty sweet.)
        
Keywords: async
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Framework :: AsyncIO
Requires-Python: >=3.5
