6
6
import tempfile
7
7
8
8
from ffmpeg .nodes import (
9
+ FilterNode ,
9
10
InputNode ,
10
11
OutputNode ,
11
- FilterNode ,
12
- operator ,
12
+ Stream ,
13
+ stream_operator ,
13
14
)
14
15
15
16
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 ):
18
31
try :
19
32
import graphviz
20
33
except ImportError :
21
34
raise ImportError ('failed to import graphviz; please make sure graphviz is installed (e.g. `pip install '
22
35
'graphviz`)' )
23
36
24
37
filename = kwargs .pop ('filename' , None )
25
- show_labels = kwargs .pop ('show_labels' , False )
38
+ show_labels = kwargs .pop ('show_labels' , True )
26
39
if filename is None :
27
40
filename = tempfile .mktemp ()
28
41
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 )
30
49
graph = graphviz .Digraph ()
31
50
graph .attr (rankdir = 'LR' )
32
51
if len (kwargs .keys ()) != 0 :
@@ -36,20 +55,17 @@ def view(*downstream_nodes, **kwargs):
36
55
name = node .name
37
56
if '_kwargs' in dir (node ) and 'filename' in node ._kwargs :
38
57
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
+
47
60
graph .node (str (hash (node )), name , shape = 'box' , style = 'filled' , fillcolor = color )
48
61
outgoing_edge_map = outgoing_edge_maps .get (node , {})
62
+
49
63
for edge in get_outgoing_edges (node , outgoing_edge_map ):
50
64
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 )
53
69
upstream_node_id = str (hash (edge .upstream_node ))
54
70
downstream_node_id = str (hash (edge .downstream_node ))
55
71
graph .edge (upstream_node_id , downstream_node_id , ** kwargs )
0 commit comments