Add as_async_generator.

This commit is contained in:
Andrey Rakhmatullin 2021-02-02 13:36:25 +05:00
parent 904a50138b
commit 76abcedaf4
2 changed files with 32 additions and 0 deletions

View File

@ -1,5 +1,17 @@
import collections
async def collect_asyncgen(result):
results = []
async for x in result:
results.append(x)
return results
async def as_async_generator(it):
if isinstance(it, collections.abc.AsyncIterator):
async for r in it:
yield r
else:
for r in it:
yield r

View File

@ -0,0 +1,20 @@
from twisted.trial import unittest
from scrapy.utils.asyncgen import as_async_generator, collect_asyncgen
from scrapy.utils.defer import deferred_f_from_coro_f
class AsyncgenUtilsTest(unittest.TestCase):
@deferred_f_from_coro_f
async def test_as_async_generator(self):
ag = as_async_generator(range(42))
results = []
async for i in ag:
results.append(i)
self.assertEqual(results, list(range(42)))
@deferred_f_from_coro_f
async def test_collect_asyncgen(self):
ag = as_async_generator(range(42))
results = await collect_asyncgen(ag)
self.assertEqual(results, list(range(42)))