[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: /pipermail/cps-devel/attachments/20070315/04fd239a/attachment.htm


About

This page is a mailing archive for one of the Nuxeo projects.

Project News

Corporate News

[2009/07/02] Nuxeo Launches Nuxeo Document Management Cloud Edition For Easy-To-Use and Secure Document Management[2009/06/29] Nuxeo Expands Global Operations in Exclusive Strategic Agreement with Kisiwa[2009/06/29] Nuxeo DM - Updated user guide and The "website" feature screencast available ![2009/06/08] Gilbane Conference - Eric Barroca's Presentation slides