Index: tools/telemetry/third_party/altgraph/altgraph/ObjectGraph.py |
diff --git a/tools/telemetry/third_party/altgraph/altgraph/ObjectGraph.py b/tools/telemetry/third_party/altgraph/altgraph/ObjectGraph.py |
deleted file mode 100644 |
index d07f51b6885f4057478a829ac703db4840701d88..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/third_party/altgraph/altgraph/ObjectGraph.py |
+++ /dev/null |
@@ -1,202 +0,0 @@ |
-""" |
-altgraph.ObjectGraph - Graph of objects with an identifier |
-========================================================== |
- |
-A graph of objects that have a "graphident" attribute. |
-graphident is the key for the object in the graph |
-""" |
- |
-from altgraph import GraphError |
-from altgraph.Graph import Graph |
-from altgraph.GraphUtil import filter_stack |
- |
-class ObjectGraph(object): |
- """ |
- A graph of objects that have a "graphident" attribute. |
- graphident is the key for the object in the graph |
- """ |
- def __init__(self, graph=None, debug=0): |
- if graph is None: |
- graph = Graph() |
- self.graphident = self |
- self.graph = graph |
- self.debug = debug |
- self.indent = 0 |
- graph.add_node(self, None) |
- |
- def __repr__(self): |
- return '<%s>' % (type(self).__name__,) |
- |
- def flatten(self, condition=None, start=None): |
- """ |
- Iterate over the subgraph that is entirely reachable by condition |
- starting from the given start node or the ObjectGraph root |
- """ |
- if start is None: |
- start = self |
- start = self.getRawIdent(start) |
- return self.graph.iterdata(start=start, condition=condition) |
- |
- def nodes(self): |
- for ident in self.graph: |
- node = self.graph.node_data(ident) |
- if node is not None: |
- yield self.graph.node_data(ident) |
- |
- |
- def get_edges(self, node): |
- start = self.getRawIdent(node) |
- _, _, outraw, incraw = self.graph.describe_node(start) |
- def iter_edges(lst, n): |
- seen = set() |
- for tpl in (self.graph.describe_edge(e) for e in lst): |
- ident = tpl[n] |
- if ident not in seen: |
- yield self.findNode(ident) |
- seen.add(ident) |
- return iter_edges(outraw, 3), iter_edges(incraw, 2) |
- |
- def edgeData(self, fromNode, toNode): |
- start = self.getRawIdent(fromNode) |
- stop = self.getRawIdent(toNode) |
- edge = self.graph.edge_by_node(start, stop) |
- return self.graph.edge_data(edge) |
- |
- def updateEdgeData(self, fromNode, toNode, edgeData): |
- start = self.getRawIdent(fromNode) |
- stop = self.getRawIdent(toNode) |
- edge = self.graph.edge_by_node(start, stop) |
- self.graph.update_edge_data(edge, edgeData) |
- |
- def filterStack(self, filters): |
- """ |
- Filter the ObjectGraph in-place by removing all edges to nodes that |
- do not match every filter in the given filter list |
- |
- Returns a tuple containing the number of: (nodes_visited, nodes_removed, nodes_orphaned) |
- """ |
- visited, removes, orphans = filter_stack(self.graph, self, filters) |
- |
- for last_good, tail in orphans: |
- self.graph.add_edge(last_good, tail, edge_data='orphan') |
- |
- for node in removes: |
- self.graph.hide_node(node) |
- |
- return len(visited)-1, len(removes), len(orphans) |
- |
- def removeNode(self, node): |
- """ |
- Remove the given node from the graph if it exists |
- """ |
- ident = self.getIdent(node) |
- if ident is not None: |
- self.graph.hide_node(ident) |
- |
- def removeReference(self, fromnode, tonode): |
- """ |
- Remove all edges from fromnode to tonode |
- """ |
- if fromnode is None: |
- fromnode = self |
- fromident = self.getIdent(fromnode) |
- toident = self.getIdent(tonode) |
- if fromident is not None and toident is not None: |
- while True: |
- edge = self.graph.edge_by_node(fromident, toident) |
- if edge is None: |
- break |
- self.graph.hide_edge(edge) |
- |
- def getIdent(self, node): |
- """ |
- Get the graph identifier for a node |
- """ |
- ident = self.getRawIdent(node) |
- if ident is not None: |
- return ident |
- node = self.findNode(node) |
- if node is None: |
- return None |
- return node.graphident |
- |
- def getRawIdent(self, node): |
- """ |
- Get the identifier for a node object |
- """ |
- if node is self: |
- return node |
- ident = getattr(node, 'graphident', None) |
- return ident |
- |
- def __contains__(self, node): |
- return self.findNode(node) is not None |
- |
- def findNode(self, node): |
- """ |
- Find the node on the graph |
- """ |
- ident = self.getRawIdent(node) |
- if ident is None: |
- ident = node |
- try: |
- return self.graph.node_data(ident) |
- except KeyError: |
- return None |
- |
- def addNode(self, node): |
- """ |
- Add a node to the graph referenced by the root |
- """ |
- self.msg(4, "addNode", node) |
- |
- try: |
- self.graph.restore_node(node.graphident) |
- except GraphError: |
- self.graph.add_node(node.graphident, node) |
- |
- def createReference(self, fromnode, tonode, edge_data=None): |
- """ |
- Create a reference from fromnode to tonode |
- """ |
- if fromnode is None: |
- fromnode = self |
- fromident, toident = self.getIdent(fromnode), self.getIdent(tonode) |
- if fromident is None or toident is None: |
- return |
- self.msg(4, "createReference", fromnode, tonode, edge_data) |
- self.graph.add_edge(fromident, toident, edge_data=edge_data) |
- |
- def createNode(self, cls, name, *args, **kw): |
- """ |
- Add a node of type cls to the graph if it does not already exist |
- by the given name |
- """ |
- m = self.findNode(name) |
- if m is None: |
- m = cls(name, *args, **kw) |
- self.addNode(m) |
- return m |
- |
- def msg(self, level, s, *args): |
- """ |
- Print a debug message with the given level |
- """ |
- if s and level <= self.debug: |
- print ("%s%s %s" % (" " * self.indent, s, ' '.join(map(repr, args)))) |
- |
- def msgin(self, level, s, *args): |
- """ |
- Print a debug message and indent |
- """ |
- if level <= self.debug: |
- self.msg(level, s, *args) |
- self.indent = self.indent + 1 |
- |
- def msgout(self, level, s, *args): |
- """ |
- Dedent and print a debug message |
- """ |
- if level <= self.debug: |
- self.indent = self.indent - 1 |
- self.msg(level, s, *args) |