Get started
Prerequisites
Python 3.6.7+
Installation
You can install stream-unzip and its dependencies from PyPI using pip.
pip install stream-unzip
This installs the latest version of stream-unzip, and the latest compatible version of all of its dependencies.
If you regularly install stream-unzip, such as during application deployment, to avoid unexpected changes as new versions are released, you can pin to specific versions. Poetry or pip-tools are popular tools that can be used for this.
Usage
A single function is exposed, stream_unzip
, that takes a single argument: an iterable that should yield the bytes of a ZIP file [with no zero-length chunks]. It returns an iterable, where each yielded item is a tuple of the file name, file size [None
if this is not known], and another iterable itself yielding the unzipped bytes of that file.
from stream_unzip import stream_unzip
import httpx
def zipped_chunks():
# Iterable that yields the bytes of a zip file
with httpx.stream('GET', 'https://www.example.com/my.zip') as r:
yield from r.iter_bytes(chunk_size=65536)
for file_name, file_size, unzipped_chunks in stream_unzip(zipped_chunks(), password=b'my-password'):
# unzipped_chunks must be iterated to completion or UnfinishedIterationError will be raised
for chunk in unzipped_chunks:
print(chunk)
The file name and file size are extracted as reported from the file. If you don’t trust the creator of the ZIP file, these should be treated as untrusted input.