Zip export for Plone
Project description
Overview
ftw.zipexport provides a generic solution to export data from plone in a zip archive.
A user can export data with the “Export as Zip” action in document listings.
Install
Compatibility
For zipping files with a total size of over 4Gb python 2.7.4 is required.
Step-by-Step
Add ftw.zipexport to your buildout configuration
[instance] eggs = ftw.zipexport
Run buildout
Install ftw.zipexport in portal_setup
Implementation
In a first step we have to collect all data to zip. Use the IZipRepresentation interface for this task.
The get_files function returns a list of tuples. The tuples consist of two values. First a relative path under which the file should show up in the zip. Second the data as eather a file or a stream.
class IZipRepresentation(Interface):
def get_files(path_prefix='', recursive=True, toplevel=True):
By default we support basic data-types like folder and files. More complex data-types require an own adapter for IZipRepresentation.
Feel free to extend one of the predefined adapters: Predefined representations
The data generated by our IZipRepresentation then gets delivered to the ZipGeneration helper class.
class ZipGenerator(object):
def add_file(file_path, file_pointer):
Zipps the file and adds it to the archive.
If large or many files are selected this function might take some time to execute.
def generate():
returns a temp file holding the generated zip
Here is the sample code of the described steps:
from zope.component import getMultiAdapter
from ftw.zipexport.generation import ZipGenerator
from ftw.zipexport.interfaces import IZipRepresentation
ziprepresentation = getMultiAdapter((self.folder, self.request), interface=IZipRepresentation)
with ZipGenerator() as zipgenerator:
for file_path, file_pointer in ziprepresentation.get_files():
zipgenerator.add_file(file_path, file_pointer)
generated_zip_pointer = zipgenerator.generate()
The download is handled in a standard BrowserView which plainly reads from the temp file. For details check out the code: zipexportview.py.
Current supported data-types
IFolderish
IFileContent
IDexterityItem with IPrimaryFieldInfo
Nice to have
Multithreading
Links
Package repository: https://github.com/4teamwork/ftw.zipexport
Issue tracker: https://github.com/4teamwork/ftw.zipexport/issues
Continuous integration: https://jenkins.4teamwork.ch/view/All/search/?q=ftw.zipexport
Copyright
This package is copyright by 4teamwork.
ftw.zipexport is licensed under GNU General Public License, version 2.
Changelog
1.2.2 (2015-03-25)
Fixed a bug in the file export which occurred if the file to be exported did not have a blob but an OFS file. [mbaechtold]
1.2.1 (2014-06-05)
Fixed metadata version in default profile. [lknoepfel]
1.2.0 (2014-05-26)
Added option to select multiple interfaces on which the export is available. [lknoepfel]
Added error message when the content is too big to zip. This happens when the ZIP64 isn’t available and the content is bigger than 4GB. [lknoepfel]
Corrected error message when no zip-exportable content is selected. [lknoepfel]
Deny zipexport on unallowed content. [lknoepfel]
Include default AT image files. [jone]
Added French translation by I. Anthenien. [lknoepfel]
1.1.1 (2013-11-21)
Added handling for files with same filename. [lknoepfel]
Added a separate profile to install an additional zip-export document action. [deif]
1.1.0 (2013-10-14)
Added export limitation. [lknoepfel]
Fix encoding problem with nested folders containing umlauts in the title. [jone]
1.0.0 (2013-09-13)
Initial Development
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.