{ "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" } ] }