def getGraph(self, sessionId): allGraphs = {} thrExs = {} self._tp.map(functools.partial(self._getGraph, sessionId, allGraphs, thrExs), self._dmHosts) if thrExs: raise Exception("One ore more exceptions occurred while getting the graph for session %s" % (sessionId), thrExs) # The graphs coming from the DMs are not interconnected, we need to # add the missing connections to the graph before returning upstream for rel in self._interDMRelations[sessionId]: graph_loader.addLink(rel.rel, allGraphs[rel.rhs], rel.lhs) return allGraphs
def getGraph(self, sessionId): allGraphs = {} self.replicate(sessionId, self._getGraph, "getting the graph", collect=allGraphs) # The graphs coming from the DMs are not interconnected, we need to # add the missing connections to the graph before returning upstream rels = set([ z for x in self._drop_rels[sessionId].values() for y in x.values() for z in y ]) for rel in rels: graph_loader.addLink(rel.rel, allGraphs[rel.rhs], rel.lhs) return allGraphs
def linkGraphParts(self, lhOID, rhOID, linkType, force=False): """ Links together two DROP specifications (i.e., those pointed by `lhOID` and `rhOID`) using `linkType`. The DROP specifications must both already be part of one of the graph specs contained in this session; otherwise an exception will be raised. """ if self.status != SessionStates.BUILDING: raise InvalidSessionState("Can't link DROPs anymore since this session isn't in the BUILDING state") # Look for the two DROPs in all our graph parts and reporting # missing DROPs lhDropSpec = self._graph.get(lhOID, None) rhDropSpec = self._graph.get(rhOID, None) missingOids = [] if lhDropSpec is None: missingOids.append(lhOID) if rhDropSpec is None: missingOids.append(rhOID) if missingOids: oids = 'OID' if len(missingOids) == 1 else 'OIDs' raise InvalidGraphException('No DROP found for %s %r' % (oids, missingOids)) graph_loader.addLink(linkType, lhDropSpec, rhOID, force=force)
def linkGraphParts(self, lhOID, rhOID, linkType, force=False): """ Links together two DROP specifications (i.e., those pointed by `lhOID` and `rhOID`) using `linkType`. The DROP specifications must both already be part of one of the graph specs contained in this session; otherwise an exception will be raised. """ if self.status != SessionStates.BUILDING: raise Exception("Can't link DROPs anymore since this session isn't in the BUILDING state") # Look for the two DROPs in all our graph parts and reporting # missing DROPs lhDropSpec = self.findByOidInParts(lhOID) rhDropSpec = self.findByOidInParts(rhOID) missingOids = [] if lhDropSpec is None: missingOids.append(lhOID) if rhDropSpec is None: missingOids.append(rhOID) if missingOids: oids = 'OID' if len(missingOids) == 1 else 'OIDs' raise Exception('No DROP found for %s %r' % (oids, missingOids)) graph_loader.addLink(linkType, lhDropSpec, rhOID, force=force)