[Erp5-report] r8972 - /erp5/trunk/products/ERP5OOo/Document/OOoDocument.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Aug 1 18:24:59 CEST 2006
Author: bartek
Date: Tue Aug 1 18:24:53 2006
New Revision: 8972
URL: http://svn.erp5.org?rev=8972&view=rev
Log:
Added caching and serving mimetypes while converting and generating files
Modified:
erp5/trunk/products/ERP5OOo/Document/OOoDocument.py
Modified: erp5/trunk/products/ERP5OOo/Document/OOoDocument.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5OOo/Document/OOoDocument.py?rev=8972&r1=8971&r2=8972&view=diff
==============================================================================
--- erp5/trunk/products/ERP5OOo/Document/OOoDocument.py (original)
+++ erp5/trunk/products/ERP5OOo/Document/OOoDocument.py Tue Aug 1 18:24:53 2006
@@ -37,13 +37,16 @@
from Products.ERP5Type.XMLObject import XMLObject
from DateTime import DateTime
import xmlrpclib, base64
+# to overwrite WebDAV methods
+from Products.CMFDefault.File import File as CMFFile
enc=base64.encodestring
dec=base64.decodestring
class ConvertionError(Exception):pass
-class OOoDocument(File, XMLObject):
+#class OOoDocument(File):
+class OOoDocument(XMLObject,File):
"""
A file document able to convert OOo compatible files to
any OOo supported format, to capture metadata and to
@@ -104,9 +107,16 @@
cached_time={}
# generated files (cache)
cached_data={}
+ # mime types for cached formats XXX to be refactored
+ cached_mime={}
# XXX the above craves for a separate class, but I'm not sure how to handle
# it in ZODB, so for now let it be
+ #def __init__(self,*args,**kwargs):
+ #XMLObject.__init__(self,*args,**kwargs)
+ #File.__init__(self,*args,**kwargs)
+ #self.__dav_collection__=0
+
security.declareProtected(Permissions.ModifyPortalContent,'clearCache')
def clearCache(self):
"""
@@ -115,13 +125,14 @@
"""
self.cached_time={}
self.cached_data={}
+ self.cached_mime={}
def _getServerCoordinates(self):
"""
Returns OOo conversion server data from some
preferences. NOT IMPLEMENTED YET - XXX
"""
- return '192.168.0.3',8080
+ return '127.0.0.1',8080
def _mkProxy(self):
sp=xmlrpclib.ServerProxy('http://%s:%d' % self._getServerCoordinates(),allow_none=True)
@@ -164,7 +175,7 @@
def cached_getTargetFormatItemList(mimetype):
sp=self._mkProxy()
allowed=sp.getAllowedTargets(mimetype)
- return allowed
+ return [[y,x] for x,y in allowed] # have to reverse tuple order
cached_getTargetFormatItemList = CachingMethod(cached_getTargetFormatItemList,
id = "OOoDocument_getTargetFormatItemList" )
@@ -188,10 +199,10 @@
"""
if not self.hasOOfile(): return False
- allowed=self.getTargetFormatList()
+ allowed=self.getTargetFormatItemList()
self.log('allowed',allowed)
if allowed is None: return False
- return (format in allowed)
+ return (format in [x[1] for x in allowed])
security.declareProtected(Permissions.ModifyPortalContent,'editMetadata')
def editMetadata(self,newmeta):
@@ -283,6 +294,8 @@
"""
Checks whether we have an initial file
"""
+ print 'IS INSTANCE'
+ print isinstance(self,object)
_marker=[]
if getattr(self,'data',_marker) is not _marker: # XXX - use propertysheet accessors
return getattr(self,'data') is not None
@@ -315,6 +328,7 @@
XXX - we should not create a snapshot if some error happened at conversion
is this checked ?
+ XXX - error at conversion raises an exception, so it should be ok
"""
if self.hasSnapshot():
if REQUEST is not None:
@@ -333,7 +347,7 @@
'''getSnapshot'''
if not self.hasSnapshot():
self.createSnapshot()
- return self.getSnapshot() # XXX - use propertysheet accessors
+ return self.snapshot # XXX - use propertysheet accessors
security.declareProtected(Permissions.ManagePortal,'deleteSnapshot')
def deleteSnapshot(self):
@@ -354,7 +368,7 @@
return self.returnMessage('can not convert to '+format+' for some reason')
try:
self.makeFile(format)
- return self.cached_data[format]
+ return self.cached_mime[format],self.cached_data[format]
except ConvertionError,e:
return self.returnMessage(str(e))
@@ -412,7 +426,7 @@
raise ConvertionError('needs conversion')
if self.isFileChanged(format):
try:
- self.cached_data[format]=self._makeFile(format)
+ self.cached_mime[format],self.cached_data[format]=self._makeFile(format)
self._p_changed=1 # XXX not sure it is necessary
except xmlrpclib.Fault,e:
if REQUEST is not None:
@@ -434,8 +448,9 @@
"""
# real version:
sp=self._mkProxy()
- meta,file=sp.run_generate(self.getOriginalFilename(),enc(self._unpackData(self.oo_data)),format)
- return Pdata(dec(file))
+ mime,file=sp.run_generate(self.getOriginalFilename(),enc(self._unpackData(self.oo_data)),format)
+ self.log('_makeFile',mime)
+ return mime,Pdata(dec(file))
security.declareProtected(Permissions.View,'getCacheInfo')
def getCacheInfo(self):
@@ -462,5 +477,18 @@
s+='</table>'
return s
+ # make sure to call the right edit methods
+ _edit=File._edit
+ edit=File.edit
+
+ # BG copied from File in case
+ index_html = CMFFile.index_html
+ PUT = CMFFile.PUT
+ security.declareProtected('FTP access', 'manage_FTPget', 'manage_FTPstat', 'manage_FTPlist')
+ manage_FTPget = CMFFile.manage_FTPget
+ manage_FTPlist = CMFFile.manage_FTPlist
+ manage_FTPstat = CMFFile.manage_FTPstat
+
+
# vim: syntax=python shiftwidth=2
More information about the Erp5-report
mailing list