Spaces:
Running
Running
import pytest | |
import altair as alt | |
from ..mimebundle import spec_to_mimebundle | |
def require_altair_saver(): | |
try: | |
import altair_saver # noqa: F401 | |
except ImportError: | |
pytest.skip("altair_saver not importable; cannot run saver tests") | |
def vegalite_spec(): | |
return { | |
"$schema": "https://vega.github.io/schema/vega-lite/v4.json", | |
"description": "A simple bar chart with embedded data.", | |
"data": { | |
"values": [ | |
{"a": "A", "b": 28}, | |
{"a": "B", "b": 55}, | |
{"a": "C", "b": 43}, | |
{"a": "D", "b": 91}, | |
{"a": "E", "b": 81}, | |
{"a": "F", "b": 53}, | |
{"a": "G", "b": 19}, | |
{"a": "H", "b": 87}, | |
{"a": "I", "b": 52}, | |
] | |
}, | |
"mark": "bar", | |
"encoding": { | |
"x": {"field": "a", "type": "ordinal"}, | |
"y": {"field": "b", "type": "quantitative"}, | |
}, | |
} | |
def vega_spec(): | |
return { | |
"$schema": "https://vega.github.io/schema/vega/v5.json", | |
"axes": [ | |
{ | |
"aria": False, | |
"domain": False, | |
"grid": True, | |
"gridScale": "x", | |
"labels": False, | |
"maxExtent": 0, | |
"minExtent": 0, | |
"orient": "left", | |
"scale": "y", | |
"tickCount": {"signal": "ceil(height/40)"}, | |
"ticks": False, | |
"zindex": 0, | |
}, | |
{ | |
"grid": False, | |
"labelAlign": "right", | |
"labelAngle": 270, | |
"labelBaseline": "middle", | |
"orient": "bottom", | |
"scale": "x", | |
"title": "a", | |
"zindex": 0, | |
}, | |
{ | |
"grid": False, | |
"labelOverlap": True, | |
"orient": "left", | |
"scale": "y", | |
"tickCount": {"signal": "ceil(height/40)"}, | |
"title": "b", | |
"zindex": 0, | |
}, | |
], | |
"background": "white", | |
"data": [ | |
{ | |
"name": "source_0", | |
"values": [ | |
{"a": "A", "b": 28}, | |
{"a": "B", "b": 55}, | |
{"a": "C", "b": 43}, | |
{"a": "D", "b": 91}, | |
{"a": "E", "b": 81}, | |
{"a": "F", "b": 53}, | |
{"a": "G", "b": 19}, | |
{"a": "H", "b": 87}, | |
{"a": "I", "b": 52}, | |
], | |
}, | |
{ | |
"name": "data_0", | |
"source": "source_0", | |
"transform": [ | |
{ | |
"expr": 'isValid(datum["b"]) && isFinite(+datum["b"])', | |
"type": "filter", | |
} | |
], | |
}, | |
], | |
"description": "A simple bar chart with embedded data.", | |
"height": 200, | |
"marks": [ | |
{ | |
"encode": { | |
"update": { | |
"ariaRoleDescription": {"value": "bar"}, | |
"description": { | |
"signal": '"a: " + (isValid(datum["a"]) ? datum["a"] : ""+datum["a"]) + "; b: " + (format(datum["b"], ""))' | |
}, | |
"fill": {"value": "#4c78a8"}, | |
"width": {"band": 1, "scale": "x"}, | |
"x": {"field": "a", "scale": "x"}, | |
"y": {"field": "b", "scale": "y"}, | |
"y2": {"scale": "y", "value": 0}, | |
} | |
}, | |
"from": {"data": "data_0"}, | |
"name": "marks", | |
"style": ["bar"], | |
"type": "rect", | |
} | |
], | |
"padding": 5, | |
"scales": [ | |
{ | |
"domain": {"data": "data_0", "field": "a", "sort": True}, | |
"name": "x", | |
"paddingInner": 0.1, | |
"paddingOuter": 0.05, | |
"range": {"step": {"signal": "x_step"}}, | |
"type": "band", | |
}, | |
{ | |
"domain": {"data": "data_0", "field": "b"}, | |
"name": "y", | |
"nice": True, | |
"range": [{"signal": "height"}, 0], | |
"type": "linear", | |
"zero": True, | |
}, | |
], | |
"signals": [ | |
{"name": "x_step", "value": 20}, | |
{ | |
"name": "width", | |
"update": "bandspace(domain('x').length, 0.1, 0.05) * x_step", | |
}, | |
], | |
"style": "cell", | |
} | |
def test_vegalite_to_vega_mimebundle(require_altair_saver, vegalite_spec, vega_spec): | |
# temporay fix for https://github.com/vega/vega-lite/issues/7776 | |
def delete_none(axes): | |
for axis in axes: | |
for key, value in list(axis.items()): | |
if value is None: | |
del axis[key] | |
return axes | |
bundle = spec_to_mimebundle( | |
spec=vegalite_spec, | |
format="vega", | |
mode="vega-lite", | |
vega_version=alt.VEGA_VERSION, | |
vegalite_version=alt.VEGALITE_VERSION, | |
vegaembed_version=alt.VEGAEMBED_VERSION, | |
) | |
bundle["application/vnd.vega.v5+json"]["axes"] = delete_none( | |
bundle["application/vnd.vega.v5+json"]["axes"] | |
) | |
assert bundle == {"application/vnd.vega.v5+json": vega_spec} | |
def test_spec_to_vegalite_mimebundle(vegalite_spec): | |
bundle = spec_to_mimebundle( | |
spec=vegalite_spec, | |
mode="vega-lite", | |
format="vega-lite", | |
vegalite_version=alt.VEGALITE_VERSION, | |
) | |
assert bundle == {"application/vnd.vegalite.v4+json": vegalite_spec} | |
def test_spec_to_vega_mimebundle(vega_spec): | |
bundle = spec_to_mimebundle( | |
spec=vega_spec, mode="vega", format="vega", vega_version=alt.VEGA_VERSION | |
) | |
assert bundle == {"application/vnd.vega.v5+json": vega_spec} | |
def test_spec_to_json_mimebundle(): | |
bundle = spec_to_mimebundle( | |
spec=vegalite_spec, | |
mode="vega-lite", | |
format="json", | |
) | |
assert bundle == {"application/json": vegalite_spec} | |