@@ -30,30 +30,38 @@ def _get_node_color(node):
30
30
31
31
32
32
@stream_operator ()
33
- def view (stream_spec , ** kwargs ):
33
+ def view (stream_spec , detail = False , filename = None , pipe = False , ** kwargs ):
34
34
try :
35
35
import graphviz
36
36
except ImportError :
37
37
raise ImportError ('failed to import graphviz; please make sure graphviz is installed (e.g. `pip install '
38
38
'graphviz`)' )
39
39
40
- filename = kwargs .pop ('filename' , None )
41
40
show_labels = kwargs .pop ('show_labels' , True )
42
- if filename is None :
41
+ if pipe and filename is not None :
42
+ raise ValueError ('Can\' t specify both `filename` and `pipe`' )
43
+ elif not pipe and filename is None :
43
44
filename = tempfile .mktemp ()
44
45
45
46
nodes = get_stream_spec_nodes (stream_spec )
46
47
47
48
sorted_nodes , outgoing_edge_maps = topo_sort (nodes )
48
- graph = graphviz .Digraph ()
49
+ graph = graphviz .Digraph (format = 'png' )
49
50
graph .attr (rankdir = 'LR' )
50
51
if len (list (kwargs .keys ())) != 0 :
51
52
raise ValueError ('Invalid kwargs key(s): {}' .format (', ' .join (list (kwargs .keys ()))))
52
53
53
54
for node in sorted_nodes :
54
55
color = _get_node_color (node )
55
56
56
- graph .node (str (hash (node )), node .short_repr , shape = 'box' , style = 'filled' , fillcolor = color )
57
+ if detail :
58
+ lines = [node .short_repr ]
59
+ lines += ['{!r}' .format (arg ) for arg in node .args ]
60
+ lines += ['{}={!r}' .format (key , node .kwargs [key ]) for key in sorted (node .kwargs )]
61
+ node_text = '\n ' .join (lines )
62
+ else :
63
+ node_text = node .short_repr
64
+ graph .node (str (hash (node )), node_text , shape = 'box' , style = 'filled' , fillcolor = color )
57
65
outgoing_edge_map = outgoing_edge_maps .get (node , {})
58
66
59
67
for edge in get_outgoing_edges (node , outgoing_edge_map ):
@@ -78,9 +86,11 @@ def view(stream_spec, **kwargs):
78
86
downstream_node_id = str (hash (edge .downstream_node ))
79
87
graph .edge (upstream_node_id , downstream_node_id , ** kwargs )
80
88
81
- graph .view (filename , cleanup = True )
82
-
83
- return stream_spec
89
+ if pipe :
90
+ return graph .pipe ()
91
+ else :
92
+ graph .view (filename , cleanup = True )
93
+ return stream_spec
84
94
85
95
86
96
__all__ = [
0 commit comments