mirror of
https://github.com/gogcom/galaxy-integrations-python-api.git
synced 2026-01-01 11:28:12 -05:00
29 lines
943 B
Python
29 lines
943 B
Python
from asyncio import StreamReader
|
|
|
|
|
|
class StreamLineReader:
|
|
"""Handles StreamReader readline without buffer limit"""
|
|
def __init__(self, reader: StreamReader):
|
|
self._reader = reader
|
|
self._buffer = bytes()
|
|
self._processed_buffer_it = 0
|
|
|
|
async def readline(self):
|
|
while True:
|
|
# check if there is no unprocessed data in the buffer
|
|
if not self._buffer or self._processed_buffer_it != 0:
|
|
chunk = await self._reader.read(1024)
|
|
if not chunk:
|
|
return bytes() # EOF
|
|
self._buffer += chunk
|
|
|
|
it = self._buffer.find(b"\n", self._processed_buffer_it)
|
|
if it < 0:
|
|
self._processed_buffer_it = len(self._buffer)
|
|
continue
|
|
|
|
line = self._buffer[:it]
|
|
self._buffer = self._buffer[it+1:]
|
|
self._processed_buffer_it = 0
|
|
return line
|