diff --git a/setup.cfg b/setup.cfg index 6a6b0af..2b32635 100644 --- a/setup.cfg +++ b/setup.cfg @@ -42,7 +42,7 @@ tests = %(markdown)s funcy>=1.17 pytest==7.2.0 - pytest-sugar==0.9.5 + pytest-sugar>=0.9.6,<1.0 pytest-cov==3.0.0 pytest-mock==3.8.2 pylint==2.15.0 diff --git a/src/dvc_render/vega_templates.py b/src/dvc_render/vega_templates.py index 7e2f0dd..1ad556a 100644 --- a/src/dvc_render/vega_templates.py +++ b/src/dvc_render/vega_templates.py @@ -64,7 +64,8 @@ def list_replace_value(l: list, name: str, value: str) -> list: # noqa: E741 def dict_find_value(d: dict, value: str) -> bool: for v in d.values(): if isinstance(v, dict): - return dict_find_value(v, value) + if dict_find_value(v, value): + return True if isinstance(v, str): if v == value: return True diff --git a/tests/test_vega.py b/tests/test_vega.py index 69e111e..1dbcb8b 100644 --- a/tests/test_vega.py +++ b/tests/test_vega.py @@ -1,3 +1,5 @@ +import json + import pytest from dvc_render.vega import BadTemplateError, VegaRenderer @@ -103,11 +105,29 @@ def test_confusion(): assert plot_content["spec"]["encoding"]["y"]["field"] == "actual" -def test_bad_template(): +def test_bad_template_on_init(): with pytest.raises(BadTemplateError): Template("name", "content") +def test_bad_template_on_missing_data(tmp_dir): + template_content = {"data": {"values": "BAD_ANCHOR"}} + tmp_dir.gen("bar.json", json.dumps(template_content)) + datapoints = [{"val": 2}, {"val": 3}] + renderer = VegaRenderer(datapoints, "foo", template="bar.json") + + with pytest.raises(BadTemplateError): + renderer.get_filled_template() + + template_content = { + "mark": {"type": "bar"}, + "data": {"values": Template.anchor("data")}, + } + tmp_dir.gen("bar.json", json.dumps(template_content)) + renderer = VegaRenderer(datapoints, "foo", template="bar.json") + assert renderer.get_filled_template() + + def test_raise_on_wrong_field(): datapoints = [{"val": 2}, {"val": 3}] props = {"x": "no_val"}