Пример #1
0
def test_plots_path_is_quoted_and_resolved_properly(
    tmp_dir, dvc, mocker, capsys, output, expected_url_path, plots_data
):
    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": plots_data}
    )

    assert cmd.run() == 0
    expected_url = posixpath.join(tmp_dir.as_uri(), expected_url_path)

    out, _ = capsys.readouterr()
    assert expected_url in out
Пример #2
0
def test_import_url(mocker):
    cli_args = parse_args([
        "import-url", "src", "out", "--file", "file", "--desc", "description"
    ])
    assert cli_args.func == CmdImportUrl

    cmd = cli_args.func(cli_args)
    m = mocker.patch.object(cmd.repo, "imp_url", autospec=True)

    assert cmd.run() == 0

    m.assert_called_once_with("src",
                              out="out",
                              fname="file",
                              no_exec=False,
                              desc="description")
Пример #3
0
def test_params_diff_show_json(dvc, mocker, caplog, capsys):
    cli_args = parse_args(
        ["params", "diff", "HEAD~10", "HEAD~1", "--show-json"])
    cmd = cli_args.func(cli_args)
    mocker.patch("dvc.repo.params.diff.diff",
                 return_value={"params.yaml": {
                     "a": "b"
                 }})
    show_diff_mock = mocker.patch("dvc.compare.show_diff")

    with caplog.at_level(logging.INFO, logger="dvc"):
        assert cmd.run() == 0
        assert '{"params.yaml": {"a": "b"}}\n' in caplog.text

    show_diff_mock.assert_not_called()
    assert capsys.readouterr() == ("", "")
Пример #4
0
def test_plots_diff_open(tmp_dir, dvc, mocker, capsys, plots_data):
    mocked_open = mocker.patch("webbrowser.open", return_value=True)
    cli_args = parse_args(
        ["plots", "diff", "--targets", "plots.csv", "--open"]
    )
    cmd = cli_args.func(cli_args)
    mocker.patch("dvc.repo.plots.diff.diff", return_value=plots_data)

    index_path = tmp_dir / "dvc_plots" / "index.html"
    mocker.patch("dvc.command.plots.render", return_value=index_path)

    assert cmd.run() == 0
    mocked_open.assert_called_once_with(index_path)

    out, _ = capsys.readouterr()
    assert index_path.as_uri() in out
Пример #5
0
def test_checkout(tmp_dir, dvc, mocker):
    cli_args = parse_args(
        ["checkout", "foo.dvc", "bar.dvc", "--relink", "--with-deps"])
    assert cli_args.func == CmdCheckout

    cmd = cli_args.func(cli_args)
    m = mocker.patch("dvc.repo.Repo.checkout")

    assert cmd.run() == 0
    m.assert_called_once_with(
        targets=["foo.dvc", "bar.dvc"],
        force=False,
        recursive=False,
        relink=True,
        with_deps=True,
    )
Пример #6
0
def test_status_up_to_date(dvc, mocker, capsys, cloud_opts, expected_message):
    cli_args = parse_args(["status", *cloud_opts])
    assert cli_args.func == CmdDataStatus

    cmd = cli_args.func(cli_args)

    mocker.patch.dict(cmd.repo.config, {"core": {"remote": "default"}})
    mocker.patch.object(cmd.repo, "status", autospec=True, return_value={})
    mocker.patch.object(cmd.repo.stage,
                        "_collect_repo",
                        return_value=[object()],
                        autospec=True)

    assert cmd.run() == 0
    captured = capsys.readouterr()
    assert expected_message in captured.out
Пример #7
0
def test_plots_diff_open_WSL(tmp_dir, dvc, mocker, plots_data):
    mocked_open = mocker.patch("webbrowser.open", return_value=True)
    mocked_uname_result = mocker.MagicMock()
    mocked_uname_result.release = "Microsoft"
    mocker.patch("platform.uname", return_value=mocked_uname_result)

    cli_args = parse_args(
        ["plots", "diff", "--targets", "plots.csv", "--open"])
    cmd = cli_args.func(cli_args)
    mocker.patch("dvc.repo.plots.diff.diff", return_value=plots_data)

    index_path = tmp_dir / "dvc_plots" / "index.html"
    mocker.patch("dvc.render.utils.render", return_value=index_path)

    assert cmd.run() == 0
    mocked_open.assert_called_once_with(str(Path("dvc_plots") / "index.html"))
