Files
dvc/tests/unit/render/test_convert.py
T

220 lines
5.8 KiB
Python

from dvc.render import (
INDEX_FIELD,
REVISION_FIELD,
REVISIONS_KEY,
SRC_FIELD,
TYPE_KEY,
)
from dvc.render.convert import to_datapoints, to_json
def test_to_datapoints_single_revision(mocker):
renderer = mocker.MagicMock()
renderer.TYPE = "vega"
input_data = {
"revision": {
"data": {
"filename": {
"data": {
"metric": [
{"v": 1, "v2": 0.1, "v3": 0.01, "v4": 0.001},
{"v": 2, "v2": 0.2, "v3": 0.02, "v4": 0.002},
]
}
}
}
}
}
props = {"fields": {"v"}, "x": "v2", "y": "v3"}
datapoints, resolved_properties = to_datapoints(
renderer, input_data, props
)
assert datapoints == [
{
"v": 1,
"v2": 0.1,
"v3": 0.01,
"rev": "revision",
"filename": "filename",
},
{
"v": 2,
"v2": 0.2,
"v3": 0.02,
"rev": "revision",
"filename": "filename",
},
]
assert resolved_properties == {
"fields": {"v", "v2", "v3"},
"x": "v2",
"y": "v3",
}
def test_to_datapoints_revision_with_error(mocker):
renderer = mocker.MagicMock()
renderer.TYPE = "vega"
data = {
"v2": {
"data": {"file.json": {"data": [{"y": 2}, {"y": 3}], "props": {}}}
},
"workspace": {
"data": {"file.json": {"error": FileNotFoundError(), "props": {}}}
},
}
datapoints, final_props = to_datapoints(renderer, data, {})
assert datapoints == [
{
"y": 2,
INDEX_FIELD: 0,
REVISION_FIELD: "v2",
"filename": "file.json",
},
{
"y": 3,
INDEX_FIELD: 1,
REVISION_FIELD: "v2",
"filename": "file.json",
},
]
assert final_props == {"x": INDEX_FIELD, "y": "y"}
def test_to_datapoints_multiple_revisions(mocker):
renderer = mocker.MagicMock()
renderer.TYPE = "vega"
metric_1 = [{"y": 2}, {"y": 3}]
metric_2 = [{"y": 3}, {"y": 5}]
metric_3 = [{"y": 5}, {"y": 6}]
data = {
"HEAD": {
"data": {
"file.json": {"data": metric_3, "props": {"fields": {"y"}}}
}
},
"v2": {
"data": {
"file.json": {"data": metric_2, "props": {"fields": {"y"}}}
}
},
"v1": {
"data": {
"file.json": {"data": metric_1, "props": {"fields": {"y"}}}
}
},
}
props = {"fields": {"y"}}
datapoints, final_props = to_datapoints(renderer, data, props)
assert datapoints == [
{
"y": 5,
INDEX_FIELD: 0,
REVISION_FIELD: "HEAD",
"filename": "file.json",
},
{
"y": 6,
INDEX_FIELD: 1,
REVISION_FIELD: "HEAD",
"filename": "file.json",
},
{
"y": 3,
INDEX_FIELD: 0,
REVISION_FIELD: "v2",
"filename": "file.json",
},
{
"y": 5,
INDEX_FIELD: 1,
REVISION_FIELD: "v2",
"filename": "file.json",
},
{
"y": 2,
INDEX_FIELD: 0,
REVISION_FIELD: "v1",
"filename": "file.json",
},
{
"y": 3,
INDEX_FIELD: 1,
REVISION_FIELD: "v1",
"filename": "file.json",
},
]
assert final_props == {"x": INDEX_FIELD, "y": "y", "fields": {"y", "step"}}
def test_to_json_vega(mocker):
vega_renderer = mocker.MagicMock()
vega_renderer.TYPE = "vega"
vega_renderer.get_filled_template.return_value = '{"this": "is vega"}'
vega_renderer.datapoints = [
{"x": 1, "y": 2, REVISION_FIELD: "foo", "filename": "foo.json"},
{"x": 2, "y": 1, REVISION_FIELD: "bar", "filename": "foo.json"},
]
result = to_json(vega_renderer)
assert result[0] == {
TYPE_KEY: vega_renderer.TYPE,
REVISIONS_KEY: ["bar", "foo"],
"content": {"this": "is vega"},
"datapoints": {
"foo": [
{"x": 1, "y": 2, "filename": "foo.json"},
],
"bar": [
{"x": 2, "y": 1, "filename": "foo.json"},
],
},
}
vega_renderer.get_filled_template.assert_called()
def test_to_json_vega_split(mocker):
vega_renderer = mocker.MagicMock()
vega_renderer.TYPE = "vega"
vega_renderer.get_filled_template.return_value = (
'{"this": "is split vega"}'
)
vega_renderer.datapoints = [
{"x": 1, "y": 2, REVISION_FIELD: "foo", "filename": "foo.json"},
{"x": 2, "y": 1, REVISION_FIELD: "bar", "filename": "foo.json"},
]
result = to_json(vega_renderer, split=True)
assert result[0] == {
TYPE_KEY: vega_renderer.TYPE,
REVISIONS_KEY: ["bar", "foo"],
"content": {"this": "is split vega"},
"datapoints": {
"foo": [{"x": 1, "y": 2, "filename": "foo.json"}],
"bar": [{"x": 2, "y": 1, "filename": "foo.json"}],
},
}
vega_renderer.get_filled_template.assert_called_with(skip_anchors=["data"])
def test_to_json_image(mocker):
image_renderer = mocker.MagicMock()
image_renderer.TYPE = "image"
image_renderer.datapoints = [
{SRC_FIELD: "contentfoo", REVISION_FIELD: "foo"},
{SRC_FIELD: "contentbar", REVISION_FIELD: "bar"},
]
result = to_json(image_renderer)
assert result[0] == {
"url": image_renderer.datapoints[0].get(SRC_FIELD),
REVISIONS_KEY: [image_renderer.datapoints[0].get(REVISION_FIELD)],
TYPE_KEY: image_renderer.TYPE,
}