Hello everybody,
recently i needed to create a new portal type that uploads a zip file,
and recreates the same file and directories structure.
In order to do this, i have patched the module CPSDocument.createFile
I think that it can interest to somebody.
Here is the code that i have modified:
# browsing the ZIP file
for info in infolist:
path = info.filename
list = path.split('/')
if list[len(list) - 1] == '':
list = list[0:len(list)-1]
path_filename = list[len(list)-1]
#if is a directory
if path[-1] == '/':
ptype = 'Workspace'
field_name = 'file'
isFolder = True
else:
mimetype =
registry.lookupExtension(path_filename.lower()).normalized()
isFolder = False
if not isFolder:
if mimetype.startswith('image/'):
ptype = 'Image'
field_name = 'preview'
else:
ptype = 'File'
field_name = 'file'
if check_allowed_content_types and ptype not in
allowed_content_types:
continue
try:
container = context
if len(list) > 1:
for folder in list[0:len(list) - 1]:
container = container[folder]
file_id = context.portal_workflow.invokeFactoryFor(
container, ptype, path_filename)
except BadRequest:
logger.info('File %s already exists', path_filename)
return 0
file_proxy = getattr(container, file_id)
file_doc = file_proxy.getEditableContent()
if not isFolder:
# create file to attach to document
data = zipfile.read(path)
file_to_attach = File(path_filename, path_filename, data)
if mimetype and file_to_attach.content_type != mimetype:
logger.debug('Fixing mimetype from %s to %s',
file_to_attach.content_type, mimetype)
file_to_attach.manage_changeProperties(content_type=mimetype)
doc_def = {
'Title': path_filename,
'Description': 'Imported File (original archive: %s)' %
filename,
field_name: file_to_attach,
}
else:
doc_def = {
'Title': path_filename,
'Description': 'Imported File (original archive: %s)' %
filename,
}
file_doc.edit(doc_def, proxy=file_proxy)
return 1
Jose Jiménez López
Becario de Sistemas
FUNDACIÓN IAVANTE
[EMAIL PROTECTED]
Tel. 958 00 22 63
Este correo electrónico y, en su caso, cualquier fichero anexo, contiene
información confidencial exclusivamente dirigida a su(s)
destinatario(s). Toda copia o divulgación deberá ser autorizada por
IAVANTE.
This e-mail and any attachments are confidential and exclusively
directed to its adressee(s). Any copy or distribution will have to be
authorized by IAVANTE.
_______________________________________________
cps-devel mailing list
http://lists.nuxeo.com/mailman/listinfo/cps-devel