[Python-checkins] cpython: Issue 24179: Support 'async for' for asyncio.StreamReader.
yury.selivanov
python-checkins at python.org
Wed May 13 20:24:07 CEST 2015
https://hg.python.org/cpython/rev/4f6978343ef6
changeset: 96030:4f6978343ef6
user: Yury Selivanov <yselivanov at sprymix.com>
date: Wed May 13 14:23:29 2015 -0400
summary:
Issue 24179: Support 'async for' for asyncio.StreamReader.
files:
Lib/asyncio/streams.py | 14 +++++++++++
Lib/test/test_asyncio/test_pep492.py | 19 ++++++++++++++++
Misc/NEWS | 3 ++
3 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/Lib/asyncio/streams.py b/Lib/asyncio/streams.py
--- a/Lib/asyncio/streams.py
+++ b/Lib/asyncio/streams.py
@@ -6,6 +6,7 @@
]
import socket
+import sys
if hasattr(socket, 'AF_UNIX'):
__all__.extend(['open_unix_connection', 'start_unix_server'])
@@ -19,6 +20,7 @@
_DEFAULT_LIMIT = 2**16
+_PY35 = sys.version_info >= (3, 5)
class IncompleteReadError(EOFError):
@@ -485,3 +487,15 @@
n -= len(block)
return b''.join(blocks)
+
+ if _PY35:
+ @coroutine
+ def __aiter__(self):
+ return self
+
+ @coroutine
+ def __anext__(self):
+ val = yield from self.readline()
+ if val == b'':
+ raise StopAsyncIteration
+ return val
diff --git a/Lib/test/test_asyncio/test_pep492.py b/Lib/test/test_asyncio/test_pep492.py
--- a/Lib/test/test_asyncio/test_pep492.py
+++ b/Lib/test/test_asyncio/test_pep492.py
@@ -64,5 +64,24 @@
self.assertFalse(primitive.locked())
+class StreamReaderTests(BaseTest):
+
+ def test_readline(self):
+ DATA = b'line1\nline2\nline3'
+
+ stream = asyncio.StreamReader(loop=self.loop)
+ stream.feed_data(DATA)
+ stream.feed_eof()
+
+ async def reader():
+ data = []
+ async for line in stream:
+ data.append(line)
+ return data
+
+ data = self.loop.run_until_complete(reader())
+ self.assertEqual(data, [b'line1\n', b'line2\n', b'line3'])
+
+
if __name__ == '__main__':
unittest.main()
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -119,6 +119,9 @@
- Issue 24178: asyncio.Lock, Condition, Semaphore, and BoundedSemaphore
support new 'async with' syntax. Contributed by Yury Selivanov.
+- Issue 24179: Support 'async for' for asyncio.StreamReader.
+ Contributed by Yury Selivanov.
+
Tests
-----
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list