Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
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)}")
Пример #4
0
    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
Пример #5
0
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)
Пример #6
0
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)
Пример #7
0
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)
Пример #8
0
    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
Пример #9
0
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()
Пример #10
0
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)