mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
render: vega_converter: make rev and filename optional.
Add `FILENAME_FIELD`.
This commit is contained in:
@@ -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,5 +1,6 @@
|
||||
INDEX_FIELD = "step"
|
||||
REVISION_FIELD = "rev"
|
||||
FILENAME_FIELD = "filename"
|
||||
REVISIONS_KEY = "revisions"
|
||||
TYPE_KEY = "type"
|
||||
SRC_FIELD = "src"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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 == [
|
||||
|
||||
Reference in New Issue
Block a user