8000 bpo-36889: Merge asyncio streams by asvetlov · Pull Request #13251 · python/cpython · GitHub
[go: up one dir, main page]

Skip to content

bpo-36889: Merge asyncio streams #13251

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 95 commits into from
May 27, 2019
Merged
Changes from 1 commit
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
1ba375b
Merge StreamReader and StreamWriter
asvetlov May 11, 2019
1af2238
Merge StreamReader and StreamWriter
asvetlov May 11, 2019
d0543a5
Work on
asvetlov May 11, 2019
b3cf11c
Work on
asvetlov May 11, 2019
b059fd9
...
asvetlov May 11, 2019
d5c3391
...
asvetlov May 13, 2019
89d097d
Merge branch 'master' into merge-streams
asvetlov May 13, 2019
abce39c
../..
asvetlov May 13, 2019
0c8e8af
Fix tests
asvetlov May 13, 2019
e0a54d0
kind -> mode
asvetlov May 13, 2019
a632339
Fix streams
asvetlov May 13, 2019
97641eb
Convert subprocess to use Stream instead of StreamReader/StreamWriter
asvetlov May 13, 2019
962495b
Reimplement deprecation strategy
asvetlov May 13, 2019
0ec17ed
Disallow asyncio.StreamReaderProtocol usage outside of asyncio package
asvetlov May 13, 2019
77bf0e4
Fix test___all__
asvetlov May 13, 2019
f46854f
Don't expose asyncio.StreamReaderProtocol
asvetlov May 13, 2019
13f1430
Ignore warning registry in test___all__
asvetlov May 13, 2019
a1bf0b7
Support close on stdout/stderr
asvetlov May 13, 2019
062b570
Fix Windows
asvetlov May 13, 2019
ec24c70
make patchcheck
asvetlov May 13, 2019
a45bdca
Fix import names
asvetlov May 13, 2019
5cc3107
Fix typo
asvetlov May 14, 2019
1d2cf87
Add NEWS
asvetlov May 14, 2019
d2f91c1
Split StreamReaderProtocol into _StreamProtocol and _ServerStreamProt…
asvetlov May 14, 2019
7bc248e
Replace Enum with Flag
asvetlov May 14, 2019
6270289
Add tests for stream mode
asvetlov May 14, 2019
f04352b
Create a server stream in protocol.connection_made()
asvetlov May 14, 2019
e92a1ec
Merge branch 'master' into merge-streams
asvetlov May 14, 2019
e848308
Merge branch 'master' into merge-streams
asvetlov May 14, 2019
958111a
Merge branch 'master' into merge-streams
asvetlov May 15, 2019
2cc72b8
Add conntect method
asvetlov May 15, 2019
7148c6f
Merge branch 'master' into merge-streams
asvetlov May 16, 2019
e7fcb06
Work on
asvetlov May 17, 2019
775860f
Sketch StreamServer class
asvetlov May 17, 2019
75421d7
Work on
asvetlov May 20, 2019
7d11e4f
Fix stream test
asvetlov May 21, 2019
03cc501
Test cleanup
asvetlov May 21, 2019
30b1cb6
Merge branch 'master' into merge-streams
asvetlov May 21, 2019
ca7f479
Add unix server test
asvetlov May 21, 2019
7ff3b9f
Add tests for server.bind()
asvetlov May 21, 2019
a34bbed
Rename private method
asvetlov May 21, 2019
9486196
More tests
asvetlov May 21, 2019
4a4a2e0
More tests
asvetlov May 21, 2019
414939b
Drop low-level server early
asvetlov May 21, 2019
c62b8b4
More tests
asvetlov May 21, 2019
b84cf84
Add more tests
asvetlov May 21, 2019
e233c06
Merge branch 'master' into merge-streams
asvetlov May 22, 2019
f4572c8
Forbid stream servers inheritance
asvetlov May 22, 2019
37a2949
Add tests for stream sendfile
asvetlov May 22, 2019
c73ddfd
Add start_tls method
asvetlov May 22, 2019
3f9bc91
served_names() -> addresses()
asvetlov May 22, 2019
7eca1fc
Drop obsolete TODOs
asvetlov May 22, 2019
ab41dd6
Drop redundant TODO
asvetlov May 22, 2019
1716e92
Add test for stream.is_server_side()
asvetlov May 22, 2019
6a41b1f
Polish
asvetlov May 22, 2019
774e9f1
Fix imports
asvetlov May 22, 2019
c54f64b
Fix inheritance error
asvetlov May 22, 2019
efcb326
Update Lib/asyncio/streams.py
asvetlov May 22, 2019
066d317
Update Lib/asyncio/streams.py
asvetlov May 22, 2019
b64c9af
Update Lib/asyncio/streams.py
asvetlov May 22, 2019
12e4f07
Make client_connected_cb positional-only
asvetlov May 22, 2019
d68f728
Merge branch 'merge-streams' of github.com:asvetlov/cpython into merg…
asvetlov May 22, 2019
035cf3f
addresses -> listeners
asvetlov May 23, 2019
8000 9acd1a2
Revert back StreamReader and StreamWriter
asvetlov May 23, 2019
25d59fe
Fix exception names
asvetlov May 23, 2019
e076498
Deprecate old streams
asvetlov May 23, 2019
ef44960
Fix tests
asvetlov May 23, 2019
6dbe705
Merge branch 'merge-streams' of github.com:asvetlov/cpython into merg…
asvetlov May 23, 2019
504ea78
Process deprecated StreamReader and StreamWriter in test_all
asvetlov May 23, 2019
c1cc242
Deprecate StreamReaderProtocol import
asvetlov May 23, 2019
fd2a6eb
Fix module name
asvetlov May 23, 2019
b6fbc9f
Suppress deprecation warnings
asvetlov May 23, 2019
c190c72
Fix another warning
asvetlov May 23, 2019
d80cb9c
listeners -> sockets
asvetlov May 24, 2019
dcc3353
Merge branch 'master' into merge-streams
asvetlov May 24, 2019
1ae7d8d
Add repr
asvetlov May 24, 2019
9d34da8
Fix comment
asvetlov May 24, 2019
d0c9ada
Fix comment
asvetlov May 24, 2019
af5f27e
Implement async with stream: ...
asvetlov May 24, 2019
a734f06
_low_server -> _server_impl
asvetlov May 24, 2019
e01b394
Support async with asyncio.connect(): ...
asvetlov May 24, 2019
0ef2195
Use _OptionalAwait
asvetlov May 24, 2019
b533f5d
Merge branch 'master' into merge-streams
asvetlov May 25, 2019
75804f6
Imprement connect_read_pipe and connect_write_pipe stream factories
asvetlov May 25, 2019
476de4e
Update Lib/asyncio/streams.py
asvetlov May 27, 2019
2d874c7
Update Lib/asyncio/streams.py
asvetlov May 27, 2019
d5c207b
Fix notes
asvetlov May 27, 2019
30bdbe2
Merge branch 'merge-streams' of github.com:asvetlov/cpython into merg…
asvetlov May 27, 2019
0521b1f
Return _OptionalAwait from stream.close()
asvetlov May 27, 2019
5b4b7fd
Make _check_read() and _check_write() top-level functions
asvetlov May 27, 2019
567f154
Return empty tuple instead of list if StreamServer.sockets is empty
asvetlov May 27, 2019
8cf6bf1
Rename private helpers
asvetlov May 27, 2019
217ea19
Merge branch 'master' into merge-streams
asvetlov May 27, 2019
99f4839
Make more detailed NEWS
asvetlov May 27, 2019
4ac5ce1
Fix tests
asvetlov May 27, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
kind -> mode
  • Loading branch information