Пример #8
0
def test_plots_diff_open_failed(tmp_dir, dvc, mocker, capsys):
    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")

    out, err = capsys.readouterr()
    assert expected_url in out
    assert error_message in err
Пример #9
0
def main(argv=None):
    """Run dvc CLI command.

    Args:
        argv: optional list of arguments to parse. sys.argv is used by default.

    Returns:
        int: command's return code.
    """
    args = None
    cmd = None

    outerLogLevel = logger.level
    try:
        args = parse_args(argv)

        if args.quiet:
            logger.setLevel(logging.CRITICAL)

        elif args.verbose:
            logger.setLevel(logging.DEBUG)

        cmd = args.func(args)
        ret = cmd.run_cmd()
    except ConfigError:
        logger.exception("configuration error")
        ret = 251
    except KeyboardInterrupt:
        logger.exception("interrupted by the user")
        ret = 252
    except NotDvcRepoError:
        logger.exception("")
        ret = 253
    except DvcParserError:
        ret = 254
    except Exception:  # pylint: disable=broad-except
        logger.exception("unexpected error")
        ret = 255
    finally:
        logger.setLevel(outerLogLevel)
        # Python 2 fails to close these clean occasionally and users see
        # weird error messages, so we do it manually
        close_ssh_pools()

    Analytics().send_cmd(cmd, args, ret)

    return ret
Пример #10
0
def test_default(mocker, caplog):
    args = parse_args(["diff"])
    cmd = args.func(args)
    diff = {
        "added": [{"path": "file", "hash": "00000000"}],
        "deleted": [],
        "modified": [],
    }
    mocker.patch("dvc.repo.Repo.diff", return_value=diff)

    assert 0 == cmd.run()
    assert (
        "Added:\n"
        "    file\n"
        "\n"
        "files summary: 1 added, 0 deleted, 0 modified"
    ) in caplog.text
Пример #11
0
    def test(self):
        dep1 = "dep1"
        dep2 = "dep2"

        out1 = "out1"
        out2 = "out2"

        out_no_cache1 = "out_no_cache1"
        out_no_cache2 = "out_no_cache2"

        fname = "dvc.dvc"
        cmd = "cmd"
        arg1 = "arg1"
        arg2 = "arg2"

        args = parse_args(
            [
                "run",
                "-d",
                dep1,
                "--deps",
                dep2,
                "-o",
                out1,
                "--outs",
                out2,
                "-O",
                out_no_cache1,
                "--outs-no-cache",
                out_no_cache2,
                "-f",
                fname,
                "--file",
                fname,
                cmd,
                arg1,
                arg2,
            ]
        )

        self.assertIsInstance(args.func(args), CmdRun)
        self.assertEqual(args.deps, [dep1, dep2])
        self.assertEqual(args.outs, [out1, out2])
        self.assertEqual(args.outs_no_cache, [out_no_cache1, out_no_cache2])
        self.assertEqual(args.file, fname)
        self.assertEqual(args.command, [cmd, arg1, arg2])
Пример #12
0
def test_experiments_init_explicit(dvc, mocker):
    stage = mocker.Mock(outs=[])
    m = mocker.patch("dvc.repo.experiments.init.init",
                     return_value=(stage, [], []))
    cli_args = parse_args(["exp", "init", "--explicit", "cmd"])
    cmd = cli_args.func(cli_args)

    assert cmd.run() == 0
    m.assert_called_once_with(
        ANY(Repo),
        name="train",
        type="default",
        defaults={},
        overrides={"cmd": "cmd"},
        interactive=False,
        force=False,
    )
Пример #13
0
def test_plots_diff_vega(dvc, mocker, capsys):
    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

    out, _ = capsys.readouterr()
    assert "plothtml" in out
Пример #14
0
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),
    ]
