stream-inflate
Uncompress Deflate and Deflate64 streams in pure Python (albeit compiled with Cython).
Installation
pip install stream-inflate
Usage
To uncompress Deflate, use the stream_inflate
function.
from stream_inflate import stream_inflate
import httpx
def compressed_chunks():
with httpx.stream('GET', 'https://www.example.com/my.txt') as r:
yield from r.iter_raw(chunk_size=65536)
for uncompressed_chunk in stream_inflate()[0](compressed_chunks()):
print(uncompressed_chunk)
To uncompress Deflate64, use the stream_inflate64
function.
for uncompressed_chunk in stream_inflate64()[0](compressed_chunks()):
print(uncompressed_chunk)
For Deflate streams of unknown length where there may be other data after the compressed part, the following pattern can be used to find how many bytes are not part of the compressed stream.
uncompressed_chunks, is_done, num_bytes_unconsumed = stream_inflate()
it = iter(compressed_chunks())
while not is_done():
chunk = next(it)
for uncompressed in uncompressed_chunks((chunk,))
print(uncompressed)
print(num_bytes_unconsumed())
This can be useful in certain ZIP files.