Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
tutte [label="TUTTE HERMSGERVORDENBROTBORDA"]
"M00se" -- trained_by
trained_by -- tutte
}
>>> dot.view('test-output/m00se.gv') # doctest: +SKIP
'test-output/m00se.gv.pdf'
"""
from . import lang
from . import files
__all__ = ['Graph', 'Digraph']
class Dot(files.File):
"""Assemble, save, and render DOT source code, open result in viewer."""
_comment = '// %s'
_subgraph = 'subgraph %s{'
_subgraph_plain = '%s{'
_node = _attr = '\t%s%s'
_attr_plain = _attr % ('%s', '')
_tail = '}'
_quote = staticmethod(lang.quote)
_quote_edge = staticmethod(lang.quote_edge)
_a_list = staticmethod(lang.a_list)
_attr_list = staticmethod(lang.attr_list)
def __init__(self, name=None, comment=None,
node_names = {}
assert type(node_names) is dict
if node_colors is None:
node_colors = {}
assert type(node_colors) is dict
node_attrs = {
'shape': 'circle',
'fontsize': '9',
'height': '0.2',
'width': '0.2'}
dot = graphviz.Digraph(format=fmt, node_attr=node_attrs)
inputs = set()
for k in config.genome_config.input_keys:
inputs.add(k)
name = node_names.get(k, str(k))
input_attrs = {'style': 'filled',
'shape': 'box'}
input_attrs['fillcolor'] = node_colors.get(k, 'lightgray')
dot.node(name, _attributes=input_attrs)
outputs = set()
for k in config.genome_config.output_keys:
outputs.add(k)
name = node_names.get(k, str(k))
node_attrs = {'style': 'filled'}
node_attrs['fillcolor'] = node_colors.get(k, 'lightblue')
def test_visualize_raises_informative_error_without_sys_graphviz(self, monkeypatch):
f = Flow(name="test")
f.add_task(Task())
import graphviz as gviz
err = gviz.backend.ExecutableNotFound
graphviz = MagicMock(
Digraph=lambda: MagicMock(
render=MagicMock(side_effect=err("Can't find dot!"))
)
)
graphviz.backend.ExecutableNotFound = err
with patch.dict("sys.modules", graphviz=graphviz):
with pytest.raises(err, match="Please install Graphviz"):
f.visualize()
def test_missing_executable(func, args):
with pytest.raises(ExecutableNotFound, match=r'execute'):
func(*args)
(render, ['dot', 'pdf', 'nonfilepath']),
(pipe, ['dot', 'pdf', b'nongraph']),
(version, []),
])
def test_missing_executable(func, args):
with pytest.raises(ExecutableNotFound, match=r'execute'):
func(*args)
def test_render_format_unknown():
with pytest.raises(ValueError, match=r'unknown format'):
render('dot', '', 'nonfilepath')
def test_render_renderer_missing():
with pytest.raises(RequiredArgumentError, match=r'without renderer'):
render('dot', 'ps', 'nonfilepath', None, 'core')
def test_render_mocked(capsys, mocker, Popen, quiet): # noqa: N803
proc = Popen.return_value
proc.returncode = 0
proc.communicate.return_value = (b'stdout', b'stderr')
assert render('dot', 'pdf', 'nonfilepath', quiet=quiet) == 'nonfilepath.pdf'
Popen.assert_called_once_with(['dot', '-Tpdf', '-O', 'nonfilepath'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
cwd=None, startupinfo=mocker.ANY)
check_startupinfo(Popen.call_args.kwargs['startupinfo'])
proc.communicate.assert_called_once_with(None)
assert capsys.readouterr() == ('', '' if quiet else 'stderr')
subdir = tmpdir / 'subdir'
subdir.ensure(dir=True)
img_path = subdir / 'dot_red.png'
(filesdir / img_path.basename).copy(img_path)
assert img_path.size()
gv_path = subdir / 'img.gv'
rendered = gv_path.new(ext='%s.%s' % (gv_path.ext, format_))
gv_rel, rendered_rel = map(tmpdir.bestrelpath, (gv_path, rendered))
assert all(s.startswith('subdir') for s in (gv_rel, rendered_rel))
gv_path.write_text(u'graph { red_dot [image="%s"] }' % img_path.basename,
encoding='ascii')
with tmpdir.as_cwd():
assert render(engine, format_, gv_rel) == rendered_rel
assert rendered.size()
assert capsys.readouterr() == ('', '')
def test_render(capsys, tmpdir, engine, format_, renderer, formatter,
expected_suffix, filename='hello.gv',
data=b'digraph { hello -> world }'):
lpath = tmpdir / filename
lpath.write_binary(data)
rendered = lpath.new(ext='%s.%s' % (lpath.ext, expected_suffix))
assert render(engine, format_, str(lpath), renderer, formatter) == str(rendered)
assert rendered.size()
assert capsys.readouterr() == ('', '')