66import tempfile
77
88from ffmpeg .nodes import (
9+ FilterNode ,
910 InputNode ,
1011 OutputNode ,
11- FilterNode ,
12- operator ,
12+ Stream ,
13+ stream_operator ,
1314)
1415
1516
16- @operator ()
17- def view (* downstream_nodes , ** kwargs ):
17+ def _get_node_color (node ):
18+ if isinstance (node , InputNode ):
19+ color = '#99cc00'
20+ elif isinstance (node , OutputNode ):
21+ color = '#99ccff'
22+ elif isinstance (node , FilterNode ):
23+ color = '#ffcc00'
24+ else :
25+ color = None
26+ return color
27+
28+
29+ @stream_operator ()
30+ def view (* streams , ** kwargs ):
1831 try :
1932 import graphviz
2033 except ImportError :
2134 raise ImportError ('failed to import graphviz; please make sure graphviz is installed (e.g. `pip install '
2235 'graphviz`)' )
2336
2437 filename = kwargs .pop ('filename' , None )
25- show_labels = kwargs .pop ('show_labels' , False )
38+ show_labels = kwargs .pop ('show_labels' , True )
2639 if filename is None :
2740 filename = tempfile .mktemp ()
2841
29- sorted_nodes , outgoing_edge_maps = topo_sort (downstream_nodes )
42+ nodes = []
43+ for stream in streams :
44+ if not isinstance (stream , Stream ):
45+ raise TypeError ('Expected Stream; got {}' .format (type (stream )))
46+ nodes .append (stream .node )
47+
48+ sorted_nodes , outgoing_edge_maps = topo_sort (nodes )
3049 graph = graphviz .Digraph ()
3150 graph .attr (rankdir = 'LR' )
3251 if len (kwargs .keys ()) != 0 :
@@ -36,20 +55,17 @@ def view(*downstream_nodes, **kwargs):
3655 name = node .name
3756 if '_kwargs' in dir (node ) and 'filename' in node ._kwargs :
3857 name = os .path .basename (node ._kwargs ['filename' ])
39- if isinstance (node , InputNode ):
40- color = '#99cc00'
41- elif isinstance (node , OutputNode ):
42- color = '#99ccff'
43- elif isinstance (node , FilterNode ):
44- color = '#ffcc00'
45- else :
46- color = None
58+ color = _get_node_color (node )
59+
4760 graph .node (str (hash (node )), name , shape = 'box' , style = 'filled' , fillcolor = color )
4861 outgoing_edge_map = outgoing_edge_maps .get (node , {})
62+
4963 for edge in get_outgoing_edges (node , outgoing_edge_map ):
5064 kwargs = {}
51- if show_labels :
52- kwargs ['label' ] = '{} -> {}' .format (edge .upstream_label , edge .downstream_label )
65+ if show_labels and (edge .upstream_label is not None or edge .downstream_label is not None ):
66+ upstream_label = edge .upstream_label if edge .upstream_label is not None else ''
67+ downstream_label = edge .downstream_label if edge .downstream_label is not None else ''
68+ kwargs ['label' ] = '{} {}' .format (upstream_label , downstream_label )
5369 upstream_node_id = str (hash (edge .upstream_node ))
5470 downstream_node_id = str (hash (edge .downstream_node ))
5571 graph .edge (upstream_node_id , downstream_node_id , ** kwargs )
0 commit comments