[Erp5-report] r35795 nicolas - /erp5/trunk/products/ERP5Type/XMLExportImport.py

nobody at svn.erp5.org nobody at svn.erp5.org
Mon May 31 17:00:23 CEST 2010


Author: nicolas
Date: Mon May 31 17:00:18 2010
New Revision: 35795

URL: http://svn.erp5.org?rev=35795&view=rev
Log:
  - Use new marshaller able to produce Qualified nodes (with a namespace)
  - Mashalled values are not stored into CDATA node anymore longer
  - Choose arbitrary namespace for nodes  produce by marshaller: http://www.erp5.org/namespaces/marshaller

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

Modified: erp5/trunk/products/ERP5Type/XMLExportImport.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/XMLExportImport.py?rev=35795&r1=35794&r2=35795&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/XMLExportImport.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/XMLExportImport.py [utf8] Mon May 31 17:00:18 2010
@@ -36,10 +36,14 @@
 from xml.sax.saxutils import escape, unescape
 from lxml import etree
 from lxml.etree import Element, SubElement
-from xml.marshal.generic import dumps as marshaler
+from xml_marshaller.xml_marshaller import Marshaller
 from OFS.Image import Pdata
 from zLOG import LOG
 from base64 import standard_b64encode
+
+MARSHALLER_NAMESPACE_URI = 'http://www.erp5.org/namespaces/marshaller'
+marshaller = Marshaller(namespace_uri=MARSHALLER_NAMESPACE_URI,
+                                                            as_tree=True).dumps
 
 class OrderedPickler(Pickler):
     
@@ -109,10 +113,9 @@
         else:
           raise ValueError("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))
+        sub_object.append(marshaller(value))
       elif prop_type in ('text', 'string',):
         sub_object.text = unicode(escape(value), 'utf-8')
       elif prop_type != 'None':
@@ -151,18 +154,18 @@
       if isinstance(role, unicode):
         role = role.encode('utf-8')
       role_list.append(role)
-    local_role_node.text = etree.CDATA(marshaler(tuple(role_list)))
+    local_role_node.append(marshaller(tuple(role_list)))
   if getattr(self, 'get_local_permissions', None) is not None:
     for user_permission in self.get_local_permissions():
       local_permission_node = SubElement(object, 'local_permission',
                               attrib=dict(id=user_permission[0], type='tokens'))
-      local_permission_node.text = etree.CDATA(marshaler(user_permission[1]))
+      local_permission_node.append(marshaller(user_permission[1]))
   # Sometimes theres is roles specified for groups, like with CPS
   if getattr(self, 'get_local_group_roles', None) is not None:
     for group_role in self.get_local_group_roles():
       local_group_node = SubElement(object, 'local_group',
                                     attrib=dict(id=group_role[0], type='tokens'))
-      local_group_node.text = etree.CDATA(marshaler(group_role[1]))
+      local_group_node.append(marshaller(group_role[1]))
   if return_as_object:
     return root
   return etree.tostring(root, encoding='utf-8',




More information about the Erp5-report mailing list