Nuxeo mailing list archives
[Nuxeo-tickets] [Nuxeo Repository] #1840: possible improvement for
CPSDocument.createFile
Nuxeo Repository
trac at nuxeo.com
Mon Apr 30 14:02:52 CEST 2007
#1840: possible improvement for CPSDocument.createFile
-------------------------------------+--------------------------------------
Reporter: jose.jimenez at iavante.es | Owner: madarche
Type: enhancement | Status: new
Priority: P2 | Milestone: CPS 3.4.5
Component: CPSDocument | Version: TRUNK
Severity: normal | Keywords:
-------------------------------------+--------------------------------------
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 (diff -u):
--- createFile.py 2007-04-30 13:55:52.000000000 +0200
+++ createFileNew.py 2007-04-30 13:57:44.000000000 +0200
@@ -21,7 +21,6 @@
Create a document (attached file) for each file in the uploaded ZIP,
with types according to their extensions
"""
-
from logging import getLogger
from Products.CMFCore.utils import getToolByName
@@ -66,59 +65,68 @@
logger.info('Bad Zip File')
return 0
infolist = zipfile.infolist()
- if not check_allowed_content_types:
- image_type_allowed = True
- else:
- image_type_allowed = 'Image' in allowed_content_types
# browsing the ZIP file
for info in infolist:
path = info.filename
- # Skip folders
+ 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] == '/':
- continue
- # Acquiring only the filename (without the directory path)
- path_filename = generateFileName(path.split('/')[-1])
-
- mimetype = registry.lookupExtension(path_filename.lower())
- if mimetype is not None:
- mimetype = mimetype.normalized()
- else:
- mimetype = 'application/octet-stream'
-
- if mimetype.startswith('image/') and image_type_allowed:
- # use the Image portal type or fallback to File if Image is
not
- # allowed
- ptype = 'Image'
- field_name = 'preview'
- else:
- ptype = 'File'
+ 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(
- context, ptype, path_filename)
+ container, ptype, path_filename)
except BadRequest:
logger.info('File %s already exists', path_filename)
return 0
- file_proxy = getattr(context, file_id)
+ file_proxy = getattr(container, file_id)
file_doc = file_proxy.getEditableContent()
- # 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,
- }
-
+ 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
--
Ticket URL: <https://svn.nuxeo.org/trac/pub/ticket/1840>
Nuxeo Repository <http://www.cps-project.org/>
Nuxeo Repository
This list archive provided by Nuxeo, the
leaders of open source ECM.
Check out the Nuxeo 5 open source,
standards-based ECM project.