Files
eco/tests/test_runtable_status_values.py
T

48 lines
1.6 KiB
Python

"""The run table's `d=` argument: which shape it accepts, and why.
`Run_Table_DataFrame._get_adjustable_values` looks names up as
``"bernina." + name`` in a flat mapping. `Daq` passed it the whole
`get_status()` result instead, so nothing ever matched and it silently fell
back to reading every adjustable over Channel Access - a full CA fan-out at
every scan start, while apparently being handed the values.
"""
import pytest
runtable = pytest.importorskip("eco.utilities.runtable")
def test_flat_mapping_is_passed_through():
d = {"bernina.att.transmission": 0.5}
assert runtable.Run_Table_DataFrame._status_values(d) == d
def test_get_status_shape_is_unwrapped():
"""The shape Daq was passing."""
d = {
"status": {"bernina.att.transmission": 0.5},
"status_channels": {"bernina.att.transmission": "PV:X"},
"status_times": {},
"selections": {},
}
assert runtable.Run_Table_DataFrame._status_values(d) == {
"bernina.att.transmission": 0.5
}
def test_an_older_settings_block_is_merged_in():
d = {"status": {"a": 1}, "settings": {"b": 2}}
assert runtable.Run_Table_DataFrame._status_values(d) == {"a": 1, "b": 2}
def test_empty_and_none_are_empty():
assert runtable.Run_Table_DataFrame._status_values({}) == {}
assert runtable.Run_Table_DataFrame._status_values(None) == {}
def test_a_status_key_that_is_not_a_mapping_is_left_alone():
"""A channel literally called "status" must not be mistaken for the
wrapper."""
d = {"status": 3, "bernina.x": 1}
assert runtable.Run_Table_DataFrame._status_values(d) == d