diff --git a/lale/visualize.py b/lale/visualize.py index c8119482e..bb35faed5 100644 --- a/lale/visualize.py +++ b/lale/visualize.py @@ -173,7 +173,7 @@ def _json_to_graphviz_rec(uid, jsn, cluster2reps, is_root, dot_graph_attr): tooltip=_indiv_op_tooltip(uid, jsn), ) if "documentation_url" in jsn: - dot.attr("graph", URL=jsn["documentation_url"]) + dot.attr("graph", URL=jsn["documentation_url"], target="_blank") nodes = jsn["steps"] if jsn["class"] == _LALE_SKL_PIPELINE: names = list(nodes.keys()) @@ -192,6 +192,7 @@ def _json_to_graphviz_rec(uid, jsn, cluster2reps, is_root, dot_graph_attr): "style": "filled", "fillcolor": _STATE2COLOR[step_jsn["state"]], "tooltip": tooltip, + "target": "_blank", } if "documentation_url" in step_jsn: attrs["URL"] = step_jsn["documentation_url"] diff --git a/test/test_json_pretty_viz.py b/test/test_json_pretty_viz.py index 5a3682edf..6b1cae4e4 100644 --- a/test/test_json_pretty_viz.py +++ b/test/test_json_pretty_viz.py @@ -36,6 +36,19 @@ def test_with_operator_choice(self): optimizable = kernel_tfm_or_not >> tfm >> clf optimizable.visualize(ipython_display=False) + def test_url_generation(self): + from graphviz import Source + + from lale.lib.lale import NoOp + from lale.lib.sklearn import PCA, LogisticRegression + + sample = NoOp >> PCA >> LogisticRegression + result = Source(str(sample.visualize(ipython_display=False))) + for i in result: + if "URL" in i: + print(i) + self.assertTrue("target=_blank" in i) + def test_invalid_input(self): from sklearn.linear_model import LogisticRegression as SklearnLR