diff --git a/product/ERP5SyncML/Conduit/ERP5DocumentConduit.py b/product/ERP5SyncML/Conduit/ERP5DocumentConduit.py index d0b0c0b7b57a57bf20aebc456eb462a0eb28b1ad..6da3333dae77e220201966d7f4cb3d07af909581 100644 --- a/product/ERP5SyncML/Conduit/ERP5DocumentConduit.py +++ b/product/ERP5SyncML/Conduit/ERP5DocumentConduit.py @@ -95,22 +95,20 @@ class ERP5DocumentConduit(ERP5Conduit): prop_list = attribute.split('/') prop_id = prop_list[1] path_prop_id = '//' + prop_id - if data_change.has_key(prop_id): - xml = data_change[prop_id] - else: - xml = xml_previous.xpath(path_prop_id)[0] + if prop_id not in data_change: + data_change[prop_id] = xml_previous.xpath(path_prop_id)[0] + xml = data_change[prop_id] request = prop_list[-1] if getattr(ERP5Diff, '__version__', 0.0) <= 0.2: #Old ERP5Diff, xpath position start from 0, so add +1 to be compliant request = re.sub('(\d+)', lambda match:str(int(match.group(0))+1), request) if subnode.xpath('name()') in self.XUPDATE_DEL: - node_to_remove_list = xml.xpath(request) - if node_to_remove_list: - xml.remove(node_to_remove_list[0]) - data_change[prop_id] = xml + node_to_remove_list.extend(xml.xpath(request)) xml_xupdate.remove(subnode) elif subnode.xpath('name()') in self.XUPDATE_UPDATE: - node_to_remove_list.extend(xml.xpath(request)) + #retrieve element in previous_xml + element = xml.xpath(request)[0] + element.text = subnode.text xml_xupdate.remove(subnode) elif subnode.xpath('name()') in self.XUPDATE_INSERT_OR_ADD: if self.getSubObjectDepth(subnode[0]) == 0: @@ -120,10 +118,9 @@ class ERP5DocumentConduit(ERP5Conduit): prop_id = attribute.split('/')[2] if prop_id in self.data_type_tag_list: path_prop_id = '//' + prop_id - if data_change.has_key(prop_id): - xml = data_change[prop_id] - else: - xml = xml_previous.xpath(path_prop_id)[0] + if prop_id not in data_change: + data_change[prop_id] = xml_previous.xpath(path_prop_id)[0] + xml = data_change[prop_id] for element in self.getXupdateElementList(subnode): name_element = element.attrib.get('name', None) if name_element: @@ -135,7 +132,6 @@ class ERP5DocumentConduit(ERP5Conduit): block.attrib.update(attrib_dict) if len(element): block.text = element[-1].tail - data_change[prop_id] = xml xml_xupdate.remove(subnode) #Remove nodes at the end to avoid changing position of elements @@ -143,8 +139,7 @@ class ERP5DocumentConduit(ERP5Conduit): #apply modification if len(data_change): args = {} - for key in data_change.keys(): - node = data_change[key] + for key, node in data_change.iteritems(): node.text = None data = self.convertXmlValue(node) args[key] = data