Re: possible improvement for CPSDocument.createFile

Florent Guillaume <[email protected]>
Newsgroups gmane.comp.web.zope.cps.devel
Message-ID <[email protected]>
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-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

-- 
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



_______________________________________________
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.