Kaydet (Commit) f0020f5d authored tarafından Yury Selivanov's avatar Yury Selivanov

asyncio.streams.StreamReader: Add 'at_eof()' method

üst e694c974
...@@ -293,6 +293,10 @@ class StreamReader: ...@@ -293,6 +293,10 @@ class StreamReader:
if not waiter.cancelled(): if not waiter.cancelled():
waiter.set_result(True) waiter.set_result(True)
def at_eof(self):
"""Return True if the buffer is empty and 'feed_eof' was called."""
return self._eof and not self._buffer
def feed_data(self, data): def feed_data(self, data):
assert not self._eof, 'feed_data after feed_eof' assert not self._eof, 'feed_data after feed_eof'
......
...@@ -204,6 +204,21 @@ class StreamReaderTests(unittest.TestCase): ...@@ -204,6 +204,21 @@ class StreamReaderTests(unittest.TestCase):
# expected to be empty now. # expected to be empty now.
self.assertEqual(b'', stream._buffer) self.assertEqual(b'', stream._buffer)
def test_at_eof(self):
stream = asyncio.StreamReader(loop=self.loop)
self.assertFalse(stream.at_eof())
stream.feed_data(b'some data\n')
self.assertFalse(stream.at_eof())
self.loop.run_until_complete(stream.readline())
self.assertFalse(stream.at_eof())
stream.feed_data(b'some data\n')
stream.feed_eof()
self.loop.run_until_complete(stream.readline())
self.assertTrue(stream.at_eof())
def test_readline_limit(self): def test_readline_limit(self):
# Read one line. StreamReaders are fed with data after # Read one line. StreamReaders are fed with data after
# their 'readline' methods are called. # their 'readline' methods are called.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment