1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
:mod:`altgraph.ObjectGraph` --- Graphs of objecs with an identifier
===================================================================
.. module:: altgraph.ObjectGraph
:synopsis: A graph of objects that have a "graphident" attribute.
.. class:: ObjectGraph([graph[, debug]])
A graph of objects that have a "graphident" attribute. The
value of this attribute is the key for the object in the
graph.
The optional *graph* is a previously constructed
:class:`Graph <altgraph.Graph.Graph>`.
The optional *debug* level controls the amount of debug output
(see :meth:`msg`, :meth:`msgin` and :meth:`msgout`).
.. note:: the altgraph library does not generate output, the
debug attribute and message methods are present for use
by subclasses.
.. data:: ObjectGraph.graph
An :class:`Graph <altgraph.Graph.Graph>` object that contains
the graph data.
.. method:: ObjectGraph.addNode(node)
Adds a *node* to the graph.
.. note:: re-adding a node that was previously removed
using :meth:`removeNode` will reinstate the previously
removed node.
.. method:: ObjectGraph.createNode(self, cls, name, \*args, \**kwds)
Creates a new node using ``cls(*args, **kwds)`` and adds that
node using :meth:`addNode`.
Returns the newly created node.
.. method:: ObjectGraph.removeNode(node)
Removes a *node* from the graph when it exists. The *node* argument
is either a node object, or the graphident of a node.
.. method:: ObjectGraph.createReferences(fromnode, tonode[, edge_data])
Creates a reference from *fromnode* to *tonode*. The optional
*edge_data* is associated with the edge.
*Fromnode* and *tonode* can either be node objects or the graphident
values for nodes. When *fromnode* is :data:`None` *tonode* is a root
for the graph.
.. method:: removeReference(fromnode, tonode)
Removes the reference from *fromnode* to *tonode* if it exists.
.. method:: ObjectGraph.getRawIdent(node)
Returns the *graphident* attribute of *node*, or the graph itself
when *node* is :data:`None`.
.. method:: getIdent(node)
Same as :meth:`getRawIdent`, but only if the node is part
of the graph.
*Node* can either be an actual node object or the graphident of
a node.
.. method:: ObjectGraph.findNode(node)
Returns a given node in the graph, or :data:`Node` when it cannot
be found.
*Node* is either an object with a *graphident* attribute or
the *graphident* attribute itself.
.. method:: ObjectGraph.__contains__(node)
Returns True if *node* is a member of the graph. *Node* is either an
object with a *graphident* attribute or the *graphident* attribute itself.
.. method:: ObjectGraph.flatten([condition[, start]])
Yield all nodes that are entirely reachable by *condition*
starting fromt he given *start* node or the graph root.
.. note:: objects are only reachable from the graph root
when there is a reference from the root to the node
(either directly or through another node)
.. method:: ObjectGraph.nodes()
Yield all nodes in the graph.
.. method:: ObjectGraph.get_edges(node)
Returns two iterators that yield the nodes reaching by
outgoing and incoming edges for *node*. Note that the
iterator for incoming edgets can yield :data:`None` when the
*node* is a root of the graph.
Use :data:`None` for *node* to fetch the roots of the graph.
.. method:: ObjectGraph.filterStack(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*)
.. method:: ObjectGraph.edgeData(fromNode, toNode):
Return the edge data associated with the edge from *fromNode*
to *toNode*. Raises :exc:`KeyError` when no such edge exists.
.. versionadded: 0.12
.. method:: ObjectGraph.updateEdgeData(fromNode, toNode, edgeData)
Replace the data associated with the edge from *fromNode* to
*toNode* by *edgeData*.
Raises :exc:`KeyError` when the edge does not exist.
Debug output
------------
.. data:: ObjectGraph.debug
The current debug level.
.. method:: ObjectGraph.msg(level, text, \*args)
Print a debug message at the current indentation level when the current
debug level is *level* or less.
.. method:: ObjectGraph.msgin(level, text, \*args)
Print a debug message when the current debug level is *level* or less,
and increase the indentation level.
.. method:: ObjectGraph.msgout(level, text, \*args)
Decrease the indentation level and print a debug message when the
current debug level is *level* or less.
|