コード例 #1
0
def test_GIVEN_stream_with_one_pv_with_two_topics_WHEN_generating_forwarder_command_THEN_contains_one_converter_with_list(
    file, ):
    pv_name = "testPV"

    topic1 = "topic1"
    topic2 = "topic2"

    writer_module = "f142"

    group = file.create_group("test_group")
    group.attrs["NX_class"] = "NCstream"
    group.create_dataset("writer_module", data=writer_module)
    group.create_dataset("source", data=pv_name)
    group.create_dataset("topic", data=topic1)

    group2 = file.create_group("test_group2")
    group2.attrs["NX_class"] = "NCstream"
    group2.create_dataset("writer_module", data=writer_module)
    group2.create_dataset("topic", data=topic2)
    group2.create_dataset("source", data=pv_name)

    dummy_file = io.StringIO()

    generate_forwarder_command(dummy_file, file, "ca", "")

    streams_ = literal_eval(dummy_file.getvalue())["streams"]

    assert len(streams_) == 1

    assert isinstance(streams_[0]["converter"], list)
    assert streams_[0]["channel"] == pv_name
    assert streams_[0]["converter"][0]["topic"] == topic1
    assert streams_[0]["converter"][1]["topic"] == topic2
コード例 #2
0
def test_GIVEN_stream_with_f142_command_and_non_forwarder_modules_THEN_only_f142_is_contained(
    file, ):

    group = file.create_group("test_group")
    group.attrs["NX_class"] = "NCstream"

    group.create_dataset("writer_module", data="ev42")
    group.create_dataset("source", data="source1")
    group.create_dataset("topic", data="topic1")

    group2 = file.create_group("test_group2")
    group2.attrs["NX_class"] = "NCstream"

    pv_name = "pv1"
    topic = "localhost:9092/someTopic"
    writer_module = "f142"
    group2.create_dataset("writer_module", data=writer_module)
    group2.create_dataset("topic", data=topic)
    group2.create_dataset("source", data=pv_name)

    dummy_file = io.StringIO()

    generate_forwarder_command(dummy_file, file, "ca", "")

    streams_ = literal_eval(dummy_file.getvalue())["streams"]
    assert len(streams_) == 1
    assert streams_[0]["channel"] == pv_name
    assert streams_[0]["converter"]["topic"] == topic
    assert streams_[0]["converter"]["schema"] == writer_module
コード例 #3
0
def test_dependee_of_contains_both_components_when_generating_dependee_of_chain_with_mixture_of_absolute_and_relative_paths(
        file,  # noqa: F811
):
    entry_group = file.create_group("entry")
    entry_group.attrs["NX_class"] = "NXentry"
    instrument_group = entry_group.create_group("instrument")
    instrument_group.attrs["NX_class"] = "NXinstrument"

    component_a = instrument_group.create_group("a")
    component_a.attrs["NX_class"] = "NXaperture"
    transforms_group = component_a.create_group("Transforms1")
    transform_1 = transforms_group.create_dataset("transform1", data=1.0)
    # Relative path to transform
    component_a.create_dataset("depends_on", data="Transforms1/transform1")

    component_b = instrument_group.create_group("b")
    component_b.attrs["NX_class"] = "NXaperture"
    # Absolute path to transform
    component_b.create_dataset(
        "depends_on", data="/entry/instrument/a/Transforms1/transform1")

    nexus_wrapper = NexusWrapper("test_dependent_transforms_1")
    nexus_wrapper.load_file(entry_group, file)
    Instrument(nexus_wrapper, NX_CLASS_DEFINITIONS)
    transform_1_loaded = Transformation(nexus_wrapper, transform_1)

    # Check both relative and absolute are in dependee_of list
    assert component_a.name in transform_1_loaded.dataset.attrs[
        "NCdependee_of"]
    assert component_b.name in transform_1_loaded.dataset.attrs[
        "NCdependee_of"]
コード例 #4
0
def test_GIVEN_stream_in_group_children_WHEN_handling_group_THEN_stream_is_appended_to_children(
    file, ):
    group_name = "test_group"
    group = file.create_group(group_name)
    group.attrs["NX_class"] = "NCstream"

    group_contents = {
        "writer_module": "f142",
        "topic": "topic1",
        "source": "SIMPLE:DOUBLE",
        "type": "double",
        "value_units": "cubits",
        "array_size": 32,
    }

    for name, value in group_contents.items():
        group.create_dataset(name, data=value)

    converter = NexusToDictConverter()
    root_dict = converter.convert(file)

    assert len(root_dict["children"]) == 1, "The stream group has been omitted"
    assert group_name == root_dict["children"][0]["name"]
    assert group_contents == root_dict["children"][0]["children"][0]["stream"]
    assert "attributes" not in root_dict["children"][0]
