mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-05 07:18:35 +01:00
This commit fixes 3 things: 1. The path printed on the terminal is properly is quoted. This was problematic when the output is piped to `xdg-open` if the path contained spaces or quotes or special characters. 2. The path is resolved. This is not an issue at all, but makes the output nicer. 3. The path with which the browser is opened with uses relative path. This is done to solve issue in WSL, that the absolute path is not accessible outside the WSL for host programs as the linux filesystem is available on `/wsl$` path.
171 lines
4.3 KiB
Python
171 lines
4.3 KiB
Python
import logging
|
|
import os
|
|
import posixpath
|
|
|
|
import pytest
|
|
|
|
from dvc.cli import parse_args
|
|
from dvc.command.plots import CmdPlotsDiff, CmdPlotsShow
|
|
|
|
|
|
def test_plots_diff(dvc, mocker):
|
|
cli_args = parse_args(
|
|
[
|
|
"plots",
|
|
"diff",
|
|
"--out",
|
|
"result.extension",
|
|
"-t",
|
|
"template",
|
|
"--targets",
|
|
"datafile",
|
|
"--show-vega",
|
|
"-x",
|
|
"x_field",
|
|
"-y",
|
|
"y_field",
|
|
"--title",
|
|
"my_title",
|
|
"--x-label",
|
|
"x_title",
|
|
"--y-label",
|
|
"y_title",
|
|
"--experiment",
|
|
"HEAD",
|
|
"tag1",
|
|
"tag2",
|
|
]
|
|
)
|
|
assert cli_args.func == CmdPlotsDiff
|
|
|
|
cmd = cli_args.func(cli_args)
|
|
m = mocker.patch(
|
|
"dvc.repo.plots.diff.diff", return_value={"datafile": "filledtemplate"}
|
|
)
|
|
|
|
assert cmd.run() == 0
|
|
|
|
m.assert_called_once_with(
|
|
cmd.repo,
|
|
targets=["datafile"],
|
|
revs=["HEAD", "tag1", "tag2"],
|
|
props={
|
|
"template": "template",
|
|
"x": "x_field",
|
|
"y": "y_field",
|
|
"title": "my_title",
|
|
"x_label": "x_title",
|
|
"y_label": "y_title",
|
|
},
|
|
experiment=True,
|
|
)
|
|
|
|
|
|
def test_plots_show_vega(dvc, mocker):
|
|
cli_args = parse_args(
|
|
[
|
|
"plots",
|
|
"show",
|
|
"-o",
|
|
"result.extension",
|
|
"-t",
|
|
"template",
|
|
"--show-vega",
|
|
"--no-header",
|
|
"datafile",
|
|
]
|
|
)
|
|
assert cli_args.func == CmdPlotsShow
|
|
|
|
cmd = cli_args.func(cli_args)
|
|
|
|
m = mocker.patch(
|
|
"dvc.repo.plots.Plots.show",
|
|
return_value={"datafile": "filledtemplate"},
|
|
)
|
|
|
|
assert cmd.run() == 0
|
|
|
|
m.assert_called_once_with(
|
|
targets=["datafile"], props={"template": "template", "header": False},
|
|
)
|
|
|
|
|
|
def test_plots_diff_vega(dvc, mocker, caplog):
|
|
cli_args = parse_args(
|
|
[
|
|
"plots",
|
|
"diff",
|
|
"HEAD~10",
|
|
"HEAD~1",
|
|
"--show-vega",
|
|
"--targets",
|
|
"plots.csv",
|
|
]
|
|
)
|
|
cmd = cli_args.func(cli_args)
|
|
mocker.patch(
|
|
"dvc.repo.plots.diff.diff", return_value={"plots.csv": "plothtml"}
|
|
)
|
|
assert cmd.run() == 0
|
|
assert "plothtml" in caplog.text
|
|
|
|
|
|
def test_plots_diff_open(tmp_dir, dvc, mocker, caplog):
|
|
mocked_open = mocker.patch("webbrowser.open", return_value=True)
|
|
cli_args = parse_args(["plots", "diff", "--targets", "datafile", "--open"])
|
|
cmd = cli_args.func(cli_args)
|
|
mocker.patch(
|
|
"dvc.repo.plots.diff.diff", return_value={"datafile": "filledtemplate"}
|
|
)
|
|
|
|
assert cmd.run() == 0
|
|
mocked_open.assert_called_once_with("plots.html")
|
|
|
|
expected_url = posixpath.join(tmp_dir.as_uri(), "plots.html")
|
|
assert expected_url in caplog.text
|
|
|
|
|
|
def test_plots_diff_open_failed(tmp_dir, dvc, mocker, caplog):
|
|
mocked_open = mocker.patch("webbrowser.open", return_value=False)
|
|
cli_args = parse_args(["plots", "diff", "--targets", "datafile", "--open"])
|
|
cmd = cli_args.func(cli_args)
|
|
mocker.patch(
|
|
"dvc.repo.plots.diff.diff", return_value={"datafile": "filledtemplate"}
|
|
)
|
|
|
|
assert cmd.run() == 1
|
|
mocked_open.assert_called_once_with("plots.html")
|
|
|
|
error_message = "Failed to open. Please try opening it manually."
|
|
expected_url = posixpath.join(tmp_dir.as_uri(), "plots.html")
|
|
|
|
assert caplog.record_tuples == [
|
|
("dvc.command.plots", logging.INFO, expected_url),
|
|
("dvc.command.plots", logging.ERROR, error_message),
|
|
]
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"output, expected_url_path",
|
|
[
|
|
("plots file with spaces.html", "plots%20file%20with%20spaces.html"),
|
|
(os.path.join("dir", "..", "plots.html"), "plots.html"),
|
|
],
|
|
ids=["quote", "resolve"],
|
|
)
|
|
def test_plots_path_is_quoted_and_resolved_properly(
|
|
tmp_dir, dvc, mocker, caplog, output, expected_url_path
|
|
):
|
|
cli_args = parse_args(
|
|
["plots", "diff", "--targets", "datafile", "--out", output]
|
|
)
|
|
cmd = cli_args.func(cli_args)
|
|
mocker.patch(
|
|
"dvc.repo.plots.diff.diff", return_value={"datafile": "filledtemplate"}
|
|
)
|
|
|
|
assert cmd.run() == 0
|
|
expected_url = posixpath.join(tmp_dir.as_uri(), expected_url_path)
|
|
assert expected_url in caplog.text
|