File: README.rst

package info (click to toggle)
python-aiostream 0.4.1-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 324 kB
  • sloc: python: 1,873; makefile: 2
file content (193 lines) | stat: -rw-r--r-- 9,329 bytes parent folder | download
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
aiostream
=========


.. image:: https://readthedocs.org/projects/aiostream/badge/?version=latest
   :target: http://aiostream.readthedocs.io/en/latest/?badge=latest
   :alt:

.. image:: https://coveralls.io/repos/github/vxgmichel/aiostream/badge.svg?branch=master
   :target: https://coveralls.io/github/vxgmichel/aiostream?branch=master
   :alt:

.. image:: https://travis-ci.org/vxgmichel/aiostream.svg?branch=master
   :target: https://travis-ci.org/vxgmichel/aiostream
   :alt:

.. image:: https://img.shields.io/pypi/v/aiostream.svg
   :target: https://pypi.python.org/pypi/aiostream
   :alt:

.. image:: https://img.shields.io/pypi/pyversions/aiostream.svg
   :target: https://pypi.python.org/pypi/aiostream/
   :alt:

Generator-based operators for asynchronous iteration


Synopsis
--------

aiostream_ provides a collection of stream operators that can be combined to create
asynchronous pipelines of operations.

It can be seen as an asynchronous version of itertools_, although some aspects are slightly different.
Essentially, all the provided operators return a unified interface called a stream.
A stream is an enhanced asynchronous iterable providing the following features:

- **Operator pipe-lining** - using pipe symbol ``|``
- **Repeatability** - every iteration creates a different iterator
- **Safe iteration context** - using ``async with`` and the ``stream`` method
- **Simplified execution** - get the last element from a stream using ``await``
- **Slicing and indexing** - using square brackets ``[]``
- **Concatenation** - using addition symbol ``+``


Requirements
------------

The stream operators rely heavily on asynchronous generators (`PEP 525`_):

- python >= 3.6


Stream operators
----------------

The `stream operators`_ are separated in 7 categories:

+--------------------+---------------------------------------------------------------------------------------+
| **creation**       | iterate_, preserve_, just_, call_, empty_, throw_, never_, repeat_, count_, range_    |
+--------------------+---------------------------------------------------------------------------------------+
| **transformation** | map_, enumerate_, starmap_, cycle_, chunks_                                           |
+--------------------+---------------------------------------------------------------------------------------+
| **selection**      | take_, takelast_, skip_, skiplast_, getitem_, filter_, until_, takewhile_, dropwhile_ |
+--------------------+---------------------------------------------------------------------------------------+
| **combination**    | map_, zip_, merge_, chain_, ziplatest_                                                |
+--------------------+---------------------------------------------------------------------------------------+
| **aggregation**    | accumulate_, reduce_, list_                                                           |
+--------------------+---------------------------------------------------------------------------------------+
| **advanced**       | concat_, flatten_, switch_, concatmap_, flatmap_, switchmap_                          |
+--------------------+---------------------------------------------------------------------------------------+
| **timing**         | spaceout_, timeout_, delay_                                                           |
+--------------------+---------------------------------------------------------------------------------------+
| **miscellaneous**  | action_, print_                                                                       |
+--------------------+---------------------------------------------------------------------------------------+


Demonstration
-------------

The following example demonstrates most of the streams capabilities:

.. sourcecode:: python

    import asyncio
    from aiostream import stream, pipe


    async def main():

        # Create a counting stream with a 0.2 seconds interval
        xs = stream.count(interval=0.2)

        # Operators can be piped using '|'
        ys = xs | pipe.map(lambda x: x**2)

        # Streams can be sliced
        zs = ys[1:10:2]

        # Use a stream context for proper resource management
        async with zs.stream() as streamer:

            # Asynchronous iteration
            async for z in streamer:

                # Print 1, 9, 25, 49 and 81
                print('->', z)

        # Streams can be awaited and return the last value
        print('9² = ', await zs)

        # Streams can run several times
        print('9² = ', await zs)

        # Streams can be concatenated
        one_two_three = stream.just(1) + stream.range(2, 4)

        # Print [1, 2, 3]
        print(await stream.list(one_two_three))


    # Run main coroutine
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    loop.close()

More examples are available in the `example section`_ of the documentation.


Contact
-------

Vincent Michel: vxgmichel@gmail.com


.. _aiostream: https://github.com/vxgmichel/aiostream
.. _PEP 525: http://www.python.org/dev/peps/pep-0525/
.. _Rx: http://reactivex.io/
.. _aioreactive: http://github.com/dbrattli/aioreactive
.. _itertools: http://docs.python.org/3/library/itertools.html

.. _stream operators: http://aiostream.readthedocs.io/en/latest/operators.html
.. _example section: http://aiostream.readthedocs.io/en/latest/examples.html

.. _iterate: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.iterate
.. _preserve: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.preserve
.. _just: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.just
.. _call: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.call
.. _throw: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.throw
.. _empty: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.empty
.. _never: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.never
.. _repeat: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.repeat
.. _range: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.range
.. _count: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.count

.. _map: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.map
.. _enumerate: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.enumerate
.. _starmap: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.starmap
.. _cycle: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.cycle
.. _chunks: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.chunks

.. _take: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.take
.. _takelast: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.takelast
.. _skip: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.skip
.. _skiplast: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.skiplast
.. _getitem: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.getitem
.. _filter: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.filter
.. _until: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.until
.. _takewhile: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.takewhile
.. _dropwhile: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.dropwhile

.. _chain: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.chain
.. _zip: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.zip
.. _merge: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.merge
.. _ziplatest: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.ziplatest

.. _accumulate: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.accumulate
.. _reduce: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.reduce
.. _list: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.list

.. _concat: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.concat
.. _flatten: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.flatten
.. _switch: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.switch
.. _concatmap: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.concatmap
.. _flatmap: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.flatmap
.. _switchmap: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.switchmap

.. _spaceout: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.spaceout
.. _delay: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.delay
.. _timeout: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.timeout

.. _action: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.action
.. _print: http://aiostream.readthedocs.io/en/latest/operators.html#aiostream.stream.print