omnilib / aioitertools Goto Github PK
View Code? Open in Web Editor NEWitertools and builtins for AsyncIO and mixed iterables
Home Page: https://aioitertools.omnilib.dev
License: MIT License
itertools and builtins for AsyncIO and mixed iterables
Home Page: https://aioitertools.omnilib.dev
License: MIT License
Moved from python-poetry/poetry#2332
Looks like that comes from the package tarball itself aioitertools-0.6.0.tar.gz
Name: aioitertools
Version: 0.6.0
Summary: asyncio version of the standard multiprocessing module
Home-page: https://github.com/jreese/aioitertools
Author: John Reese
Author-email: [email protected]
License: MIT
Description: aioitertools
In source tree I see aioitertools/tests/ and despite that pytest is not able to find any units
+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-aioitertools-0.10.0-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-aioitertools-0.10.0-2.fc35.x86_64/usr/lib/python3.8/site-packages
+ /usr/bin/pytest -ra
=========================================================================== test session starts ============================================================================
platform linux -- Python 3.8.13, pytest-7.1.2, pluggy-1.0.0
rootdir: /home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0
collected 0 items
========================================================================== no tests ran in 0.00s ===========================================================================
current version is defined as following:
async def zip_longest(
*itrs: AnyIterable[Any], fillvalue: Any = None
) -> AsyncIterator[Tuple[Any, ...]]:
its: List[AsyncIterator[Any]] = [iter(itr) for itr in itrs]
itr_count = len(its)
while True:
values = await asyncio.gather(
*[it.__anext__() for it in its], return_exceptions=True
)
finished = 0
for idx, value in builtins.enumerate(values):
if isinstance(value, AnyStop):
finished += 1
values[idx] = fillvalue
elif isinstance(value, BaseException):
raise value
if finished >= itr_count:
break
yield tuple(values)
This issue with this is that if the iterators end with different offsets, it will end up calling __anext__
on an iterator which has already yielded out of itself, which is very bad and yields errors about method returning AsyncStopIteration. I propose a fix like the following:
@async_generator
async def zip_longest(*itrs, fillvalue=None):
its = [itr.__aiter__() for itr in itrs]
its_running = [True] * len(itrs)
async def get_fillvalue():
return fillvalue
while True:
values = await asyncio.gather(
*[it.__anext__() if its_running[idx] else get_fillvalue()
for idx, it in enumerate(its)
],
return_exceptions=True
)
for idx, value in enumerate(values):
if isinstance(value, (StopIteration, StopAsyncIteration)):
its_running[idx] = False
elif isinstance(value, BaseException):
raise value
if not any(its_running):
break
await yield_(tuple(values))
this is python 3.5+ syntax
The non-async builtin next
takes a default
parameter (docs) that allows you to specify a return value if the iterator is exhausted.
Python open()
use by default locale.getpreferredencoding()
which leads to the problem of installing the package in an uncontrolled environment (build agent for example)
See: stackoverflow and open
Instead of using default encoding, should set the UTF-8 in setup.py
with open(file, encoding='utf8') as f:
...
I was expecting min
and max
to be available since sum
is also there
There are three failed tests on Python 3.11. Here is the full log: test-failures.txt. One of them is caused by the removal of asyncio.coroutine, and the others appears related to a changed behavior in asyncio.wait()
, which no longer accepts coroutines.
I end up coming up with thousands of coros then wanting to gather them, but the default implementation will make all the connections first, then let some of them time out before finishing.
I'm looking for an API something like gather(*aws, limit=10)
to avoid having to hand-batch them.
There is chunked
that accepts Iterator
, but I see here not chunked
that can accept AsyncIterator
.
Similar to this code
readme says 3.6 but setup.py specifies 3.5+ via metadata
What happens:
$ python3 -m venv aioitertools_zip_exception
$ cat aioitertools_zip_exception.py
import asyncio
import platform
import sys
import aioitertools
async def gen():
for i in range(10):
if i == 9:
assert False
await asyncio.sleep(1)
yield i
async def gen_pairs():
for i in range(10):
if i == 9:
assert False
await asyncio.sleep(1)
yield i, "a"
async def main():
print("platform version", platform.version())
print("python version", sys.version)
print("aioitertools version", aioitertools.__version__)
print("the exception is getting swallowed:")
async for (i, j) in aioitertools.zip(gen(), gen()):
print(i, j)
print("this attempts to unpack the exception:")
async for (i, j), (k, l) in aioitertools.zip(gen_pairs(), gen_pairs()):
print(i, j, k, l)
asyncio.run(main())
$ . ./aioitertools_zip_exception/bin/activate
(aioitertools_zip_exception) $ python3 -m pip install aioitertools
Collecting aioitertools
Downloading aioitertools-0.11.0-py3-none-any.whl (23 kB)
Installing collected packages: aioitertools
Successfully installed aioitertools-0.11.0
(aioitertools_zip_exception) $ python3 aioitertools_zip_exception.py
platform version Darwin Kernel Version 22.6.0: Wed Jul 5 22:22:05 PDT 2023; root:xnu-8796.141.3~6/RELEASE_ARM64_T6000
python version 3.11.5 (main, Aug 24 2023, 15:09:45) [Clang 14.0.3 (clang-1403.0.22.14.1)]
aioitertools version 0.11.0
the exception is getting swallowed:
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
this attempts to unpack the exception:
0 a 0 a
1 a 1 a
2 a 2 a
3 a 3 a
4 a 4 a
5 a 5 a
6 a 6 a
7 a 7 a
8 a 8 a
Traceback (most recent call last):
File "/Users/Filip.Zyzniewski/aioitertools_zip_exception.py", line 38, in <module>
asyncio.run(main())
File "/opt/homebrew/Cellar/[email protected]/3.11.5/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/runners.py", line 190, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/[email protected]/3.11.5/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/[email protected]/3.11.5/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "/Users/Filip.Zyzniewski/aioitertools_zip_exception.py", line 34, in main
async for (i, j), (k, l) in aioitertools.zip(gen_pairs(), gen_pairs()):
^^^^^^
TypeError: cannot unpack non-iterable AssertionError object
(aioitertools_zip_exception) $
What I expected to happen: I expected the exception to percolate up the call stack and be raised at the top level.
First of all currently it is not possible to use straight sphinx-build
command to build documentation out of source tree
+ /usr/bin/sphinx-build -n -T -b man docs build/sphinx/man
Running Sphinx v4.5.0
making output directory... done
loading intersphinx inventory from https://docs.python.org/3/objects.inv...
building [mo]: targets for 0 po files that are out of date
building [man]: all manpages
updating environment: [new config] 4 added, 0 changed, 0 removed
reading sources... [100%] index
WARNING: autodoc: failed to import module 'builtins' from module 'aioitertools'; the following exception was raised:
No module named 'aioitertools'
WARNING: autodoc: failed to import module 'itertools' from module 'aioitertools'; the following exception was raised:
No module named 'aioitertools'
WARNING: autodoc: failed to import module 'more_itertools' from module 'aioitertools'; the following exception was raised:
No module named 'aioitertools'
WARNING: autodoc: failed to import module 'asyncio' from module 'aioitertools'; the following exception was raised:
No module named 'aioitertools'
looking for now-outdated files... none found
pickling environment... done
checking consistency... done
writing... aioitertools.1 { api changelog contributing } done
build succeeded, 4 warnings.
This can be fixed by patch like below:
--- a/docs/conf.py~ 2022-02-24 03:38:11.000000000 +0000
+++ b/docs/conf.py 2022-05-29 17:49:09.914443884 +0000
@@ -9,11 +9,10 @@
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
-#
-# import os
-# import sys
-# sys.path.insert(0, os.path.abspath('.'))
+import os
+import sys
+sys.path.insert(0, os.path.abspath(".."))
# -- Project information -----------------------------------------------------
This patch fixes what is in the comment and that can of fix is suggested in sphinx example copy.py https://www.sphinx-doc.org/en/master/usage/configuration.html#example-of-configuration-file
Than .. on building my packages I'm using sphinx-build
command with -n
switch which shows warmings about missing references. These are not critical issues.
Here is the output with warnings:
+ /usr/bin/sphinx-build -n -T -b man docs build/sphinx/man
Running Sphinx v4.5.0
making output directory... done
loading intersphinx inventory from https://docs.python.org/3/objects.inv...
building [mo]: targets for 0 po files that are out of date
building [man]: all manpages
updating environment: [new config] 4 added, 0 changed, 0 removed
reading sources... [100%] index
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/asyncio.py:docstring of aioitertools.asyncio.gather_iter:1: WARNING: Inline emphasis start-string without end-string.
looking for now-outdated files... none found
pickling environment... done
checking consistency... done
writing... aioitertools.1 { api changelog contributing } /home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.iter:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.iter:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.iter:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.next:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.next:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.next:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.next:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.next:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.next:: WARNING: py:class reference target not found: aioitertools.types.T2
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.next:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.next:: WARNING: py:class reference target not found: aioitertools.types.T2
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.list:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.list:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.list:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.set:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.set:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.set:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.enumerate:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.enumerate:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.enumerate:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.map:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.map:: WARNING: py:class reference target not found: aioitertools.types.R
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.map:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.map:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.map:: WARNING: py:class reference target not found: aioitertools.types.R
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.max:: WARNING: py:class reference target not found: aioitertools.helpers.Orderable
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.max:: WARNING: py:class reference target not found: aioitertools.helpers.Orderable
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.max:: WARNING: py:class reference target not found: aioitertools.helpers.Orderable
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.max:: WARNING: py:class reference target not found: aioitertools.helpers.Orderable
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.max:: WARNING: py:class reference target not found: aioitertools.helpers.Orderable
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.max:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.max:: WARNING: py:class reference target not found: aioitertools.helpers.Orderable
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.max:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.min:: WARNING: py:class reference target not found: aioitertools.helpers.Orderable
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.min:: WARNING: py:class reference target not found: aioitertools.helpers.Orderable
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.min:: WARNING: py:class reference target not found: aioitertools.helpers.Orderable
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.min:: WARNING: py:class reference target not found: aioitertools.helpers.Orderable
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.min:: WARNING: py:class reference target not found: aioitertools.helpers.Orderable
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.min:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.min:: WARNING: py:class reference target not found: aioitertools.helpers.Orderable
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.min:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.sum:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.sum:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.sum:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.sum:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T2
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T2
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T2
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T2
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T2
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T3
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T3
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T2
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T3
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T2
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T2
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T3
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T3
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T4
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T4
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T2
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T3
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T4
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T2
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T2
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T3
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T3
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T4
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T4
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T5
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T5
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T1
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T2
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T3
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T4
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/builtins.py:docstring of aioitertools.builtins.zip:: WARNING: py:class reference target not found: aioitertools.types.T5
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.accumulate:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.accumulate:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.accumulate:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.accumulate:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.accumulate:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.accumulate:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.accumulate:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.accumulate:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.accumulate:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.combinations:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.combinations:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.combinations:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.combinations_with_replacement:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.combinations_with_replacement:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.combinations_with_replacement:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.compress:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.compress:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.compress:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.count:: WARNING: py:class reference target not found: aioitertools.types.N
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.count:: WARNING: py:class reference target not found: aioitertools.types.N
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.count:: WARNING: py:class reference target not found: aioitertools.types.N
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.cycle:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.cycle:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.cycle:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.dropwhile:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.dropwhile:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.dropwhile:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.dropwhile:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.dropwhile:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.filterfalse:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.filterfalse:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.filterfalse:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.filterfalse:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.filterfalse:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.groupby:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.groupby:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.groupby:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.groupby:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.groupby:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.groupby:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.groupby:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.groupby:: WARNING: py:class reference target not found: aioitertools.types.R
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.groupby:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.groupby:: WARNING: py:class reference target not found: aioitertools.types.R
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.groupby:: WARNING: py:class reference target not found: aioitertools.types.R
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.groupby:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.islice:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.islice:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.islice:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.islice:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.islice:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.islice:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.permutations:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.permutations:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.permutations:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.product:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.product:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.product:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.repeat:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.repeat:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.starmap:: WARNING: py:class reference target not found: aioitertools.types.R
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.starmap:: WARNING: py:class reference target not found: aioitertools.types.R
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.starmap:: WARNING: py:class reference target not found: aioitertools.types.R
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.takewhile:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.takewhile:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.takewhile:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.takewhile:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.takewhile:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.tee:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.tee:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/itertools.py:docstring of aioitertools.itertools.tee:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/more_itertools.py:docstring of aioitertools.more_itertools.take:: WARNING: py:class reference target not found: aioitertools.more_itertools.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/more_itertools.py:docstring of aioitertools.more_itertools.take:: WARNING: py:class reference target not found: aioitertools.more_itertools.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/more_itertools.py:docstring of aioitertools.more_itertools.take:: WARNING: py:class reference target not found: aioitertools.more_itertools.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/more_itertools.py:docstring of aioitertools.more_itertools.chunked:: WARNING: py:class reference target not found: aioitertools.more_itertools.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/more_itertools.py:docstring of aioitertools.more_itertools.chunked:: WARNING: py:class reference target not found: aioitertools.more_itertools.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/more_itertools.py:docstring of aioitertools.more_itertools.chunked:: WARNING: py:class reference target not found: aioitertools.more_itertools.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/asyncio.py:docstring of aioitertools.asyncio.as_completed:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/asyncio.py:docstring of aioitertools.asyncio.as_completed:: WARNING: py:class reference target not found: asyncio.events.AbstractEventLoop
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/asyncio.py:docstring of aioitertools.asyncio.as_completed:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/asyncio.py:docstring of aioitertools.asyncio.as_generated:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/asyncio.py:docstring of aioitertools.asyncio.as_generated:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/asyncio.py:docstring of aioitertools.asyncio.gather:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/asyncio.py:docstring of aioitertools.asyncio.gather:: WARNING: py:class reference target not found: asyncio.events.AbstractEventLoop
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/asyncio.py:docstring of aioitertools.asyncio.gather_iter:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/asyncio.py:docstring of aioitertools.asyncio.gather_iter:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/asyncio.py:docstring of aioitertools.asyncio.gather_iter:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/asyncio.py:docstring of aioitertools.asyncio.gather_iter:: WARNING: py:class reference target not found: aioitertools.types.T
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/asyncio.py:docstring of aioitertools.asyncio.gather_iter:: WARNING: py:class reference target not found: asyncio.events.AbstractEventLoop
/home/tkloczko/rpmbuild/BUILD/aioitertools-0.10.0/aioitertools/asyncio.py:docstring of aioitertools.asyncio.gather_iter:: WARNING: py:class reference target not found: aioitertools.types.T
done
build succeeded, 181 warnings.
You can peak on fixes that kind of issues in other projects
latchset/jwcrypto#289
click-contrib/sphinx-click@abc31069
latchset/jwcrypto#289
RDFLib/rdflib-sqlalchemy#95
Python 3.10 removes the loop=
argument from asyncio functions and breaks aioitertools. The issues can be demonstrated by the test suite:
$ pyenv install 3.10.0
$ pyenv global 3.10.0
$ ~/.pyenv/shims/python -m venv ~/tmp/venv-3.10
$ source ~/tmp/venv-3.10/bin/activate
$ python -m unittest -v aioitertools.tests
test_as_completed (aioitertools.tests.asyncio.AsyncioTest) ... /home/yen/tmp/aioitertools/aioitertools/tests/helpers.py:13: DeprecationWarning: There is no current event loop
loop = asyncio.get_event_loop()
ERROR
test_as_completed_timeout (aioitertools.tests.asyncio.AsyncioTest) ... ERROR
test_gather_cancel (aioitertools.tests.asyncio.AsyncioTest) ... ERROR
test_gather_input_types (aioitertools.tests.asyncio.AsyncioTest) ... ERROR
test_gather_limited (aioitertools.tests.asyncio.AsyncioTest) ... ERROR
test_gather_limited_dupes (aioitertools.tests.asyncio.AsyncioTest) ... ERROR
test_gather_with_exceptions (aioitertools.tests.asyncio.AsyncioTest) ... ERROR
test_import (aioitertools.tests.asyncio.AsyncioTest) ... ok
test_all_async_generator (aioitertools.tests.builtins.BuiltinsTest) ... Task exception was never retrieved
future: <Task finished name='Task-17' coro=<AsyncioTest.test_gather_with_exceptions.<locals>.fn() done, defined at /home/yen/tmp/aioitertools/aioitertools/tests/asyncio.py:115> exception=MyException(0.002)>
Traceback (most recent call last):
File "/home/yen/tmp/aioitertools/aioitertools/tests/asyncio.py", line 118, in fn
raise MyException(arg)
aioitertools.tests.asyncio.AsyncioTest.test_gather_with_exceptions.<locals>.MyException: 0.002
ERROR
test_all_generator (aioitertools.tests.builtins.BuiltinsTest) ... ERROR
test_all_list (aioitertools.tests.builtins.BuiltinsTest) ... ERROR
test_all_range (aioitertools.tests.builtins.BuiltinsTest) ... ERROR
test_any_async_generator (aioitertools.tests.builtins.BuiltinsTest) ... ERROR
test_any_generator (aioitertools.tests.builtins.BuiltinsTest) ... ERROR
test_any_list (aioitertools.tests.builtins.BuiltinsTest) ... ERROR
test_any_range (aioitertools.tests.builtins.BuiltinsTest) ... ERROR
test_enumerate (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_enumerate_start (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_iter_async_generator (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_iter_iterable (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_iter_iterator (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_iter_list (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_iter_range (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_list (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_map_coroutine_generator (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_map_coroutine_list (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_map_function_async_generator (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_map_function_list (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_max_basic (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_max_default (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_max_key (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_min_basic (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_min_default (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_min_key (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_next_async_generator (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_next_default_async_iterable (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_next_default_iterable (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_next_iterable (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_next_list (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_next_range (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_set (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_sum_list_string (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_sum_range_default (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_zip_equal (aioitertools.tests.builtins.BuiltinsTest) ... ok
test_maybe_await (aioitertools.tests.helpers.HelpersTest) ... ok
test_maybe_await_async_def (aioitertools.tests.helpers.HelpersTest) ... ok
test_maybe_await_coroutine (aioitertools.tests.helpers.HelpersTest) ... /home/yen/tmp/aioitertools/aioitertools/tests/helpers.py:38: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
def forty_two():
ok
test_maybe_await_partial (aioitertools.tests.helpers.HelpersTest) ... ok
test_accumulate_empty (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_accumulate_gen_coroutine (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_accumulate_gen_function (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_accumulate_range_coroutine (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_accumulate_range_default (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_accumulate_range_function (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_chain_from_iterable (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_chain_from_iterable_parameter_expansion_gen (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_chain_list_gens (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_chain_lists (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_combinations (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_combinations_with_replacement (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_compress_gen (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_compress_list (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_count_bare (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_count_negative (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_count_start (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_count_start_step (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_cycle_gen (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_cycle_list (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_dropwhile_coroutine_gen (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_dropwhile_coroutine_list (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_dropwhile_empty (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_dropwhile_function_gen (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_dropwhile_function_list (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_filterfalse_coroutine_list (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_filterfalse_function_list (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_groupby_empty (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_groupby_gen (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_groupby_gen_key (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_groupby_list (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_groupby_list_key (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_islice_bad_range (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_islice_gen_start_step (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_islice_gen_start_stop (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_islice_gen_start_stop_step (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_islice_gen_stop (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_islice_range_start_step (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_islice_range_start_stop (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_islice_range_start_stop_step (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_islice_range_stop (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_islice_stop_zero (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_permutations_gen (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_permutations_list (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_product_gen (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_product_list (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_repeat (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_repeat_limit (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_starmap_coroutine_gen (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_starmap_coroutine_list (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_starmap_function_gen (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_starmap_function_list (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_takewhile_coroutine_gen (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_takewhile_coroutine_list (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_takewhile_empty (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_takewhile_function_gen (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_takewhile_function_list (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_tee_gen_six (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_tee_gen_two (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_tee_list_six (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_tee_list_two (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_tee_propagate_exception (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_zip_longest_exception (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_zip_longest_fillvalue (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_zip_longest_range (aioitertools.tests.itertools.ItertoolsTest) ... ok
test_chunked (aioitertools.tests.more_itertools.MoreItertoolsTest) ... ok
test_chunked_empty (aioitertools.tests.more_itertools.MoreItertoolsTest) ... ok
test_take (aioitertools.tests.more_itertools.MoreItertoolsTest) ... ok
test_take_empty (aioitertools.tests.more_itertools.MoreItertoolsTest) ... ok
test_take_more_than_iterable (aioitertools.tests.more_itertools.MoreItertoolsTest) ... ok
test_take_negative (aioitertools.tests.more_itertools.MoreItertoolsTest) ... ok
test_take_zero (aioitertools.tests.more_itertools.MoreItertoolsTest) ... ok
======================================================================
ERROR: test_as_completed (aioitertools.tests.asyncio.AsyncioTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/yen/tmp/aioitertools/aioitertools/tests/helpers.py", line 14, in wrapped
return loop.run_until_complete(fn(*args, **kwargs))
File "/home/yen/.pyenv/versions/3.10.0/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
return future.result()
File "/home/yen/tmp/aioitertools/aioitertools/tests/asyncio.py", line 29, in test_as_completed
results = await ait.list(aio.as_completed(futures))
File "/home/yen/tmp/aioitertools/aioitertools/builtins.py", line 163, in list
return [item async for item in iter(itr)]
File "/home/yen/tmp/aioitertools/aioitertools/builtins.py", line 163, in <listcomp>
return [item async for item in iter(itr)]
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 60, in as_completed
await asyncio.wait(
TypeError: wait() got an unexpected keyword argument 'loop'
======================================================================
ERROR: test_as_completed_timeout (aioitertools.tests.asyncio.AsyncioTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/yen/tmp/aioitertools/aioitertools/tests/helpers.py", line 14, in wrapped
return loop.run_until_complete(fn(*args, **kwargs))
File "/home/yen/.pyenv/versions/3.10.0/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
return future.result()
File "/home/yen/tmp/aioitertools/aioitertools/tests/asyncio.py", line 44, in test_as_completed_timeout
await ait.list(aio.as_completed(futures, timeout=0.5))
File "/home/yen/tmp/aioitertools/aioitertools/builtins.py", line 163, in list
return [item async for item in iter(itr)]
File "/home/yen/tmp/aioitertools/aioitertools/builtins.py", line 163, in <listcomp>
return [item async for item in iter(itr)]
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 60, in as_completed
await asyncio.wait(
TypeError: wait() got an unexpected keyword argument 'loop'
======================================================================
ERROR: test_gather_cancel (aioitertools.tests.asyncio.AsyncioTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/yen/tmp/aioitertools/aioitertools/tests/helpers.py", line 14, in wrapped
return loop.run_until_complete(fn(*args, **kwargs))
File "/home/yen/.pyenv/versions/3.10.0/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
return future.result()
File "/home/yen/tmp/aioitertools/aioitertools/tests/asyncio.py", line 157, in test_gather_cancel
await task
File "/home/yen/tmp/aioitertools/aioitertools/tests/asyncio.py", line 146, in _gather
await aio.gather(_fn())
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 126, in gather
done, pending = await asyncio.wait(
TypeError: wait() got an unexpected keyword argument 'loop'
======================================================================
ERROR: test_gather_input_types (aioitertools.tests.asyncio.AsyncioTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/yen/tmp/aioitertools/aioitertools/tests/helpers.py", line 14, in wrapped
return loop.run_until_complete(fn(*args, **kwargs))
File "/home/yen/.pyenv/versions/3.10.0/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
return future.result()
File "/home/yen/tmp/aioitertools/aioitertools/tests/asyncio.py", line 66, in test_gather_input_types
result = await aio.gather(*fns)
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 126, in gather
done, pending = await asyncio.wait(
TypeError: wait() got an unexpected keyword argument 'loop'
======================================================================
ERROR: test_gather_limited (aioitertools.tests.asyncio.AsyncioTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/yen/tmp/aioitertools/aioitertools/tests/helpers.py", line 14, in wrapped
return loop.run_until_complete(fn(*args, **kwargs))
File "/home/yen/.pyenv/versions/3.10.0/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
return future.result()
File "/home/yen/tmp/aioitertools/aioitertools/tests/asyncio.py", line 83, in test_gather_limited
result = await aio.gather(*[fn(i) for i in range(10)], limit=2)
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 126, in gather
done, pending = await asyncio.wait(
TypeError: wait() got an unexpected keyword argument 'loop'
======================================================================
ERROR: test_gather_limited_dupes (aioitertools.tests.asyncio.AsyncioTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/yen/tmp/aioitertools/aioitertools/tests/helpers.py", line 14, in wrapped
return loop.run_until_complete(fn(*args, **kwargs))
File "/home/yen/.pyenv/versions/3.10.0/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
return future.result()
File "/home/yen/tmp/aioitertools/aioitertools/tests/asyncio.py", line 102, in test_gather_limited_dupes
result = await aio.gather(f, f, f, g, f, g, limit=2)
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 126, in gather
done, pending = await asyncio.wait(
TypeError: wait() got an unexpected keyword argument 'loop'
======================================================================
ERROR: test_gather_with_exceptions (aioitertools.tests.asyncio.AsyncioTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/yen/tmp/aioitertools/aioitertools/tests/helpers.py", line 14, in wrapped
return loop.run_until_complete(fn(*args, **kwargs))
File "/home/yen/.pyenv/versions/3.10.0/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
return future.result()
File "/home/yen/tmp/aioitertools/aioitertools/tests/asyncio.py", line 122, in test_gather_with_exceptions
await aio.gather(fn(0.002, fail=True), fn(0.001))
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 126, in gather
done, pending = await asyncio.wait(
TypeError: wait() got an unexpected keyword argument 'loop'
======================================================================
ERROR: test_all_async_generator (aioitertools.tests.builtins.BuiltinsTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/yen/tmp/aioitertools/aioitertools/tests/helpers.py", line 14, in wrapped
return loop.run_until_complete(fn(*args, **kwargs))
File "/home/yen/.pyenv/versions/3.10.0/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
return future.result()
File "/home/yen/tmp/aioitertools/aioitertools/tests/builtins.py", line 38, in test_all_async_generator
self.assertTrue(await ait.all(ait.iter(srange1)))
File "/home/yen/tmp/aioitertools/aioitertools/builtins.py", line 69, in all
return builtins.all(await ait_asyncio.gather_iter(itr))
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 163, in gather_iter
return await gather(
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 126, in gather
done, pending = await asyncio.wait(
TypeError: wait() got an unexpected keyword argument 'loop'
======================================================================
ERROR: test_all_generator (aioitertools.tests.builtins.BuiltinsTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/yen/tmp/aioitertools/aioitertools/tests/helpers.py", line 14, in wrapped
return loop.run_until_complete(fn(*args, **kwargs))
File "/home/yen/.pyenv/versions/3.10.0/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
return future.result()
File "/home/yen/tmp/aioitertools/aioitertools/tests/builtins.py", line 33, in test_all_generator
self.assertTrue(await ait.all(x for x in srange1))
File "/home/yen/tmp/aioitertools/aioitertools/builtins.py", line 69, in all
return builtins.all(await ait_asyncio.gather_iter(itr))
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 163, in gather_iter
return await gather(
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 126, in gather
done, pending = await asyncio.wait(
TypeError: wait() got an unexpected keyword argument 'loop'
======================================================================
ERROR: test_all_list (aioitertools.tests.builtins.BuiltinsTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/yen/tmp/aioitertools/aioitertools/tests/helpers.py", line 14, in wrapped
return loop.run_until_complete(fn(*args, **kwargs))
File "/home/yen/.pyenv/versions/3.10.0/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
return future.result()
File "/home/yen/tmp/aioitertools/aioitertools/tests/builtins.py", line 23, in test_all_list
self.assertTrue(await ait.all([True, 1, "string"]))
File "/home/yen/tmp/aioitertools/aioitertools/builtins.py", line 69, in all
return builtins.all(await ait_asyncio.gather_iter(itr))
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 163, in gather_iter
return await gather(
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 126, in gather
done, pending = await asyncio.wait(
TypeError: wait() got an unexpected keyword argument 'loop'
======================================================================
ERROR: test_all_range (aioitertools.tests.builtins.BuiltinsTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/yen/tmp/aioitertools/aioitertools/tests/helpers.py", line 14, in wrapped
return loop.run_until_complete(fn(*args, **kwargs))
File "/home/yen/.pyenv/versions/3.10.0/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
return future.result()
File "/home/yen/tmp/aioitertools/aioitertools/tests/builtins.py", line 28, in test_all_range
self.assertTrue(await ait.all(srange1))
File "/home/yen/tmp/aioitertools/aioitertools/builtins.py", line 69, in all
return builtins.all(await ait_asyncio.gather_iter(itr))
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 163, in gather_iter
return await gather(
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 126, in gather
done, pending = await asyncio.wait(
TypeError: wait() got an unexpected keyword argument 'loop'
======================================================================
ERROR: test_any_async_generator (aioitertools.tests.builtins.BuiltinsTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/yen/tmp/aioitertools/aioitertools/tests/helpers.py", line 14, in wrapped
return loop.run_until_complete(fn(*args, **kwargs))
File "/home/yen/.pyenv/versions/3.10.0/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
return future.result()
File "/home/yen/tmp/aioitertools/aioitertools/tests/builtins.py", line 62, in test_any_async_generator
self.assertTrue(await ait.any(ait.iter(srange)))
File "/home/yen/tmp/aioitertools/aioitertools/builtins.py", line 84, in any
return builtins.any(await ait_asyncio.gather_iter(itr))
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 163, in gather_iter
return await gather(
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 126, in gather
done, pending = await asyncio.wait(
TypeError: wait() got an unexpected keyword argument 'loop'
======================================================================
ERROR: test_any_generator (aioitertools.tests.builtins.BuiltinsTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/yen/tmp/aioitertools/aioitertools/tests/helpers.py", line 14, in wrapped
return loop.run_until_complete(fn(*args, **kwargs))
File "/home/yen/.pyenv/versions/3.10.0/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
return future.result()
File "/home/yen/tmp/aioitertools/aioitertools/tests/builtins.py", line 56, in test_any_generator
self.assertTrue(await ait.any(x for x in srange))
File "/home/yen/tmp/aioitertools/aioitertools/builtins.py", line 84, in any
return builtins.any(await ait_asyncio.gather_iter(itr))
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 163, in gather_iter
return await gather(
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 126, in gather
done, pending = await asyncio.wait(
TypeError: wait() got an unexpected keyword argument 'loop'
======================================================================
ERROR: test_any_list (aioitertools.tests.builtins.BuiltinsTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/yen/tmp/aioitertools/aioitertools/tests/helpers.py", line 14, in wrapped
return loop.run_until_complete(fn(*args, **kwargs))
File "/home/yen/.pyenv/versions/3.10.0/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
return future.result()
File "/home/yen/tmp/aioitertools/aioitertools/tests/builtins.py", line 45, in test_any_list
self.assertTrue(await ait.any([False, 1, ""]))
File "/home/yen/tmp/aioitertools/aioitertools/builtins.py", line 84, in any
return builtins.any(await ait_asyncio.gather_iter(itr))
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 163, in gather_iter
return await gather(
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 126, in gather
done, pending = await asyncio.wait(
TypeError: wait() got an unexpected keyword argument 'loop'
======================================================================
ERROR: test_any_range (aioitertools.tests.builtins.BuiltinsTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/yen/tmp/aioitertools/aioitertools/tests/helpers.py", line 14, in wrapped
return loop.run_until_complete(fn(*args, **kwargs))
File "/home/yen/.pyenv/versions/3.10.0/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
return future.result()
File "/home/yen/tmp/aioitertools/aioitertools/tests/builtins.py", line 50, in test_any_range
self.assertTrue(await ait.any(srange))
File "/home/yen/tmp/aioitertools/aioitertools/builtins.py", line 84, in any
return builtins.any(await ait_asyncio.gather_iter(itr))
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 163, in gather_iter
return await gather(
File "/home/yen/tmp/aioitertools/aioitertools/asyncio.py", line 126, in gather
done, pending = await asyncio.wait(
TypeError: wait() got an unexpected keyword argument 'loop'
----------------------------------------------------------------------
Ran 120 tests in 0.035s
FAILED (errors=15)
If I also remove loop=
arguments from aioitertools, tests are green.
diff --git a/aioitertools/asyncio.py b/aioitertools/asyncio.py
index 663c818..4bc800b 100644
--- a/aioitertools/asyncio.py
+++ b/aioitertools/asyncio.py
@@ -59,7 +59,6 @@ async def as_completed(
Tuple[Set[Awaitable[T]], Set[Awaitable[T]]],
await asyncio.wait(
pending,
- loop=loop,
timeout=remaining,
return_when=asyncio.FIRST_COMPLETED,
),
@@ -124,7 +123,7 @@ async def gather(
if pending:
try:
done, pending = await asyncio.wait(
- pending, loop=loop, return_when=asyncio.FIRST_COMPLETED
+ pending, return_when=asyncio.FIRST_COMPLETED
)
for x in done:
if return_exceptions and x.exception():
@@ -136,7 +135,7 @@ async def gather(
for x in pending:
x.cancel()
# we insure that all tasks are cancelled before we raise
- await asyncio.gather(*pending, loop=loop, return_exceptions=True)
+ await asyncio.gather(*pending, return_exceptions=True)
raise
if not pending and next_arg == len(args):
@@ -162,7 +161,6 @@ async def gather_iter(
"""
return await gather(
*[maybe_await(i) async for i in aiter(itr)],
- loop=loop,
return_exceptions=return_exceptions,
limit=limit,
)
I'm not sure if it's a good idea, though, as modified aioitertools functions still accept a loop=
argument while silently ignores it.
The implementation of aioitertools.itertools.tee currently has the caveat "all iterators are dependent on the first iterator." This caveat can cause periodic stalls in my pipeline where the consumers all consume at roughly the same speed, with small imbalances.
A small refactor of tee
could remove this limitation if the producer was a separate scheduled task (instead of the first consumer). Would you be open to a pull request for a change along these lines?
Hypothetical code, but not very far from my use case:
from chardet.universaldetector import UniversalDetector
with peekerator(bytestream) as (peek, bytestream):
detector = UniversalDetector()
async for chunk in peek:
detector.feed(chunk)
if detector.done:
break
encoding = detector.close().get('encoding')
async for line in iterdecode(bytestream, encoding):
print(line)
With bytestream
being something like starlette.requests.Request.stream(). And here's my implementation of peekerator
, which I think would be a nice addition to aioitertools.
from collections import deque
from contextlib import contextmanager
from aioitertools.builtins import iter
@contextmanager
def peekerator(iterator):
it = iter(iterator)
cache = deque()
async def peek():
async for el in it:
cache.append(el)
yield el
async def real():
while True:
if cache:
yield cache.popleft()
else:
try:
yield await it.__anext__()
except StopAsyncIteration:
return
yield peek(),real()
The idea is based on more_itertools.peekable but with an peeking iterator instead of method and without the added overhead of implementing prepend and indexing.
If there's interest in adding this, I'd package it up with tests and documentation as a pull request. The name is, of course, up for discussion.
With the updates to typings, support for PEP-561, and the other improvements, do you think we need a new release?
When using zip
, the code uses gather
on __anext__
of all iterables, until one of them stops. However, we do not cancel the gather, which means any running __anext__
s will run until finished. It makes more sense to cancel them so when we return from zip
there are no "garbage" tasks running in the background.
iter
is currently defined as such:
def iter(itr: AnyIterable[T]) -> AsyncIterator[T]:
if isinstance(itr, AsyncIterator):
return itr
if isinstance(itr, AsyncIterable):
return itr.__aiter__()
This causes an issue for classes defined as such:
class Foo:
def __aiter__(self):
return self.__anext__()
@async_generator
async def __anext__(self):
...
since it won't use the object returned by __aiter__()
as both isinstance checks are true. I believe these two checks should be reversed with a comment why they are in the order they are.
I try to use aioitertools.zip_longest
in my code, but I get an error in Python 3.8:
RuntimeError: anext(): asynchronous generator is already running
Also the same code works fine in Python 3.6 and 3.7
A minimal code example for reproducing:
import asyncio
import aioitertools
async def producer_gen(n: int = 10):
async for data in aioitertools.zip_longest(range(n), range(n), fillvalue=None):
yield data
async def worker(w, producer):
async for n in producer:
print(w, n)
await asyncio.sleep(0.1)
async def main():
producer = producer_gen()
tasks = [asyncio.ensure_future(worker(w, producer)) for w in range(5)]
await asyncio.gather(*tasks)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
Almost expected output:
0 (0, 0)
1 (1, 1)
2 (2, 2)
3 (3, 3)
4 (4, 4)
0 (5, 5)
2 (6, 6)
4 (7, 7)
1 (8, 8)
3 (9, 9)
Actual output:
0 (0, 0)
Traceback (most recent call last):
File "C:/Users/Eugene/AppData/Roaming/JetBrains/PyCharm2020.1/scratches/scratch_67.py", line 20, in <module>
loop.run_until_complete(main())
File "C:\Programs\Python\Python38_x64\lib\asyncio\base_events.py", line 612, in run_until_complete
return future.result()
File "C:/Users/Eugene/AppData/Roaming/JetBrains/PyCharm2020.1/scratches/scratch_67.py", line 16, in main
await asyncio.gather(*tasks)
File "C:/Users/Eugene/AppData/Roaming/JetBrains/PyCharm2020.1/scratches/scratch_67.py", line 9, in worker
async for n in producer:
RuntimeError: anext(): asynchronous generator is already running
If we do not use itertools.zip_longest
the code works correclty:
async def producer_gen(n: int = 10):
for i in range(n):
yield i
...
async def main():
producer = producer_gen()
tasks = [asyncio.ensure_future(worker(w, producer)) for w in range(5)]
await asyncio.gather(*tasks)
...
Output:
0 0
1 1
2 2
3 3
4 4
0 5
2 6
4 7
1 8
3 9
Several types of objects can be used in an await
statement: coroutines, objects that implement __await__
, tasks, and futures. The function itself does not always indicate if the return value is awaitable. The following demonstrates some of the problems with using asyncio.iscoroutinefunction()
:
import asyncio
from functools import partial
async def multiply(a, b):
await asyncio.sleep(0.1)
return a * b
multiply5 = partial(multiply, 5)
asyncio.iscoroutinefunction(multiply5) # False
def can_be_awaited():
class a:
def __await__(self):
yield 42
return a()
asyncio.iscoroutinefunction(multiply5) # False
def multiply_task(a, b):
return asyncio.create_task(multiply(a, b))
asyncio.iscoroutinefunction(multiply_task) # False
The more reliable way to handle coroutines is using inspect.isawaitable()
on the return value of a function.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.