コード例 #5
0
def test_GIVEN_stream_group_that_has_ev42_advanced_option_WHEN_filling_in_existing_field_widget_THEN_ev42_group_box_is_shown(
        file, qtbot):
    group = file.create_group("stream2")
    group.attrs["NX_class"] = "NCstream"

    vlen_str = h5py.special_dtype(vlen=str)
    group.create_dataset("writer_module", dtype=vlen_str, data="ev42")
    group.create_dataset("topic", dtype=vlen_str, data="topic1")
    group.create_dataset("source", dtype=vlen_str, data="source1")
    group.create_dataset(ADC_PULSE_DEBUG, dtype=bool, data=True)

    wrapper = NexusWrapper()
    wrapper.load_file(file, file)

    instrument = Instrument(wrapper, {})

    widget = FieldWidget(instrument=instrument)
    qtbot.addWidget(widget)

    update_existing_stream_field(group, widget)

    # this would usually be done outside of the update_existing_stream_field
    widget.name = get_name_of_node(group)

    assert widget.streams_widget.ev42_advanced_group_box.isEnabled()

    generated_group = widget.streams_widget.get_stream_group()
    assert generated_group["writer_module"][()] == group["writer_module"][()]
    assert generated_group["topic"][()] == group["topic"][()]
    assert generated_group["source"][()] == group["source"][()]
    assert generated_group[ADC_PULSE_DEBUG][()] == group[ADC_PULSE_DEBUG][()]
コード例 #6
0
def test_GIVEN_field_without_advanced_option_WHEN_checking_if_advanced_options_should_be_enabled_THEN_returns_false(
    file, ):
    group = file.create_group("group")

    field_name = "test"
    advanced_options = ["not_test"]
    group.create_dataset(name=field_name, data=1)
    assert not check_if_advanced_options_should_be_enabled(
        advanced_options, group)
コード例 #7
0
def test_GIVEN_stream_with_no_forwarder_streams_WHEN_generating_forwarder_command_THEN_output_does_not_contain_any_pvs(
    file, ):
    group_name = "test_group"
    group = file.create_group(group_name)
    group.attrs["NX_class"] = "NCstream"

    group.create_dataset("writer_module", data="ev42")
    group.create_dataset("source", data="source1")
    group.create_dataset("topic", data="topic1")

    dummy_file = io.StringIO()

    generate_forwarder_command(dummy_file, file, "ca", "")

    assert not literal_eval(dummy_file.getvalue())["streams"]
コード例 #8
0
def test_GIVEN_advanced_option_in_field_WHEN_filling_in_advanced_options_THEN_spinbox_is_created(
        qtbot, file):
    group = file.create_group("group")
    field_name = "test"

    advanced_options = [field_name]
    spinner = QSpinBox()

    items = {advanced_options[0]: spinner}.items()
    value = 4

    group.create_dataset(name=field_name, data=value)

    fill_in_advanced_options(items, group)

    assert spinner.value() == value
コード例 #9
0
def test_GIVEN_group_with_multiple_attributes_WHEN_converting_nexus_to_dict_THEN_attributes_end_up_in_file(
    file, ):
    group_name = "test_group"
    group = file.create_group(group_name)
    group.attrs["NX_class"] = "NXgroup"

    field1name = "field1"
    field1value = "field1val"

    field2name = "field2"
    field2value = 3

    arbitrary_field_name = "arbitrary_field"
    arbitrary_field_value = "something"

    field1 = group.create_dataset(field1name, data=field1value)
    field1.attrs["NX_class"] = "NXfield"
    field1.attrs[arbitrary_field_name] = arbitrary_field_value

    field2 = group.create_dataset(field2name, data=field2value)
    field2.attrs["NX_class"] = "NXfield"

    converter = NexusToDictConverter()
    root_dict = converter.convert(file)

    assert group.name.split("/")[-1] == root_dict["children"][0]["name"]

    assert field1.name.split(
        "/")[-1] == root_dict["children"][0]["children"][0]["name"]
    assert field1value == root_dict["children"][0]["children"][0]["values"]
    assert ("NX_class" == root_dict["children"][0]["children"][0]["attributes"]
            [0]["name"])
    assert (field1.attrs["NX_class"] == root_dict["children"][0]["children"][0]
            ["attributes"][0]["values"])

    assert (arbitrary_field_name == root_dict["children"][0]["children"][0]
            ["attributes"][1]["name"])
    assert (field1.attrs[arbitrary_field_name] == root_dict["children"][0]
            ["children"][0]["attributes"][1]["values"])

    assert field2.name.split(
        "/")[-1] == root_dict["children"][0]["children"][1]["name"]
    assert field2value == root_dict["children"][0]["children"][1]["values"]