Пример #15
0
def test_plots_diff_open_failed(tmp_dir, dvc, mocker, capsys, plots_data):
    mocked_open = mocker.patch("webbrowser.open", return_value=False)
    cli_args = parse_args(
        ["plots", "diff", "--targets", "plots.csv", "--open"])
    cmd = cli_args.func(cli_args)
    mocker.patch("dvc.repo.plots.diff.diff",
                 return_value={"datafile": plots_data})

    assert cmd.run() == 1
    expected_url = tmp_dir / "dvc_plots" / "index.html"
    mocked_open.assert_called_once_with(expected_url.as_uri())

    error_message = "Failed to open. Please try opening it manually."

    out, err = capsys.readouterr()
    assert expected_url.as_uri() in out
    assert error_message in err
Пример #16
0
def test_show_json(mocker, caplog):
    args = parse_args(["diff", "--show-json"])
    cmd = args.func(args)
    diff = {
        "added": [
            {"path": "file2", "hash": "22222222"},
            {"path": "file1", "hash": "11111111"},
        ],
        "deleted": [],
        "modified": [],
    }
    mocker.patch("dvc.repo.Repo.diff", return_value=diff)

    assert 0 == cmd.run()
    assert '"added": [{"path": "file1"}, {"path": "file2"}]' in caplog.text
    assert '"deleted": []' in caplog.text
    assert '"modified": []' in caplog.text
Пример #17
0
def test_experiments_run(dvc, mocker, args, resume):
    default_arguments = {
        "params": [],
        "queue": False,
        "run_all": False,
        "jobs": None,
        "checkpoint_resume": resume,
    }

    default_arguments.update(repro_arguments)

    cmd = CmdExperimentsRun(parse_args(args))
    mocker.patch.object(cmd.repo, "reproduce")
    mocker.patch.object(cmd.repo.experiments, "run")
    cmd.run()
    cmd.repo.experiments.run.assert_called_with(PIPELINE_FILE,
                                                **default_arguments)
Пример #18
0
def test_collect_and_send_report(mock_json, mock_daemon, tmp_global_dir):
    analytics.collect_and_send_report()
    report = mock_json.call_args[0][0]

    assert not report.get("cmd_class")
    assert not report.get("cmd_return_code")

    args = parse_args(["add", "foo"])
    return_code = 0

    analytics.collect_and_send_report(args, return_code)
    report = mock_json.call_args[0][0]

    assert report["cmd_class"] == "CmdAdd"
    assert report["cmd_return_code"] == return_code

    assert mock_daemon.call_count == 2
Пример #19
0
def test_list(tmp_dir, mocker, show_origin):
    from dvc.compare import TabularData
    from dvc.ui import ui

    tmp_dir.gen(DATA)
    cli_args = parse_args(["machine", "list"] + show_origin + ["foo"])
    assert cli_args.func == CmdMachineList
    cmd = cli_args.func(cli_args)
    if show_origin:
        m = mocker.patch.object(ui, "write", autospec=True)
    else:
        m = mocker.patch.object(TabularData, "render", autospec=True)
    assert cmd.run() == 0
    if show_origin:
        m.assert_called_once_with(f".dvc{os.sep}config	cloud=aws")
    else:
        m.assert_called_once()
Пример #20
0
def test_metrics_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",
        "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",
        },
    )
Пример #21
0
def test_params_diff_from_cli(dvc, mocker):
    cli_args = parse_args(["params", "diff"])
    assert cli_args.func == CmdParamsDiff

    cmd = cli_args.func(cli_args)
    m = mocker.patch("dvc.repo.params.diff.diff", return_value={})

    assert cmd.run() == 0

    m.assert_called_once_with(
        cmd.repo,
        a_rev=None,
        b_rev=None,
        all=False,
        targets=None,
        deps=False,
    )
Пример #22
0
def test_json(mocker, caplog):
    args = parse_args(["diff", "--show-json"])
    cmd = args.func(args)
    diff = {
        "added": [{
            "path": "file",
            "checksum": "00000000"
        }],
        "deleted": [],
        "modified": [],
    }
    mocker.patch("dvc.repo.Repo.diff", return_value=diff)

    assert 0 == cmd.run()
    assert '"added": [{"path": "file"}]' in caplog.text
    assert '"deleted": []' in caplog.text
    assert '"modified": []' in caplog.text
