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