def run(self): from pathlib import Path if self.args.show_vega: if not self.args.targets: logger.error("please specify a target for `--show-vega`") return 1 if len(self.args.targets) > 1: logger.error( "you can only specify one target for `--show-vega`" ) return 1 try: plots_data = self._func( targets=self.args.targets, props=self._props() ) if not plots_data: ui.error_write( "No plots were loaded, " "visualization file will not be created." ) if self.args.show_vega: target = self.args.targets[0] plot_json = find_vega(self.repo, plots_data, target) if plot_json: ui.write(plot_json) return 0 rel: str = self.args.out or "dvc_plots" path: Path = (Path.cwd() / rel).resolve() index_path = render( self.repo, plots_data, path=path, html_template_path=self.args.html_template, ) assert index_path.is_absolute() url = index_path.as_uri() ui.write(url) if self.args.open: import webbrowser opened = webbrowser.open(index_path) if not opened: ui.error_write( "Failed to open. Please try opening it manually." ) return 1 return 0 except DvcException: logger.exception("") return 1
def _run(self, target, revs=None): metrics, plots = self.repo.live.show(target=target, revs=revs) if plots: html_path = Path.cwd() / (self.args.target + "_html") from dvc.render.utils import render index_path = render(self.repo, plots, metrics, html_path) ui.write(index_path.as_uri()) return 0 return 1
def create_summary(out): assert out.live and out.live["html"] metrics, plots = out.repo.live.show(str(out.path_info)) html_path = out.path_info.fspath + "_dvc_plots" index_path = render(out.repo, plots, metrics=metrics, path=html_path, refresh_seconds=5) logger.info(f"\nfile://{os.path.abspath(index_path)}")
def _run(self, target, revs=None): from dvc.render.utils import match_renderers, render metrics, plots = self.repo.live.show(target=target, revs=revs) if plots: html_path = Path.cwd() / (self.args.target + "_html") renderers = match_renderers(plots, self.repo.plots.templates) index_path = render(self.repo, renderers, metrics, html_path) ui.write(index_path.as_uri()) return 0 return 1
def create_summary(out): assert out.live and out.live["html"] metrics, plots = out.repo.live.show(out.fs_path) html_path = out.fs_path + "_dvc_plots" index_path = render(out.repo, plots, metrics=metrics, path=html_path, refresh_seconds=5) webbrowser_open(index_path)
def create_summary(out): assert out.live and out.live["html"] metrics, plots = out.repo.live.show(out.fs_path) html_path = out.fs_path + "_dvc_plots" renderers = match_renderers(plots, out.repo.plots.templates) index_path = render(out.repo, renderers, metrics=metrics, path=html_path, refresh_seconds=5) if out.repo.config["plots"].get("auto_open", False): webbrowser_open(index_path)
def create_summary(out): assert out.live and out.live["html"] metrics, plots = out.repo.live.show(out.fs_path) html_path = out.fs_path + "_dvc_plots" index_path = render(out.repo, plots, metrics=metrics, path=html_path, refresh_seconds=5) url = index_path.as_uri() if "Microsoft" in uname().release: url = Path(index_path) / "index.html" webbrowser_open(url)
def run(self): from pathlib import Path from dvc.render.utils import match_renderers, render from dvc.render.vega import VegaRenderer if self.args.show_vega: if not self.args.targets: logger.error("please specify a target for `--show-vega`") return 1 if len(self.args.targets) > 1: logger.error( "you can only specify one target for `--show-vega`") return 1 if self.args.json: logger.error( "'--show-vega' and '--json' are mutually exclusive " "options.") return 1 try: plots_data = self._func(targets=self.args.targets, props=self._props()) if not plots_data: ui.error_write("No plots were loaded, " "visualization file will not be created.") renderers = match_renderers(plots_data=plots_data, templates=self.repo.plots.templates) if self.args.show_vega: renderer = first( filter(lambda r: isinstance(r, VegaRenderer), renderers)) if renderer: ui.write_json(renderer.asdict()) return 0 if self.args.json: _show_json(renderers, self.args.out) return 0 rel: str = self.args.out or "dvc_plots" path: Path = (Path.cwd() / rel).resolve() index_path = render( self.repo, renderers, path=path, html_template_path=self.args.html_template, ) ui.write(index_path.as_uri()) auto_open = self.repo.config["plots"].get("auto_open", False) if self.args.open or auto_open: if not auto_open: ui.write("To enable auto opening, you can run:\n" "\n" "\tdvc config plots.auto_open true") return ui.open_browser(index_path) return 0 except DvcException: logger.exception("") return 1
def test_render(tmp_dir, dvc): data = { "HEAD": { "data": { "file.json": { "data": [{ "y": 5 }, { "y": 6 }], "props": { "fields": {"y"} }, }, os.path.join("sub", "other_file.jpg"): { "data": b"content" }, } }, "v2": { "data": { "file.json": { "data": [{ "y": 3 }, { "y": 5 }], "props": { "fields": {"y"} }, }, "other_file.jpg": { "data": b"content2" }, } }, "v1": { "data": { "some.csv": { "data": [{ "y": 2 }, { "y": 3 }], "props": { "fields": {"y"} }, }, "another.gif": { "data": b"content3" }, } }, } render(dvc, data, path=os.path.join("results", "dir")) page_path = tmp_dir / "results" / "dir" index_path = page_path / "index.html" assert index_path.is_file() assert_website_has_image(page_path, "HEAD", os.path.join("sub", "other_file.jpg"), b"content") assert_website_has_image(page_path, "v2", "other_file.jpg", b"content2") assert_website_has_image(page_path, "v1", "another.gif", b"content3") index_content = index_path.read_text() file_vega = find_vega(dvc, data, "file.json") some_vega = find_vega(dvc, data, "some.csv") assert file_vega in index_content.strip() assert some_vega in index_content.strip()
def test_render(tmp_dir, dvc): data = { "HEAD": { "data": { "file.json": { "data": [{ "y": 5 }, { "y": 6 }], "props": { "fields": {"y"} }, }, os.path.join("sub", "other_file.jpg"): { "data": b"content" }, } }, "v2": { "data": { "file.json": { "data": [{ "y": 3 }, { "y": 5 }], "props": { "fields": {"y"} }, }, "other_file.jpg": { "data": b"content2" }, } }, "v1": { "data": { "some.csv": { "data": [{ "y": 2 }, { "y": 3 }], "props": { "fields": {"y"} }, }, "another.gif": { "data": b"content3" }, } }, } renderers = match_renderers(data, dvc.plots.templates) render(dvc, renderers, path=os.path.join("results", "dir")) page_path = tmp_dir / "results" / "dir" index_path = page_path / "index.html" assert index_path.is_file() assert_website_has_image(page_path, "HEAD", os.path.join("sub", "other_file.jpg"), b"content") assert_website_has_image(page_path, "v2", "other_file.jpg", b"content2") assert_website_has_image(page_path, "v1", "another.gif", b"content3") def clean(txt: str) -> str: return txt.replace("\n", "").replace("\r", "").replace(" ", "") def get_vega_string(data, filename): file_data = dpath.util.search(data, ["*", "*", filename]) return VegaRenderer(file_data, dvc.plots.templates.load()).partial_html() index_content = index_path.read_text() assert clean(get_vega_string(data, "file.json")) in clean(index_content) assert clean(get_vega_string(data, "some.csv")) in clean(index_content)