def getPathAsAction(vistrail, v1, v2): sharedRoot = getSharedRoot(vistrail, [v1, v2]) sharedActionChain = getActionChain(vistrail, sharedRoot) sharedOperationDict = getCurrentOperationDict(sharedActionChain) v1Actions = getActionChain(vistrail, v1, sharedRoot) v2Actions = getActionChain(vistrail, v2, sharedRoot) (v1AddDict, v1DeleteDict) = getOperationDiff(v1Actions, sharedOperationDict) (v2AddDict, v2DeleteDict) = getOperationDiff(v2Actions, sharedOperationDict) # need to invert one of them (v1) v1Adds = v1AddDict.values() v1Adds.sort(key=lambda x: x.db_id) # faster than sort(lambda x, y: cmp(x.db_id, y.db_id)) v1Deletes = v1DeleteDict.values() v1Deletes.sort(key=lambda x: x.db_id) # faster than sort(lambda x, y: cmp(x.db_id, y.db_id)) v1InverseOps = invertOperations(sharedOperationDict, v1Adds, v1Deletes) # need to normalize ops of the other (v2) v2Adds = v2AddDict.values() v2Adds.sort(key=lambda x: x.db_id) # faster than sort(lambda x, y: cmp(x.db_id, y.db_id)) v2Deletes = v2DeleteDict.values() v2Deletes.sort(key=lambda x: x.db_id) # faster than sort(lambda x, y: cmp(x.db_id, y.db_id)) v2Ops = normalOperations(v2Adds, v2Deletes) allOps = v1InverseOps + v2Ops simplifiedOps = simplifyOps(allOps) return DBAction(id=-1, operations=simplifiedOps, )
def getVersionDifferences(vistrail, versions): sharedRoot = getSharedRoot(vistrail, versions) sharedActionChain = getActionChain(vistrail, sharedRoot) sharedOperationDict = getCurrentOperationDict(sharedActionChain) vOnlySorted = [] for v in versions: vActions = getActionChain(vistrail, v, sharedRoot) (vAddDict, vDeleteDict) = getOperationDiff(vActions, sharedOperationDict) vOnlyAdds = vAddDict.values() vOnlyAdds.sort(key=lambda x: x.db_id) vOnlyDeletes = vDeleteDict.values() vOnlyDeletes.sort(key=lambda x: x.db_id) vOpDict = copy.copy(sharedOperationDict) updateOperationDict(vOpDict, vOnlyDeletes, vOnlyAdds) vOps = vOpDict.values() vOps.sort(key=lambda x: x.db_id) vOnlySorted.append((vOnlyAdds, vOnlyDeletes, vOps)) sharedOps = sharedOperationDict.values() sharedOps.sort(key=lambda x: x.db_id) return (sharedOps, vOnlySorted)
def materializeWorkflow(vistrail, version): # construct path up through tree and perform each action if vistrail.db_has_action_with_id(version): workflow = DBWorkflow() # for action in getActionChain(vistrail, version): # oldPerformAction(action, workflow) performActions(getActionChain(vistrail, version), workflow) workflow.db_id = version workflow.db_vistrailId = vistrail.db_id return workflow elif version == 0: return DBWorkflow() else: raise VistrailsDBException("invalid workflow version %s" % version)
def fixActions(vistrail, v, actions): startingChain = getActionChain(vistrail, v) startingDict = getCurrentOperationDict(startingChain) addAndFixActions(startingDict, actions)