diff --git a/product/ERP5SyncML/Conduit/ERP5Conduit.py b/product/ERP5SyncML/Conduit/ERP5Conduit.py index 1f3874fdab53f2d164abda38656b309ba65d0fb8..296a9054f71f3aad637b665a502ca96e60855692 100644 --- a/product/ERP5SyncML/Conduit/ERP5Conduit.py +++ b/product/ERP5SyncML/Conduit/ERP5Conduit.py @@ -125,6 +125,7 @@ class ERP5Conduit(XMLSyncUtilsMixin): [object.getPath(),keyword,local_and_actual_value,subscriber_value] """ conflict_list = [] + sub_object = None xml = self.convertToXml(xml) LOG('addNode',0,'xml_reconstitued: %s' % str(xml)) # In the case where this new node is a object to add @@ -139,7 +140,7 @@ class ERP5Conduit(XMLSyncUtilsMixin): xml = self.getElementFromXupdate(element) conflict_list += self.addNode(xml=xml,object=object, previous_xml=previous_xml, force=force, - simulate=simulate, **kw) + simulate=simulate, **kw)['conflict_list'] elif xml.nodeName == 'object': if object_id is None: object_id = self.getAttribute(xml,'id') @@ -147,17 +148,17 @@ class ERP5Conduit(XMLSyncUtilsMixin): LOG('addNode',0,'object_id: %s' % object_id) if object_id is not None: try: - subobject = object._getOb(object_id) + sub_object = object._getOb(object_id) except (AttributeError, KeyError, TypeError): - subobject = None - if subobject is None: # If so, it doesn't exist + sub_object = None + if sub_object is None: # If so, it doesn't exist portal_type = '' if xml.nodeName == 'object': portal_type = self.getObjectType(xml) elif xml.nodeName in self.XUPDATE_INSERT_OR_ADD: # Deprecated ??? portal_type = self.getXupdateObjectType(xml) # Deprecated ??? - subobject = self.constructContent(object, object_id, docid, portal_type) - self.newObject(object=subobject,xml=xml,simulate=simulate) + sub_object = self.constructContent(object, object_id, docid, portal_type) + self.newObject(object=sub_object,xml=xml,simulate=simulate) elif xml.nodeName in self.XUPDATE_INSERT_OR_ADD \ and self.getSubObjectDepth(xml)>=1: sub_object_id = self.getSubObjectId(xml) @@ -182,7 +183,7 @@ class ERP5Conduit(XMLSyncUtilsMixin): # Then do the udpate conflict_list += self.addNode(xml=sub_xml,object=sub_object, previous_xml=sub_previous_xml, force=force, - simulate=simulate, **kw) + simulate=simulate, **kw)['conflict_list'] elif xml.nodeName == self.history_tag or self.isHistoryAdd(xml)>0: conflict_list += self.addWorkflowNode(object, xml, simulate) #elif xml.nodeName in self.local_role_list or self.isLocalRole(xml)>0 and not simulate: @@ -193,7 +194,8 @@ class ERP5Conduit(XMLSyncUtilsMixin): else: conflict_list += self.updateNode(xml=xml,object=object, force=force, simulate=simulate, **kw) - return conflict_list + # We must returns the object created + return {'conflict_list':conflict_list, 'object': sub_object} security.declareProtected(Permissions.ModifyPortalContent, 'deleteNode') def deleteNode(self, xml=None, object=None, object_id=None, force=None, @@ -359,12 +361,12 @@ class ERP5Conduit(XMLSyncUtilsMixin): # This is the case where we have to call addNode LOG('updateNode',0,'we will add sub-object') conflict_list += self.addNode(xml=subnode,object=object,force=force, - simulate=simulate, **kw) + simulate=simulate, **kw)['conflict_list'] elif keyword == self.history_tag and not simulate: # This is the case where we have to call addNode LOG('updateNode',0,'we will add history') conflict_list += self.addNode(xml=subnode,object=object,force=force, - simulate=simulate,**kw) + simulate=simulate,**kw)['conflict_list'] elif keyword in (self.local_role_tag,self.local_permission_tag) and not simulate: # This is the case where we have to update Roles or update permission LOG('updateNode',0,'we will add a local role') @@ -373,7 +375,7 @@ class ERP5Conduit(XMLSyncUtilsMixin): #object.manage_setLocalRoles(user,roles) xml = self.getElementFromXupdate(xml) conflict_list += self.addNode(xml=xml,object=object,force=force, - simulate=simulate,**kw) + simulate=simulate,**kw)['conflict_list'] elif self.isSubObjectModification(xml): # We should find the object corresponding to # this update, so we have to look in the previous_xml @@ -902,7 +904,7 @@ class ERP5Conduit(XMLSyncUtilsMixin): selection_name = '' if subnode.nodeName in self.XUPDATE_INSERT_OR_ADD: conflict_list += conduit.addNode(xml=sub_xupdate,object=object, \ - force=force, simulate=simulate, **kw) + force=force, simulate=simulate, **kw)['conflict_list'] elif subnode.nodeName in self.XUPDATE_DEL: conflict_list += conduit.deleteNode(xml=sub_xupdate, object=object, \ force=force, simulate=simulate, **kw) diff --git a/product/ERP5SyncML/Subscription.py b/product/ERP5SyncML/Subscription.py index b1f8e18bfa266066090c4603d43982df8ecd6f88..83001eafb09b6a57215210c34295b48a0e804d33 100644 --- a/product/ERP5SyncML/Subscription.py +++ b/product/ERP5SyncML/Subscription.py @@ -512,6 +512,9 @@ class Signature(Folder,SyncCode): Return the actual action for a partial synchronization """ LOG('setConflictList, list',0,conflict_list) + for conflict in conflict_list: + if isinstance(conflict,str): + import pdb; pdb.set_trace() if conflict_list is None or conflict_list==[]: self.resetConflictList() else: diff --git a/product/ERP5SyncML/SynchronizationTool.py b/product/ERP5SyncML/SynchronizationTool.py index c68a076d262fa58ce8232e60eb3127190f3ce317..ee5413e4a25af0775147e159e490db91d7a50ac9 100644 --- a/product/ERP5SyncML/SynchronizationTool.py +++ b/product/ERP5SyncML/SynchronizationTool.py @@ -385,7 +385,10 @@ class SynchronizationTool( SubscriptionSynchronization, PublicationSynchronizati conflict_list += [conflict.__of__(subscriber)] for subscription in self.getSubscriptionList(): sub_conflict_list = subscription.getConflictList() + LOG('SynchronizationTool.getConflictList, sub_conflict_list',0,sub_conflict_list) for conflict in sub_conflict_list: + if isinstance(conflict,str): + import pdb; pdb.set_trace() #conflict.setDomain('Subscription') conflict.setSubscriber(subscription) #conflict.setDomainId(subscription.getId()) diff --git a/product/ERP5SyncML/XMLSyncUtils.py b/product/ERP5SyncML/XMLSyncUtils.py index f6e99dce216b35b09f8c95705b1cc831d5e11e22..09c3531c4532936b33dba79bfe9909144bcdbb54 100644 --- a/product/ERP5SyncML/XMLSyncUtils.py +++ b/product/ERP5SyncML/XMLSyncUtils.py @@ -772,9 +772,12 @@ class XMLSyncUtilsMixin(SyncCode): if object is None: object_id = domain.generateNewIdWithGenerator(object=destination_path,gid=object_gid) #if object_id is not None: - conflict_list += conduit.addNode(xml=data_subnode, object=destination_path, + add_data = conduit.addNode(xml=data_subnode, object=destination_path, object_id=object_id) - object = domain.getObjectFromGid(object_gid) + conflict_list += add_data['conflict_list'] + # Retrieve directly the object from addNode + object = add_data['object'] + LOG('XMLSyncUtils, in ADD add_data',0,add_data) signature.setPath(object.getPhysicalPath()) LOG('applyActionList',0,'object after add: %s' % repr(object)) if object is not None: