[CPS-devel] possible improvement for CPSDocument.createFile

Florent Guillaume fg at nuxeo.com
Sat Mar 17 01:45:09 CET 2007


Hi Jose,

Please put this in a Trac ticket for better followups.
Also please use "diff -u createFile.py.original createFile.py" (or  
just svn diff if you work from svn) to create an easy-to-read patch.

Thanks,
Florent

On 15 Mar 2007, at 13:08, Jose Jiménez López wrote:

> 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.
>
>
>
> _______________________________________________
> cps-devel mailing list
> http://lists.nuxeo.com/mailman/listinfo/cps-devel

-- 
Florent Guillaume, Director of R&D, Nuxeo
Open Source Enterprise Content Management (ECM)
http://www.nuxeo.com   http://www.nuxeo.org   +33 1 40 33 79 87






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