Author: jmorliaguet
Date: Sat Jun 24 00:17:57 2006
New Revision: 3503

Modified:
   cpsskins/branches/paris-sprint-2006/setup/io/adapters.py

Log:

- fixed the DOM adapter: some nodes got imported several times



Modified: cpsskins/branches/paris-sprint-2006/setup/io/adapters.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/setup/io/adapters.py    (original)
+++ cpsskins/branches/paris-sprint-2006/setup/io/adapters.py    Sat Jun 24 
00:17:57 2006
@@ -62,7 +62,6 @@
     def updateURIMapping(self):
         uri = u'cpsskins://%s:%s' % (str(IType(self.context)),
                                      self.node.getAttribute(u'id'))
-        print uri
         self.mapping.update({uri: self.context})
 
     def clone(self, other):
@@ -159,7 +158,11 @@
 
         # properties
         schema = IType(context).getContentType()
+
+        fields = {}
         for name, field in zope.schema.getFieldsInOrder(schema):
+            fields[name] = field
+
             if name in self.ignored_fields:
                 continue
 
@@ -178,40 +181,42 @@
                     value = archive[filename]
                 setattr(context, name, value)
 
-            # child nodes
-            for child_el in node.childNodes:
-                if child_el.nodeType != Node.ELEMENT_NODE:
-                    continue
-
-                if child_el.hasAttribute(u'value'):
-                    field_name = child_el.tagName
-                    if name == field_name:
-                        text = child_el.getAttribute(u'value')
-                        value = field_io.load(text)
-                        if IBinaryFieldIO.providedBy(field_io):
-                            filename = value
-                            value = archive[filename]
-                        setattr(context, name, value)
-                    continue
-
-                type = child_el.getAttribute(u'type')
-                contentname = type or child_el.tagName
-                factory_name = u'cpsskins.%s.%s' % (self.object_type,
-                                                    contentname)
-
-                # create the object
-                element = createObject(factory_name)
-
-                if IStorage.providedBy(context):
-                    context.add(element, contentname)
-                else:
-                    namechooser = INameChooser(context)
-                    name = namechooser.chooseName(contentname, element)
-                    context[name] = element
-
-                # load data into the object
-                importer = getMultiAdapter((element, child_el), IDOMAdapter)
-                importer.clone(self)
-                importer.updateURIMapping()
-                importer.load()
+        # child nodes
+        for child_el in node.childNodes:
+            if child_el.nodeType != Node.ELEMENT_NODE:
+                continue
+
+            if child_el.hasAttribute(u'value'):
+                field_name = child_el.tagName
+                if field_name in fields:
+                    text = child_el.getAttribute(u'value')
+                    field_io = IFieldIO(fields[name], None)
+                    value = field_io.load(text)
+                    if IBinaryFieldIO.providedBy(field_io):
+                        filename = value
+                        value = archive[filename]
+                    setattr(context, field_name, value)
+                continue
+
+            type = child_el.getAttribute(u'type')
+
+            contentname = type or child_el.tagName
+            factory_name = u'cpsskins.%s.%s' % (self.object_type,
+                                                contentname)
+
+            # create the object
+            element = createObject(factory_name)
+
+            if IStorage.providedBy(context):
+                context.add(element, contentname)
+            else:
+                namechooser = INameChooser(context)
+                name = namechooser.chooseName(contentname, element)
+                context[name] = element
+
+            # load data into the object
+            importer = getMultiAdapter((element, child_el), IDOMAdapter)
+            importer.clone(self)
+            importer.updateURIMapping()
+            importer.load()
 
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to