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
[EMAIL PROTECTED]
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

Reply via email to