diff --git a/dvc/exceptions.py b/dvc/exceptions.py index 6ec42da907..32545c5f75 100644 --- a/dvc/exceptions.py +++ b/dvc/exceptions.py @@ -178,6 +178,14 @@ def __init__(self): ) +class NoPlotsError(DvcException): + def __init__(self): + super().__init__( + "no plots in this repository. Use `--plots/--plots-no-cache` " + "options for `dvc run` to mark stage outputs as plots." + ) + + class YAMLFileCorruptedError(DvcException): def __init__(self, path): path = relpath(path) diff --git a/dvc/repo/plots/show.py b/dvc/repo/plots/show.py index 3015fd92f7..49c9f4f435 100644 --- a/dvc/repo/plots/show.py +++ b/dvc/repo/plots/show.py @@ -4,7 +4,7 @@ from funcy import first, last, project -from dvc.exceptions import DvcException +from dvc.exceptions import DvcException, NoPlotsError from dvc.repo import locked from dvc.schema import PLOT_PROPS @@ -108,6 +108,9 @@ def _show(repo, datafile=None, revs=None, props=None): if revs is None: revs = ["workspace"] + if props is None: + props = {} + if not datafile and not props.get("template"): raise NoDataOrTemplateProvided() @@ -201,7 +204,11 @@ def show(repo, targets=None, revs=None, props=None) -> dict: if targets: raise NoMetricInHistoryError(", ".join(targets)) - datafile, plot = _show(repo, datafile=None, revs=revs, props=props) + try: + datafile, plot = _show(repo, datafile=None, revs=revs, props=props) + except NoDataOrTemplateProvided: + raise NoPlotsError() + return {datafile: plot} return { diff --git a/tests/func/plots/test_plots.py b/tests/func/plots/test_plots.py index 0eae504465..6916a18a0a 100644 --- a/tests/func/plots/test_plots.py +++ b/tests/func/plots/test_plots.py @@ -14,7 +14,6 @@ PlotData, PlotMetricTypeError, ) -from dvc.repo.plots.show import NoDataOrTemplateProvided from dvc.repo.plots.template import ( NoDataForTemplateError, NoFieldInDataError, @@ -457,8 +456,10 @@ def test_plot_override_specified_data_source( assert plot_content["encoding"]["y"]["field"] == "b" -def test_should_raise_on_no_template_and_datafile(tmp_dir, dvc): - with pytest.raises(NoDataOrTemplateProvided): +def test_no_plots(tmp_dir, dvc): + from dvc.exceptions import NoPlotsError + + with pytest.raises(NoPlotsError): dvc.plots.show()