asvetlov committed May 13, 2019
commit e0a54d03043d2efc11891ba163d310b08d6485de
52 changes: 29 additions & 23 deletions Lib/asyncio/streams.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
_DEFAULT_LIMIT = 2 ** 16 # 64 KiB


class StreamKind(enum.Enum):
class StreamMode(enum.Enum):
READ = "read"
WRITE = "write"
READWRITE = "readwrite"
Expand Down Expand Up @@ -64,7 +64,7 @@ async def open_connection(host=None, port=None, *,
"""
if loop is None:
loop = events.get_event_loop()
stream = Stream(kind=StreamKind.READWRITE,
stream = Stream(mode=StreamMode.READWRITE,
limit=limit,
loop=loop,
_asyncio_internal=True)
Expand Down Expand Up @@ -102,7 +102,7 @@ async def start_server(client_connected_cb, host=None, port=None, *,
loop = events.get_event_loop()

def factory():
stream = Stream(kind=StreamKind.READWRITE,
stream = Stream(mode=StreamMode.READWRITE,
limit=limit,
loop=loop,
_asyncio_internal=True)
Expand All @@ -122,7 +122,7 @@ async def open_unix_connection(path=None, *,
"""Similar to `open_connection` but works with UNIX Domain Sockets."""
if loop is None:
loop = events.get_event_loop()
stream = Stream(kind=StreamKind.READWRITE,
stream = Stream(mode=StreamMode.READWRITE,
limit=limit,
loop=loop,
_asyncio_internal=True)
Expand All @@ -140,7 +140,7 @@ async def start_unix_server(client_connected_cb, path=None, *,
loop = events.get_event_loop()

def factory():
stream = Stream(kind=StreamKind.READWRITE,
stream = Stream(mode=StreamMode.READWRITE,
limit=limit,
loop=loop,
_asyncio_internal=True)
Expand Down Expand Up @@ -362,7 +362,7 @@ class Stream:

_source_traceback = None

def __init__(self, kind, *,
def __init__(self, mode, *,
transport=None,
protocol=None,
loop=None,
Expand All @@ -373,7 +373,7 @@ def __init__(self, kind, *,
"by asyncio internals only, "
"please avoid its creation from user code",
DeprecationWarning)
self._kind = kind
self._mode = mode
self._transport = transport
self._protocol = protocol

Expand Down Expand Up @@ -402,7 +402,7 @@ def __init__(self, kind, *,

def __repr__(self):
info = [self.__class__.__name__]
info.append(f'kind={self._kind}')
info.append(f'mode={self._mode}')
if self._buffer:
info.append(f'{len(self._buffer)} bytes')
if self._eof:
Expand All @@ -424,12 +424,12 @@ def transport(self):
return self._transport

def write(self, data):
self._kind.check_write()
self._mode.check_write()
self._transport.write(data)
return self._fast_drain()

def writelines(self, data):
self._kind.check_write()
self._mode.check_write()
self._transport.writelines(data)
return self._fast_drain()

Expand All @@ -454,11 +454,11 @@ def _fast_drain(self):
return self._loop.create_task(self.drain())

def write_eof(self):
self._kind.check_write()
self._mode.check_write()
return self._transport.write_eof()

def can_write_eof(self):
if not self._kind.is_write():
if not self._mode.is_write():
return False
return self._transport.can_write_eof()

Expand All @@ -483,7 +483,7 @@ async def drain(self):
w.write(data)
await w.drain()
"""
self._kind.check_write()
self._mode.check_write()
exc = self.exception()
if exc is not None:
raise exc
Expand Down Expand Up @@ -526,17 +526,17 @@ def _maybe_resume_transport(self):
self._transport.resume_reading()

def feed_eof(self):
self._kind.check_read()
self._mode.check_read()
self._eof = True
self._wakeup_waiter()

def at_eof(self):
"""Return True if the buffer is empty and 'feed_eof' was called."""
self._kind.check_read()
self._mode.check_read()
return self._eof and not self._buffer

def feed_data(self, data):
self._kind.check_read()
self._mode.check_read()
assert not self._eof, 'feed_data after feed_eof'

if not data:
Expand Down Expand Up @@ -602,7 +602,7 @@ async def readline(self):
If stream was paused, this function will automatically resume it if
needed.
"""
self._kind.check_read()
self._mode.check_read()
sep = b'\n'
seplen = len(sep)
try:
Expand Down Expand Up @@ -638,7 +638,7 @@ async def readuntil(self, separator=b'\n'):
LimitOverrunError exception will be raised, and the data
will be left in the internal buffer, so it can be read again.
"""
self._kind.check_read()
self._mode.check_read()
seplen = len(separator)
if seplen == 0:
raise ValueError('Separator should be at least one-byte string')
Expand Down Expand Up @@ -730,7 +730,7 @@ async def read(self, n=-1):
If stream was paused, this function will automatically resume it if
needed.
"""
self._kind.check_read()
self._mode.check_read()

if self._exception is not None:
raise self._exception
Expand Down Expand Up @@ -776,7 +776,7 @@ async def readexactly(self, n):
If stream was paused, this function will automatically resume it if
needed.
"""
self._kind.check_read()
self._mode.check_read()
if n < 0:
raise ValueError('readexactly size can not be less than zero')

Expand Down Expand Up @@ -804,7 +804,7 @@ async def readexactly(self, n):
return data

def __aiter__(self):
self._kind.check_read()
self._mode.check_read()
return self

async def __anext__(self):
Expand All @@ -817,7 +817,10 @@ async def __anext__(self):
class StreamWriter(Stream):
def __init__(self, transport, protocol, reader, loop,
*, _asyncio_internal=False):
super().__init__(kind=StreamKind.WRITE,
warnings.warn("StreamReader class is deprecated in favor of Stream",
DeprecationWarning,
stacklevel=2)
super().__init__(mode=StreamMode.WRITE,
transport=transport,
protocol=protocol,
loop=loop,
Expand All @@ -828,7 +831,10 @@ def __init__(self, transport, protocol, reader, loop,
class StreamReader(Stream):
def __init__(self, limit=_DEFAULT_LIMIT, loop=None,
*, _asyncio_internal=False):
super().__init__(kind=StreamKind.READ,
warnings.warn("StreamWriter class is deprecated in favor of Stream",
DeprecationWarning,
stacklevel=2)
super().__init__(mode=StreamMode.READ,
limit=limit,
loop=loop,
_asyncio_internal=_asyncio_internal,
Expand Down
0