~ubuntu-branches/debian/sid/python-async-generator/sid

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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-Content-Type: UNKNOWN
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