diff --git a/dvc/commands/plots.py b/dvc/commands/plots.py index 06c7f617c..fb6bbd07c 100644 --- a/dvc/commands/plots.py +++ b/dvc/commands/plots.py @@ -78,7 +78,7 @@ class CmdPlots(CmdBase): if self.args.show_vega: renderer = first(filter(lambda r: r.TYPE == "vega", renderers)) if renderer: - ui.write_json(json.loads(renderer.partial_html())) + ui.write_json(json.loads(renderer.get_filled_template())) return 0 if self.args.json: _show_json(renderers, self.args.split) diff --git a/dvc/render/__init__.py b/dvc/render/__init__.py index 9cf67b884..d9eded6f3 100644 --- a/dvc/render/__init__.py +++ b/dvc/render/__init__.py @@ -1,5 +1,6 @@ INDEX_FIELD = "step" REVISION_FIELD = "rev" +FILENAME_FIELD = "filename" REVISIONS_KEY = "revisions" TYPE_KEY = "type" SRC_FIELD = "src" diff --git a/dvc/render/convert.py b/dvc/render/convert.py index bfb93644a..de78728c6 100644 --- a/dvc/render/convert.py +++ b/dvc/render/convert.py @@ -7,7 +7,7 @@ from dvc.render.image_converter import ImageConverter from dvc.render.vega_converter import VegaConverter -def get_converter( +def _get_converter( renderer_class, props ) -> Union[VegaConverter, ImageConverter]: from dvc_render import ImageRenderer, VegaRenderer @@ -21,13 +21,13 @@ def get_converter( def to_datapoints(renderer_class, data: Dict, props: Dict): - converter = get_converter(renderer_class, props) + converter = _get_converter(renderer_class, props) datapoints: List[Dict] = [] for revision, rev_data in data.items(): for filename, file_data in rev_data.get("data", {}).items(): if "data" in file_data: processed, final_props = converter.convert( - revision, filename, file_data.get("data") + file_data.get("data"), revision, filename ) datapoints.extend(processed) return datapoints, final_props diff --git a/dvc/render/image_converter.py b/dvc/render/image_converter.py index 39c8980ac..1c4331b33 100644 --- a/dvc/render/image_converter.py +++ b/dvc/render/image_converter.py @@ -2,7 +2,7 @@ import base64 import os from typing import TYPE_CHECKING, Dict, List, Optional, Tuple -from dvc.render import REVISION_FIELD, SRC_FIELD +from dvc.render import FILENAME_FIELD, REVISION_FIELD, SRC_FIELD if TYPE_CHECKING: from dvc.types import StrPath @@ -35,7 +35,7 @@ class ImageConverter: return f"data:image;base64,{base64_str}" def convert( - self, revision, filename, data: bytes + self, data: bytes, revision, filename ) -> Tuple[List[Dict], Dict]: """ Convert the DVC Plots content to DVC Render datapoints. @@ -52,7 +52,7 @@ class ImageConverter: src = self._encode_image(data) datapoint = { REVISION_FIELD: revision, - "filename": filename, + FILENAME_FIELD: filename, SRC_FIELD: src, } return [datapoint], self.plot_properties diff --git a/dvc/render/vega_converter.py b/dvc/render/vega_converter.py index 643d7cfb0..0759e34cd 100644 --- a/dvc/render/vega_converter.py +++ b/dvc/render/vega_converter.py @@ -5,7 +5,7 @@ from typing import Dict, List, Optional, Set, Union from funcy import first, project from dvc.exceptions import DvcException -from dvc.render import INDEX_FIELD, REVISION_FIELD +from dvc.render import FILENAME_FIELD, INDEX_FIELD, REVISION_FIELD class FieldsNotFoundError(DvcException): @@ -156,7 +156,12 @@ class VegaConverter: else: self.inferred_props["y"] = inferred_y - def convert(self, revision: str, filename: str, data: Dict): + def convert( + self, + data: Dict, + revision: Optional[str] = None, + filename: Optional[str] = None, + ): """ Convert the data. Fill necessary fields ('x', 'y') and return both generated datapoints and updated properties. @@ -164,12 +169,15 @@ class VegaConverter: processed = deepcopy(data) for _, step in self.steps: - processed = step(processed) + processed = step(processed) # type: ignore - self._infer_y(processed) + self._infer_y(processed) # type: ignore - for datapoint in processed: - datapoint[REVISION_FIELD] = revision - datapoint["filename"] = filename + if revision: + for datapoint in processed: + datapoint[REVISION_FIELD] = revision + if filename: + for datapoint in processed: + datapoint[FILENAME_FIELD] = filename return processed, {**self.props, **self.inferred_props} diff --git a/setup.cfg b/setup.cfg index 634793132..69339ce29 100644 --- a/setup.cfg +++ b/setup.cfg @@ -76,7 +76,7 @@ install_requires = diskcache>=5.2.1 jaraco.windows>=5.7.0; python_version < '3.8' and sys_platform == 'win32' scmrepo==0.0.13 - dvc_render==0.0.2 + dvc_render==0.0.3 [options.extras_require] all = diff --git a/tests/unit/command/test_plots.py b/tests/unit/command/test_plots.py index d2b625d97..b740b033e 100644 --- a/tests/unit/command/test_plots.py +++ b/tests/unit/command/test_plots.py @@ -127,7 +127,7 @@ def test_plots_diff_vega(dvc, mocker, capsys, plots_data): cmd = cli_args.func(cli_args) mocker.patch("dvc.repo.plots.diff.diff", return_value=plots_data) mocker.patch( - "dvc_render.VegaRenderer.partial_html", + "dvc_render.VegaRenderer.get_filled_template", return_value=json.dumps({"this": "is vega json"}), ) render_mock = mocker.patch("dvc_render.render_html") diff --git a/tests/unit/render/test_image_converter.py b/tests/unit/render/test_image_converter.py index 08cc16e14..b9ed1513a 100644 --- a/tests/unit/render/test_image_converter.py +++ b/tests/unit/render/test_image_converter.py @@ -6,7 +6,7 @@ def test_image_converter_no_out(): data = b"content" converter = ImageConverter() - datapoints, _ = converter.convert("r", "image.png", data) + datapoints, _ = converter.convert(data, "r", "image.png") assert datapoints[0] == { REVISION_FIELD: "r", @@ -19,7 +19,7 @@ def test_image_converter_with_out(tmp_dir): data = b"content" converter = ImageConverter({"out": tmp_dir / "foo"}) - datapoints, _ = converter.convert("r", "image.png", data) + datapoints, _ = converter.convert(data, "r", "image.png") assert datapoints[0] == { REVISION_FIELD: "r", diff --git a/tests/unit/render/test_vega_converter.py b/tests/unit/render/test_vega_converter.py index 2a6984c2e..d1b910195 100644 --- a/tests/unit/render/test_vega_converter.py +++ b/tests/unit/render/test_vega_converter.py @@ -132,7 +132,7 @@ def test_convert( ): converter = VegaConverter(properties) datapoints, resolved_properties = converter.convert( - revision="r", filename="f", data=input_data + data=input_data, revision="r", filename="f" ) assert datapoints == expected_datapoints @@ -144,9 +144,9 @@ def test_convert_skip_step(): converter.skip_step("append_index") datapoints, resolved_properties = converter.convert( + data={"a": "b", "metric": [{"v": 1}, {"v": 2}]}, revision="r", filename="f", - data={"a": "b", "metric": [{"v": 1}, {"v": 2}]}, ) assert datapoints == [