[Erp5-report] r40968 nicolas - /erp5/trunk/products/ERP5/Document/File.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Dec 1 15:41:52 CET 2010
Author: nicolas
Date: Wed Dec 1 15:41:52 2010
New Revision: 40968
URL: http://svn.erp5.org?rev=40968&view=rev
Log:
Remove conversion ability of File
Compute hash of provided data, it content is same, return immediatly.
deprecate guessMimeType
Modified:
erp5/trunk/products/ERP5/Document/File.py
Modified: erp5/trunk/products/ERP5/Document/File.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/File.py?rev=40968&r1=40967&r2=40968&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/File.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/File.py [utf8] Wed Dec 1 15:41:52 2010
@@ -37,6 +37,9 @@ from Products.CMFDefault.File import Fil
from Products.CMFCore.utils import getToolByName
from OFS.Image import Pdata
import cStringIO
+from Products.ERP5Type.Utils import deprecated
+
+import md5
def _unpackData(data):
"""
@@ -104,7 +107,7 @@ class File(Document, CMFFile):
# if file field is empty(no file is uploaded),
# filename is empty string.
if filename:
- self._setSourceReference(filename)
+ self._setFilename(filename)
if self._isNotEmpty(file):
self._setFile(file, precondition=precondition)
del kw['file']
@@ -122,6 +125,13 @@ class File(Document, CMFFile):
getcontentlength = get_size
def _setFile(self, data, precondition=None):
+ if data is not None and self.hasData() and \
+ md5.md5(str(data.read())).digest() ==\
+ md5.md5(str(self.getData())).digest():
+ # Compute md5 hash only if there is something to hash on both sides.
+ #
+ # Same data as previous, no need to change it's content
+ return
CMFFile._edit(self, precondition=precondition, file=data)
security.declareProtected(Permissions.ModifyPortalContent,'setFile')
@@ -136,22 +146,14 @@ class File(Document, CMFFile):
"""
return self.hasData()
- security.declareProtected(Permissions.ModifyPortalContent, 'guessMimeType')
+ security.declareProtected(Permissions.AccessContentsInformation, 'guessMimeType')
+ @deprecated
def guessMimeType(self, fname=None):
"""
- get mime type from file name
+ Deprecated
"""
- if not fname:
- fname = self.getSourceReference()
- if fname:
- portal = self.getPortalObject()
- content_type = getToolByName(portal, 'mimetypes_registry').\
- lookupExtension(fname)
- if content_type is not None:
- self.setContentType(content_type)
- else:
- content_type = None
- return content_type
+ return self.getPortalObject().portal_contributions.\
+ guessMimeTypeFromFilename(fname)
security.declareProtected(Permissions.ModifyPortalContent, '_setData')
def _setData(self, data):
@@ -247,90 +249,16 @@ class File(Document, CMFFile):
if content_type is 'text/html' and support conversion features of
TextDocument.
"""
- content_type = self.getContentType()
-
- # Build the list of acceptable content_type for OOoDocument
- # Hopefully this is cached
- from Products.ERP5Type.Document import newTempOOoDocument
- temp_odt = newTempOOoDocument(self, 'testOOoOdt')
- temp_odt.edit(base_content_type='application/vnd.oasis.opendocument.text',
- base_data='not empty')
- temp_ods = newTempOOoDocument(self, 'testOOoOds')
- temp_ods.edit(
- base_content_type='application/vnd.oasis.opendocument.spreadsheet',
- base_data='not empty')
- temp_odg = newTempOOoDocument(self, 'testOOoOdg')
- temp_odg.edit(base_content_type='application/vnd.oasis.opendocument.draw',
- base_data='not empty')
- temp_odb = newTempOOoDocument(self, 'testOOoOdb')
- temp_odb.edit(base_content_type='application/vnd.oasis.opendocument.base',
- base_data='not empty')
-
- supported_ooo_content_type_list = [item[0] for item in\
- temp_odt.getTargetFormatItemList()]\
- + [item[0] for item in temp_ods.getTargetFormatItemList()]\
- + [item[0] for item in temp_odg.getTargetFormatItemList()]\
- + [item[0] for item in temp_odb.getTargetFormatItemList()]
- portal = self.getPortalObject()
- if content_type.startswith('text'):
- # We can wrap it into TextDocument
- from Products.ERP5Type.Document import newTempTextDocument
- temp_document = newTempTextDocument(self, 'temp_%s' % self.getId(),
- text_content=self.getData(),
- content_type=content_type)
- return temp_document.convert(format=format, **kw)
- elif content_type.startswith('image'):
- # We can wrap it into Image
- from Products.ERP5Type.Document import newTempImage
- temp_document = newTempImage(self, 'temp_%s' % self.getId(),
- data=self.getData(),
- content_type=content_type)
- return temp_document.convert(format=format, **kw)
- elif content_type == 'application/pdf':
- # We can wrap it into PDFDocument
- from Products.ERP5Type.Document import newTempPDFDocument
- temp_document = newTempPDFDocument(self, 'temp_%s' % self.getId(),
- data=self.getData(),
- content_type=content_type)
- return temp_document.convert(format=format, **kw)
- elif content_type in supported_ooo_content_type_list:
- # We can wrap it into OOoDocument
- temp_document = newTempOOoDocument(self, 'temp_%s' % self.getId(),
- text_content=self.getData(),
- content_type=content_type)
- return temp_document.convert(format=format, **kw)
- elif content_type in portal.portal_transforms._mtmap:
- # Look if portal_transforms can handle the content_type
- # of this File
- kw['format'] = format
- if not self.hasConversion(**kw):
- mime_type = str(getToolByName(portal, 'mimetypes_registry').\
- lookupExtension('name.%s' % format))
- result = portal.portal_transforms.convertToData(mime_type,
- self.getData(),
- object=self,
- context=self,
- mimetype=content_type)
- if not result:
- raise ConversionError('File conversion error. '
- 'portal_transforms failed to convert '\
- 'from %s to %s; %r' % (content_type, mime_type,
- self))
- self.setConversion(result, mime_type, **kw)
- else:
- mime_type, result = self.getConversion(**kw)
- return mime_type, result
- else:
- # We didn't find suitable wrapper to convert this File
- if format in VALID_TEXT_FORMAT_LIST:
- # This is acceptable to return empty string
- # for a File we can not convert
- return 'text/plain', ''
- elif format is None:
- # No conversion is asked,
- # we can return safely the file content itself
- return content_type, self.getData()
- raise NotImplementedError
+ content_type = self.getContentType() or ''
+ if format is None:
+ # No conversion is asked,
+ # we can return safely the file content itself
+ return content_type, self.getData()
+ elif format in VALID_TEXT_FORMAT_LIST:
+ # This is acceptable to return empty string
+ # for a File we can not convert
+ return 'text/plain', ''
+ raise NotImplementedError
# CMFFile also brings the IContentishInterface on CMF 2.2, remove it.
removeIContentishInterface(File)
More information about the Erp5-report
mailing list