Update streaming.py's handle_stream

This is an attempt to resolve an upstream issue with unexpected blank streams. The issue appears to be in urllib3, and causes fatal errors when the stream returned is `b''`. I believe this simple workaround will bypass the error and continue monitoring the stream.
This commit is contained in:
Noëlle Anthony 2018-02-01 20:12:49 -05:00 cometido por GitHub
pare 0cd284bc2f
commit 793f0b207f
No se encontró ninguna clave conocida en la base de datos para esta firma
ID de clave GPG: 4AEE18F83AFDEB23

Veure arxiu

@ -41,26 +41,29 @@ class StreamListener(object):
response; a requests response object with the open stream for reading. response; a requests response object with the open stream for reading.
""" """
event = {} try:
line_buffer = bytearray() event = {}
for chunk in response.iter_content(chunk_size = 1): line_buffer = bytearray()
if chunk: for chunk in response.iter_content(chunk_size = 1):
if chunk == b'\n': if chunk:
try: if chunk == b'\n':
line = line_buffer.decode('utf-8') try:
except UnicodeDecodeError as err: line = line_buffer.decode('utf-8')
six.raise_from( except UnicodeDecodeError as err:
MastodonMalformedEventError("Malformed UTF-8"), six.raise_from(
err MastodonMalformedEventError("Malformed UTF-8"),
) err
if line == '': )
self._dispatch(event) if line == '':
event = {} self._dispatch(event)
event = {}
else:
event = self._parse_line(line, event)
line_buffer = bytearray()
else: else:
event = self._parse_line(line, event) line_buffer.extend(chunk)
line_buffer = bytearray() except:
else: pass
line_buffer.extend(chunk)
def _parse_line(self, line, event): def _parse_line(self, line, event):
if line.startswith(':'): if line.startswith(':'):
@ -136,4 +139,4 @@ class CallbackStreamListener(StreamListener):
def on_notification(self, notification): def on_notification(self, notification):
if self.notification_handler != None: if self.notification_handler != None:
self.notification_handler(notification) self.notification_handler(notification)