[CPS-devel] possible improvement for CPSDocument.createFile

Jose Jiménez López jose.jimenez at iavante.es
Thu Mar 15 13:08:05 CET 2007


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 at iavantefundacion.com 
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.



-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.nuxeo.com/pipermail/cps-devel/attachments/20070315/04fd239a/attachment.htm



This list archive provided by Nuxeo, the leaders of open source ECM. Check out the Nuxeo 5 open source, standards-based ECM project.