{
"info": {
"author": "Ayke van Laethem",
"author_email": "aykevanlaethem@gmail.com",
"bugtrack_url": null,
"classifiers": [],
"description": "Zip file streamer for HTTP\n==========================\n\nSimilar systems/projects:\n\n* The `Nginx zip module\n `_. Only for Nginx, so\n can't be used with other webservers.\n* `python-zipstream `_. Does not\n support calculating the file size beforehand or seeing through the file.\n\nUsage:\n\n.. code:: python\n\n import zipseeker\n \n # Create an index\n fp = zipseeker.ZipSeeker()\n fp.add('some/file.txt')\n fp.add('another/file.txt', 'file2.txt')\n \n # Calculate the total file size, e.g. for the Content-Length HTTP header.\n contentLength = fp.size()\n \n # Calculate the last-modified date, e.g. for the Last-Modified HTTP header.\n lastModified = fp.lastModified()\n \n # Send the ZIP file to the client\n # Optionally add the start and end parameters for range requests.\n # Note that the ZIP format doesn't support actually skipping parts of the file,\n # as it needs to calculate the CRC-32 of every file at the end of the file.\n fp.writeStream(outputFile)\n\nWhy?\n----\n\nWhile the file size of a ZIP file usually can't be calculated beforehand due to\ncompression, this is actually optional. The headers itself also have a pretty\nconstant size. That means that the whole file can have a predetermined file size\n(and modtime).\n\nThis is useful when you want to provide ZIP downloads of large directories with\nuncompressable files (e.g. images). The specific use case I created this media\nfile for was to provide downloads of whole photo albums without such\ninconveniences as requesting a downloading link in an e-mail, using a lot system\nresources for the creation of temporary files, and having to delete these files\nafterwards.\n\nOf course, it's possible to just stream a ZIP file, but that won't provide any\nprogress indication for file downloads and certainly doesn't support `Range\nrequests `_.\n\nFor more information, see the `Nginx zip module\n`_.\n\nTODO\n----\n\n* Implement actual seeking in the file - this should be doable.\n* Use a CRC-32 cache that can be shared by the calling module.\n\n",
"description_content_type": null,
"docs_url": null,
"download_url": "https://github.com/aykevl/python-zipseeker/archive/v1.0.11.zip",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/aykevl/python-zipseeker",
"keywords": "zip",
"license": "",
"maintainer": "",
"maintainer_email": "",
"name": "zipseeker",
"package_url": "https://pypi.org/project/zipseeker/",
"platform": "",
"project_url": "https://pypi.org/project/zipseeker/",
"project_urls": {
"Download": "https://github.com/aykevl/python-zipseeker/archive/v1.0.11.zip",
"Homepage": "https://github.com/aykevl/python-zipseeker"
},
"release_url": "https://pypi.org/project/zipseeker/1.0.11/",
"requires_dist": null,
"requires_python": "",
"summary": "Create a streamable and (somewhat) seekable .ZIP file",
"version": "1.0.11"
},
"last_serial": 3466370,
"releases": {
"1.0.10": [
{
"comment_text": "",
"digests": {
"md5": "68587463a1f1ee0b127ecdd46469e69a",
"sha256": "dc189961cbbcc53a65cc5b11ffdfc7f08d07f1594967c8c173ba26558cca9a88"
},
"downloads": -1,
"filename": "zipseeker-1.0.10.tar.gz",
"has_sig": false,
"md5_digest": "68587463a1f1ee0b127ecdd46469e69a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5734,
"upload_time": "2017-07-09T16:41:12",
"url": "https://files.pythonhosted.org/packages/21/0e/7b7dccb3780ac304a04b5e78fb3a2fd5947b9e13a668b18e8b247516f900/zipseeker-1.0.10.tar.gz"
}
],
"1.0.11": [
{
"comment_text": "",
"digests": {
"md5": "32b2d1e6ca5b213d2fd9b701cea6e2a5",
"sha256": "f0bc6b8dd5a66a8e09c98cb41ffeb31b83e2fc99d3f947afeda60c7605210e82"
},
"downloads": -1,
"filename": "zipseeker-1.0.11.tar.gz",
"has_sig": false,
"md5_digest": "32b2d1e6ca5b213d2fd9b701cea6e2a5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5772,
"upload_time": "2018-01-06T03:00:08",
"url": "https://files.pythonhosted.org/packages/35/21/00435b5ea857c82ca47d305fbd569bb07d0f459100cdde8520eda2fd3139/zipseeker-1.0.11.tar.gz"
}
],
"1.0.9": [
{
"comment_text": "",
"digests": {
"md5": "8241f216fd467db685e8d53b21aa99e9",
"sha256": "92fb3aabcb70c7fbb152fc7c96158f05722076e0e3ad9db5ee3222cd562d6aec"
},
"downloads": -1,
"filename": "zipseeker-1.0.9.tar.gz",
"has_sig": false,
"md5_digest": "8241f216fd467db685e8d53b21aa99e9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5016,
"upload_time": "2017-07-08T21:42:20",
"url": "https://files.pythonhosted.org/packages/bc/b0/f7d2203ec4470c39cbcccb2ea32dc48c841f286d77c144c799299b5832a5/zipseeker-1.0.9.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "32b2d1e6ca5b213d2fd9b701cea6e2a5",
"sha256": "f0bc6b8dd5a66a8e09c98cb41ffeb31b83e2fc99d3f947afeda60c7605210e82"
},
"downloads": -1,
"filename": "zipseeker-1.0.11.tar.gz",
"has_sig": false,
"md5_digest": "32b2d1e6ca5b213d2fd9b701cea6e2a5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5772,
"upload_time": "2018-01-06T03:00:08",
"url": "https://files.pythonhosted.org/packages/35/21/00435b5ea857c82ca47d305fbd569bb07d0f459100cdde8520eda2fd3139/zipseeker-1.0.11.tar.gz"
}
]
}