[Erp5-report] r11233 - /erp5/trunk/products/ERP5OOo/Document/OOoDocument.py

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Nov 9 16:11:28 CET 2006


Author: bartek
Date: Thu Nov  9 16:11:27 2006
New Revision: 11233

URL: http://svn.erp5.org?rev=11233&view=rev
Log:
add serPropertyListFromContent method

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=11233&r1=11232&r2=11233&view=diff
==============================================================================
--- erp5/trunk/products/ERP5OOo/Document/OOoDocument.py (original)
+++ erp5/trunk/products/ERP5OOo/Document/OOoDocument.py Thu Nov  9 16:11:27 2006
@@ -106,6 +106,8 @@
                     , PropertySheet.OOoDocument
                     )
 
+  # regexp for finding attrs in content
+  rx_atr=re.compile('([\w]+)###([\w/]+)')
   # regexps for stripping xml from docs
   rx_strip=re.compile('<[^>]*?>',re.DOTALL|re.MULTILINE)
   rx_compr=re.compile('\s+')
@@ -242,6 +244,26 @@
     cs.close()
     z.close()
     return s
+
+  security.declareProtected(Permissions.ModifyPortalContent,'setPropertyListFromContent')
+  def setPropertyListFromContent(self,data):
+    cs=cStringIO.StringIO()
+    cs.write(self._unpackData(data))
+    try:
+      z=zipfile.ZipFile(cs)
+    except zipfile.BadZipfile:
+      cs.close()
+      return
+    s=z.read('content.xml')
+    cs.close()
+    z.close()
+    atrs=dict(self.rx_atr.findall(s))
+    doctype=atrs.get('doctype','None')
+    if doctype!=self.getPortalType():
+      raise Exception('portal type mismatch - content gave %s, I have %s' % (doctype,self.getPortalType()))
+    for a in atrs:
+      if a not in ('author','doctype'):
+        self.setProperty(a,atrs[a])
 
   security.declarePrivate('_setMetaData')
   def _setMetaData(self,meta):




More information about the Erp5-report mailing list