possible improvement for CPSDocument.createFile

Jose Jiménez López <[email protected]>
Newsgroups gmane.comp.web.zope.cps.devel
Organization Fundación IAVANTE
Message-ID <1173960485.4950.14.camel@localhost>
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-PttKq6FmaWE8QMA/Cy+x5VaTQe2KTcn/@public.gmane.org 
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.