Пример #23
0
def test_experiments_init_config(dvc, mocker):
    with dvc.config.edit() as conf:
        conf["exp"] = {"code": "new_src", "models": "new_models"}

    m = mocker.patch("dvc.repo.experiments.init.init")
    cli_args = parse_args(["exp", "init", "cmd"])
    cmd = cli_args.func(cli_args)

    assert cmd.run() == 0
    assert m.call_args[1]["defaults"] == {
        "code": "new_src",
        "models": "new_models",
        "data": "data",
        "metrics": "metrics.json",
        "params": "params.yaml",
        "plots": "plots",
        "live": "dvclive",
    }
Пример #24
0
Файл: main.py Проект: ybayle/dvc
def main(argv=None):
    Logger.init()

    args = parse_args(argv)

    try:
        cmd = args.func(args)
    except Exception as ex:
        Logger.error('Initialization error', ex)
        return 255

    try:
        ret = cmd.run_cmd()
    except Exception as ex:
        Logger.error('Unexpected error', ex)
        return 254

    return ret
Пример #25
0
def test_show_json_and_hash(mocker, caplog):
    args = parse_args(["diff", "--show-json", "--show-hash"])
    cmd = args.func(args)

    diff = {
        "added": [
            # py35: maintain a consistent key order for tests purposes
            collections.OrderedDict([("path", "file"), ("hash", "00000000")])
        ],
        "deleted": [],
        "modified": [],
    }
    mocker.patch("dvc.repo.Repo.diff", return_value=diff)

    assert 0 == cmd.run()
    assert '"added": [{"path": "file", "hash": "00000000"}]' in caplog.text
    assert '"deleted": []' in caplog.text
    assert '"modified": []' in caplog.text
Пример #26
0
def test_update(dvc, mocker):
    cli_args = parse_args(
        ["update", "target1", "target2", "--rev", "REV", "--recursive"]
    )
    assert cli_args.func == CmdUpdate
    cmd = cli_args.func(cli_args)
    m = mocker.patch("dvc.repo.Repo.update")

    assert cmd.run() == 0

    m.assert_called_once_with(
        targets=["target1", "target2"],
        rev="REV",
        recursive=True,
        to_remote=False,
        remote=None,
        jobs=None,
    )
Пример #27
0
def test_plots_show_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
Пример #28
0
def test_experiments_run(dvc, scm, mocker):
    default_arguments = {
        "params": [],
        "name": None,
        "queue": False,
        "run_all": False,
        "jobs": 1,
        "tmp_dir": False,
        "checkpoint_resume": None,
        "reset": False,
    }
    default_arguments.update(repro_arguments)

    cmd = CmdExperimentsRun(parse_args(["exp", "run"]))
    mocker.patch.object(cmd.repo, "reproduce")
    mocker.patch.object(cmd.repo.experiments, "run")
    cmd.run()
    cmd.repo.experiments.run.assert_called_with(**default_arguments)
Пример #29
0
def test_metrics_diff(dvc, mocker):
    cli_args = parse_args([
        "plots",
        "diff",
        "--out",
        "result.extension",
        "-t",
        "template",
        "--targets",
        "datafile",
        "--show-json",
        "-x",
        "x_field",
        "-y",
        "y_field",
        "--title",
        "my_title",
        "--xlab",
        "x_title",
        "--ylab",
        "y_title",
        "HEAD",
        "tag1",
        "tag2",
    ])
    assert cli_args.func == CmdPlotsDiff

    cmd = cli_args.func(cli_args)
    m = mocker.patch("dvc.repo.plots.diff.diff", return_value={})

    assert cmd.run() == 0

    m.assert_called_once_with(
        cmd.repo,
        targets=["datafile"],
        template="template",
        revs=["HEAD", "tag1", "tag2"],
        x_field="x_field",
        y_field="y_field",
        csv_header=True,
        title="my_title",
        x_title="x_title",
        y_title="y_title",
    )
Пример #30
0
def test_experiments_show(dvc, mocker):
    cli_args = parse_args([
        "experiments",
        "show",
        "--all-tags",
        "--all-branches",
        "--all-commits",
    ])
    assert cli_args.func == CmdExperimentsShow

    cmd = cli_args.func(cli_args)
    m = mocker.patch("dvc.repo.experiments.show.show", return_value={})

    assert cmd.run() == 0

    m.assert_called_once_with(cmd.repo,
                              all_tags=True,
                              all_branches=True,
                              all_commits=True)