コード例 #10
0
def test_GIVEN_link_in_group_children_that_is_a_dataset_WHEN_handling_group_THEN_link_is_appended_to_children(
    file, ):
    root_group = file.create_group("root")
    ds_to_be_linked_name = "test_linked_dataset"
    dataset_to_be_linked = root_group.create_dataset(ds_to_be_linked_name,
                                                     data=1)
    dataset_to_be_linked.attrs["NX_class"] = "NXgroup"

    group_name = "test_group_with_link"
    root_group[group_name] = h5py.SoftLink(dataset_to_be_linked.name)
    root_group[group_name].attrs["NX_class"] = "NXgroup"

    converter = NexusToDictConverter()
    root_dict = converter.convert(file)

    assert root_dict["children"][0]["children"][0]["type"] == "link"
    assert (root_group[group_name].name.split("/")[-1] == root_dict["children"]
            [0]["children"][0]["name"])
    assert (dataset_to_be_linked.name == root_dict["children"][0]["children"]
            [0]["target"])
コード例 #11
0
def test_UI_GIVEN_stream_group_as_angle_WHEN_creating_rotation_THEN_ui_is_filled_correctly(
    qtbot, file  # noqa:F811
):
    wrapper = NexusWrapper(filename="test")
    instrument = Instrument(wrapper, {})

    component = instrument.create_component("test", "NXaperture", "")

    x = 0
    y = 0
    z = 0

    transform = component.add_rotation(QVector3D(x, y, z), 0, name="test")

    stream_group = file.create_group("stream_group")
    stream_group.attrs["NX_class"] = "NCstream"
    topic = "test_topic"
    writer_module = "ev42"
    source = "source1"
    stream_group.create_dataset("topic", dtype=h5py.special_dtype(vlen=str), data=topic)
    stream_group.create_dataset("writer_module", data=writer_module)
    stream_group.create_dataset("source", data=source)

    transform.dataset = stream_group

    view = EditRotation(parent=None, transformation=transform, instrument=instrument)
    qtbot.addWidget(view)

    assert view.transformation_frame.x_spinbox.value() == x
    assert view.transformation_frame.y_spinbox.value() == y
    assert view.transformation_frame.z_spinbox.value() == z
    assert view.transformation_frame.value_spinbox.value() == 0.0
    assert (
        view.transformation_frame.magnitude_widget.field_type == FieldType.kafka_stream
    )
    assert view.transformation_frame.magnitude_widget.value["topic"][()] == topic
    assert (
        view.transformation_frame.magnitude_widget.value["writer_module"][()]
        == writer_module
    )
    assert view.transformation_frame.magnitude_widget.value["source"][()] == source
コード例 #12
0
def test_GIVEN_link_in_group_children_WHEN_handling_group_THEN_link_is_appended_to_children(
    file, ):
    root_group = file.create_group("root")

    group_to_be_linked_name = "test_linked_group"
    group_to_be_linked = root_group.create_group(group_to_be_linked_name)
    group_to_be_linked.attrs["NX_class"] = "NXgroup"

    group_name = "test_group_with_link"
    root_group[group_name] = h5py.SoftLink(group_to_be_linked.name)
    root_group[group_name].attrs["NX_class"] = "NXgroup"

    converter = NexusToDictConverter()
    root_dict = converter.convert(file)

    assert len(root_dict["children"]) == 1, "The link group has been omitted"
    assert root_dict["children"][0]["children"][0]["type"] == "link"
    assert (root_group[group_name].name.split("/")[-1] == root_dict["children"]
            [0]["children"][0]["name"])
    assert group_to_be_linked.name == root_dict["children"][0]["children"][0][
        "target"]
