Use requests Response.iter_lines in Stream
authorHarmon <Harmon758@gmail.com>
Fri, 22 Jan 2021 16:52:57 +0000 (10:52 -0600)
committerHarmon <Harmon758@gmail.com>
Fri, 22 Jan 2021 16:52:57 +0000 (10:52 -0600)
commit37e701e2193dcf617e7235d3b004f790c5ff784e
tree87451f3af276fed3883d1d3fa7c12304a033b984
parent725ffb3c9c738d535d96e1720bb42e5d4f449617
Use requests Response.iter_lines in Stream

Remove and replace ReadBuffer

The on_data method of the stream listener is now passed the raw data from Stream in bytes form.

The previous regex check for the charset directive/parameter in the Content-Type HTTP header was unnecessary anyway, as it's not included in the response for streams (anymore?).

This reduces the overhead for each line of data if the raw data doesn't need to be decoded to be processed, but passes on the burden of decoding the raw data if the default StreamListener.on_data is not being used.

The default StreamListener.on_data implementation should still be fine, as json.loads can process bytes since Python 3.6 and accepts UTF-8 encoding, which it should still be safe to assume is used as the encoding for the raw data, as before, when the unnecessary regex check would fail.

This Stream._read_loop implementation also allows the stream to disconnect when any line of data is received, including keep-alive signals, which resolves #773 and resolves #897.
tests/test_streaming.py
tweepy/streaming.py