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

Reply via email to