« Return to Thread: possible improvement for CPSDocument.createFile

possible improvement for CPSDocument.createFile

by Jose Jiménez López-2 :: Rate this Message:

Reply to Author | View in Thread

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
jose.jimenez@...
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

 « Return to Thread: possible improvement for CPSDocument.createFile