コード例 #13
0
def test_GIVEN_stream_with_topic_not_including_broker_and_default_broker_not_provided_WHEN_generating_forwarder_command_THEN_topic_does_not_include_broker(
    file, ):
    pv_name = "testPV"

    topic = "topic1"
    writer_module = "f142"

    group = file.create_group("test_group")
    group.attrs["NX_class"] = "NCstream"
    group.create_dataset("writer_module", data=writer_module)
    group.create_dataset("source", data=pv_name)
    group.create_dataset("topic", data=topic)

    dummy_file = io.StringIO()

    generate_forwarder_command(dummy_file, file, "pva", "")

    streams_ = literal_eval(dummy_file.getvalue())["streams"]

    assert len(streams_) == 1

    assert streams_[0]["converter"]["topic"] == topic
コード例 #14
0
def test_GIVEN_stream_with_f142_command_WHEN_generating_forwarder_command_THEN_output_contains_pv(
    file, ):
    pv_name = "pv1"
    topic = "someTopic"
    writer_module = "f142"
    group_name = "test_group"
    group = file.create_group(group_name)
    group.attrs["NX_class"] = "NCstream"

    group.create_dataset("writer_module", data=writer_module)
    group.create_dataset("topic", data=topic)
    group.create_dataset("source", data=pv_name)

    dummy_file = io.StringIO()

    generate_forwarder_command(dummy_file, file, "ca", "")

    streams_ = literal_eval(dummy_file.getvalue())["streams"]
    assert len(streams_) == 1
    assert streams_[0]["channel"] == pv_name
    assert streams_[0]["converter"]["topic"] == topic
    assert streams_[0]["converter"]["schema"] == writer_module
コード例 #15
0
def test_dependent_is_created_by_instrument_if_depends_on_is_relative(
        file,  # noqa: F811
):
    entry_group = file.create_group("entry")
    entry_group.attrs["NX_class"] = "NXentry"
    monitor_group = entry_group.create_group("monitor1")
    monitor_group.attrs["NX_class"] = "NXmonitor"

    monitor_group.create_dataset("depends_on",
                                 data=b"transformations/translation1")

    transformations_group = monitor_group.create_group("transformations")
    transformations_group.attrs["NX_class"] = "NXtransformations"
    transform_1 = transformations_group.create_dataset("translation1", data=1)

    nexus_wrapper = NexusWrapper("test_file_with_transforms")
    nexus_wrapper.load_file(entry_group, file)
    Instrument(nexus_wrapper, NX_CLASS_DEFINITIONS)

    transform_1_loaded = Transformation(nexus_wrapper, transform_1)
    assert transform_1_loaded.dataset.attrs["NCdependee_of"][
        0] == "/entry/monitor1"
コード例 #16
0
def test_dependents_list_is_created_by_instrument(file):  # noqa: F811
    """
    The dependents list for transforms is stored in the "dependent_of" attribute,
    which is not part of the NeXus standard,
    we therefore cannot rely on it being present and correct in a file we load.
    This test makes sure that instrument generates this information in the wrapped NeXus file it is given.
    """

    # Create minimal test file with some transformations but no "dependent_of" attributes
    entry_group = file.create_group("entry")
    entry_group.attrs["NX_class"] = "NXentry"
    instrument_group = entry_group.create_group("instrument")
    instrument_group.attrs["NX_class"] = "NXinstrument"
    transforms_group = instrument_group.create_group("transformations")
    transforms_group.attrs["NX_class"] = "NXtransformations"
    transform_1 = transforms_group.create_dataset("transform_1", data=42)
    transform_2 = transforms_group.create_dataset("transform_2", data=42)
    transform_3 = transforms_group.create_dataset("transform_3", data=42)
    transform_4 = transforms_group.create_dataset("transform_4", data=42)
    transform_2.attrs["depends_on"] = transform_1.name
    transform_3.attrs["depends_on"] = transform_2.name
    transform_4.attrs["depends_on"] = transform_2.name

    nexus_wrapper = NexusWrapper("test_file_with_transforms")
    nexus_wrapper.load_file(entry_group, file)
    Instrument(nexus_wrapper, NX_CLASS_DEFINITIONS)

    transform_1_loaded = Transformation(nexus_wrapper, transform_1)
    assert (
        len(transform_1_loaded.get_dependents()) == 1
    ), "Expected transform 1 to have a registered dependent (transform 2)"

    transform_2_loaded = Transformation(nexus_wrapper, transform_2)
    assert (
        len(transform_2_loaded.get_dependents()) == 2
    ), "Expected transform 2 to have 2 registered dependents (transforms 3 and 4)"