[Erp5-report] r29135 - in /erp5/trunk/products/ERP5Type: ./ Accessor/

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Sep 22 15:58:42 CEST 2009


Author: daniele
Date: Tue Sep 22 15:58:41 2009
New Revision: 29135

URL: http://svn.erp5.org?rev=29135&view=rev
Log:
Define the type data as required for the commit #29134
Change the XML conversion to handle it

Modified:
    erp5/trunk/products/ERP5Type/Accessor/TypeDefinition.py
    erp5/trunk/products/ERP5Type/XMLExportImport.py

Modified: erp5/trunk/products/ERP5Type/Accessor/TypeDefinition.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Accessor/TypeDefinition.py?rev=29135&r1=29134&r2=29135&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Accessor/TypeDefinition.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/Accessor/TypeDefinition.py [utf8] Tue Sep 22 15:58:41 2009
@@ -174,9 +174,15 @@
                              'default' : None,
                              'isList'  : 0,
                            },
-                           # Object are properties of any type (ex. data)
+                           # Object are properties of any type
                            # and are considered as simple properties
     'object'             : { 'cast'    : identity, 
+                             'null'    : ('', 'None', None,),
+                             'default' : None,
+                             'isList'  : 0,
+                           },
+                           # Used for converted documents (ex: data)
+    'data'               : { 'cast'    : identity,
                              'null'    : ('', 'None', None,),
                              'default' : None,
                              'isList'  : 0,

Modified: erp5/trunk/products/ERP5Type/XMLExportImport.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/XMLExportImport.py?rev=29135&r1=29134&r2=29135&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/XMLExportImport.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/XMLExportImport.py [utf8] Tue Sep 22 15:58:41 2009
@@ -36,7 +36,9 @@
 from lxml import etree
 from lxml.etree import Element, SubElement
 from xml.marshal.generic import dumps as marshaler
+from OFS.Image import Pdata
 from zLOG import LOG
+from base64 import standard_b64encode
 
 class OrderedPickler(Pickler):
     
@@ -92,12 +94,40 @@
         # We may have very long lines, so we should split
         value = aq_base(value)
         value = dumps(value)
-        msg = MIMEBase('application', 'octet-stream')
-        msg.set_payload(value)
-        Encoders.encode_base64(msg)
-        ascii_data = msg.get_payload()
-        sub_object.text = ascii_data
+        sub_object.text = standard_b64encode(value)
+      elif prop_type in ('data',):
+        # Create blocks to represent data
+        # <data><block>ZERD</block><block>OEJJM</block></data>
+        if isinstance(value, str):
+          sub_object.set('type_data','str')
+          size_block = 80
+          iterator_block = 0
+          data_encoded = standard_b64encode(value)
+          for index in xrange(0, len(data_encoded), 80):
+            content = data_encoded[index:index + size_block]
+            block = SubElement(sub_object, 'block_data', num=str(iterator_block))
+            block.text = content
+            iterator_block += 1
+        elif isinstance(value, Pdata):
+          # Create blocks if there is a stack of data
+          sub_object.set('type_data','Pdata')
+          size_block = 80
+          data = value
+          iterator_block = 0
+          while data is not None:
+            data_encoded = standard_b64encode(data.data)
+            for index in xrange(0, len(data_encoded), 80):
+              content = data_encoded[index:index + size_block]
+              block = SubElement(sub_object, 'block_data', num=str(iterator_block))
+              block.text = content
+              iterator_block += 1
+            data = data.next
+        else: 
+          raise "XMLExportImport failed, the data is undefined"
       elif prop_type in ('lines', 'tokens',):
+        # Use CDATA node to not be taken into account by erp5diff 
+        value = [word.decode('utf-8').encode('ascii','xmlcharrefreplace')\
+            for word in value]
         sub_object.text = etree.CDATA(marshaler(value))
       elif prop_type in ('text', 'string',):
         sub_object.text = unicode(escape(value), 'utf-8')




More information about the Erp5-report mailing list