render: vega_converter: make rev and filename optional.

Add `FILENAME_FIELD`.
This commit is contained in:
David de la Iglesia Castro
2022-03-28 19:34:05 +02:00
parent ddd6c97f71
commit ead7724824
9 changed files with 29 additions and 20 deletions
+1 -1
View File
@@ -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)
+1
View File
@@ -1,5 +1,6 @@
INDEX_FIELD = "step"
REVISION_FIELD = "rev"
FILENAME_FIELD = "filename"
REVISIONS_KEY = "revisions"
TYPE_KEY = "type"
SRC_FIELD = "src"
+3 -3
View File
@@ -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
+3 -3
View File
@@ -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
+15 -7
View File
@@ -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}
+1 -1
View File
@@ -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 =
+1 -1
View File
@@ -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")
+2 -2
View File
@@ -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",
+2 -2
View File
@@ -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 == [