Exemple #1
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][()]
Exemple #2
0
def __update_existing_dataset_field(field: Dataset, new_ui_field: FieldWidget):
    new_ui_field.name = field.name
    new_ui_field.dtype = ValueTypes.STRING if not field.type else field.type
    new_ui_field.value = field.values  # type: ignore
    new_ui_field.attrs = field
    units = field.attributes.get_attribute_value(CommonAttrs.UNITS)
    new_ui_field.units = units
Exemple #3
0
def test_GIVEN_stream_group_that_has_f142_advanced_option_WHEN_filling_in_existing_field_widget_THEN_f142_group_box_is_shown(
        file, qtbot, nexus_wrapper):
    group = file.create_group("stream1")
    group.attrs["NX_class"] = "NCstream"

    vlen_str = h5py.special_dtype(vlen=str)
    group.create_dataset("writer_module", dtype=vlen_str, data="f142")
    group.create_dataset("type", dtype=vlen_str, data="byte")
    group.create_dataset("topic", dtype=vlen_str, data="topic1")
    group.create_dataset("source", dtype=vlen_str, data="source1")
    group.create_dataset(NEXUS_INDICES_INDEX_EVERY_MB, dtype=int, data=1)

    wrapper = nexus_wrapper
    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.f142_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["type"][()] == group["type"][()]
    assert generated_group["source"][()] == group["source"][()]
    assert (generated_group[NEXUS_INDICES_INDEX_EVERY_MB][(
    )] == group[NEXUS_INDICES_INDEX_EVERY_MB][()])
Exemple #4
0
def update_existing_link_field(field: h5py.SoftLink, new_ui_field: FieldWidget):
    """
    Fill in a UI link field for an existing link in the component
    :param field: The link field in the component group
    :param new_ui_field: The new UI field to fill in with existing data
    """
    new_ui_field.field_type = FieldType.link.value
    new_ui_field.value = field.parent.get(field.name, getlink=True).path
Exemple #5
0
def update_existing_array_field(field: h5py.Dataset, new_ui_field: FieldWidget):
    """
    Fill in a UI array field for an existing array field in the component group
    :param value: The array dataset's value to copy to the UI fields list model
    :param new_ui_field: The new UI field to fill in with existing data
    """
    new_ui_field.field_type = FieldType.array_dataset.value
    new_ui_field.dtype = field.dtype
    new_ui_field.value = field[()]
Exemple #6
0
    def setupUi(self, Transformation, instrument):
        Transformation.setObjectName("Transformation")
        Transformation.resize(361, 171)
        self.frame_layout = QVBoxLayout(Transformation)
        self.frame_layout.setContentsMargins(4, 4, 4, 4)
        self.main_layout = QVBoxLayout()
        self.main_layout.setSpacing(4)

        self.name_layout = QHBoxLayout()
        self.name_layout.setSpacing(-1)
        self.name_label = QLabel("Name", Transformation)
        self._make_text_bold(self.name_label)

        self.name_layout.addWidget(self.name_label)
        self.name_line_edit = QLineEdit(Transformation)

        self.name_layout.addWidget(self.name_line_edit)
        self.main_layout.addLayout(self.name_layout)

        self._add_line()

        self.vector_label = QLabel("", Transformation)
        self._make_text_bold(self.vector_label)
        self.main_layout.addWidget(self.vector_label)

        self._set_up_vector_box(Transformation)

        self._add_line()

        self.value_label = QLabel("")
        self._make_text_bold(self.value_label)
        self.main_layout.addWidget(self.value_label)

        self.magnitude_widget = FieldWidget(hide_name_field=True,
                                            instrument=instrument)
        self.magnitude_widget.setFrameShape(QFrame.NoFrame)
        self.magnitude_widget.setMinimumHeight(40)
        self.main_layout.addWidget(self.magnitude_widget)

        self.ui_placeholder_layout = QFormLayout()
        self.value_spinbox = QDoubleSpinBox(Transformation)
        self.value_spinbox.setToolTip("Placeholder value for 3D view to use")
        self.value_spinbox.setDecimals(8)
        self.value_spinbox.setMaximumSize(QSize(100, 16777215))
        self.ui_placeholder_layout.addRow("Value to use in 3D view:",
                                          self.value_spinbox)

        self.main_layout.addLayout(self.ui_placeholder_layout)

        self.set_spinbox_ranges()

        self.frame_layout.addLayout(self.main_layout)

        self.retranslateUi(Transformation)
        QMetaObject.connectSlotsByName(Transformation)
    def add_field(self) -> FieldWidget:
        item = QListWidgetItem()
        field = FieldWidget(
            self.possible_fields, self.fieldsListWidget, self.instrument
        )
        field.something_clicked.connect(partial(self.select_field, item))
        self.nx_class_changed.connect(field.field_name_edit.update_possible_fields)
        item.setSizeHint(field.sizeHint())

        self.fieldsListWidget.addItem(item)
        self.fieldsListWidget.setItemWidget(item, field)
        return field
Exemple #8
0
def test_ui_field_GIVEN_field_does_not_have_units_filled_in_ui_WHEN_getting_field_group_THEN_units_are_not_saved(
    qtbot, ):
    listwidget = QListWidget()
    field = FieldWidget(None, POSSIBLE_FIELDS, listwidget)
    field_name = "test"
    field.name = field_name
    field.value_line_edit.setText("1")
    qtbot.addWidget(field)

    group = field.value

    assert not group.attributes.contains_attribute("units")
Exemple #9
0
def test_ui_field_GIVEN_field_does_not_have_units_filled_in_ui_WHEN_getting_field_group_THEN_units_are_not_saved(
    qtbot, ):
    listwidget = QListWidget()
    field = FieldWidget(["test"], listwidget)
    field_name = "test"
    field.name = field_name
    field.value_line_edit.setText("1")
    qtbot.addWidget(field)

    group = field.value

    assert "units" not in group.attrs
Exemple #10
0
def test_ui_stream_field_GIVEN_f142_is_selected_WHEN_combo_is_changed_THEN_value_units_edit_is_shown(
    qtbot, ):
    listwidget = QListWidget()
    field = FieldWidget(["test"], listwidget)
    field_name = "test"
    field.name = field_name

    stream_fields_widget = StreamFieldsWidget(field)
    qtbot.addWidget(stream_fields_widget)

    stream_fields_widget.schema_combo.currentTextChanged.emit("f142")

    assert stream_fields_widget.value_units_edit.isEnabled()
    assert stream_fields_widget.value_units_label.isEnabled()
Exemple #11
0
def test_ui_field_GIVEN_field_has_units_filled_in_ui_WHEN_getting_field_group_THEN_units_are_stored_in_attrs(
    qtbot, ):
    listwidget = QListWidget()
    field = FieldWidget(None, POSSIBLE_FIELDS, listwidget)
    field_name = "test"
    field.name = field_name
    field.value_line_edit.setText("1")
    qtbot.addWidget(field)
    units = "m"
    field.units = units
    group = field.value

    assert group.attributes.contains_attribute("units")
    assert group.attributes.get_attribute_value("units") == units
Exemple #12
0
def update_existing_scalar_field(field: h5py.Dataset, new_ui_field: FieldWidget):
    """
    Fill in a UI scalar field for an existing scalar field in the component group
    :param field: The dataset to copy into the value line edit
    :param new_ui_field: The new UI field to fill in with existing data
    """
    new_ui_field.field_type = FieldType.scalar_dataset.value
    dtype = field.dtype
    if "S" in str(dtype):
        dtype = h5py.special_dtype(vlen=str)
        new_ui_field.value = field[()]
    else:
        new_ui_field.value = field[()]
    new_ui_field.dtype = dtype
Exemple #13
0
def update_existing_scalar_field(field: Dataset, new_ui_field: FieldWidget):
    """
    Fill in a UI scalar field for an existing scalar field in the component group
    :param field: The dataset to copy into the value line edit
    :param new_ui_field: The new UI field to fill in with existing data
    """
    new_ui_field.field_type = FieldType(FieldType.scalar_dataset.value)
    __update_existing_dataset_field(field, new_ui_field)
Exemple #14
0
def update_existing_array_field(field: Dataset, new_ui_field: FieldWidget):
    """
    Fill in a UI array field for an existing array field in the component group
    :param field: The dataset to copy to the UI fields list model
    :param new_ui_field: The new UI field to fill in with existing data
    """
    new_ui_field.field_type = FieldType(FieldType.array_dataset.value)
    __update_existing_dataset_field(field, new_ui_field)
Exemple #15
0
def test_ui_stream_field_GIVEN_f142_is_selected_WHEN_advanced_options_are_clicked_THEN_f142_group_box_is_shown(
    qtbot, ):
    listwidget = QListWidget()
    field = FieldWidget(["test"], listwidget)
    field_name = "test"
    field.name = field_name

    stream_fields_widget = StreamFieldsWidget(field)
    stream_fields_widget.schema_combo.setCurrentText("f142")

    qtbot.addWidget(stream_fields_widget)

    stream_fields_widget.f142_advanced_group_box.setVisible = Mock()
    stream_fields_widget._show_advanced_options(True)

    stream_fields_widget.f142_advanced_group_box.setVisible.assert_called_once_with(
        True)
Exemple #16
0
    def setup_ui(self, transformation):
        self.main_layout = QVBoxLayout()
        self.main_layout.setSpacing(4)

        self.frame_layout = QVBoxLayout(transformation)
        self.frame_layout.setContentsMargins(4, 4, 4, 4)

        self.name_layout = QHBoxLayout()
        self.name_layout.setSpacing(-1)
        self.name_label = QLabel("Name", transformation)
        self._make_text_bold(self.name_label)
        self.name_line_edit = QLineEdit(transformation)

        self.vector_label = QLabel("", transformation)
        self._make_text_bold(self.vector_label)

        self.value_label = QLabel("")
        self._make_text_bold(self.value_label)

        self.magnitude_widget = FieldWidget(
            node_parent=transformation.transformation_parent,
            hide_name_field=True,
            show_only_f142_stream=True,
        )
        self.magnitude_widget.setFrameShape(QFrame.NoFrame)
        self.magnitude_widget.setMinimumHeight(40)

        self.ui_placeholder_layout = QFormLayout()

        self.value_spinbox = QDoubleSpinBox(transformation)
        self.value_spinbox.setToolTip("Placeholder value for 3D view to use")
        self.value_spinbox.setDecimals(8)
        self.value_spinbox.setMaximumSize(QSize(100, 16777215))
        self.ui_placeholder_layout.addRow(
            "Value to use in 3D view:", self.value_spinbox
        )

        self.setup_name_layout()
        self.setup_vector_layout(transformation)
        self.setup_value_and_magnitude()
        self.set_spinbox_ranges()

        self.frame_layout.addLayout(self.main_layout)

        self.retranslate_ui(transformation)
        QMetaObject.connectSlotsByName(transformation)
Exemple #17
0
def test_ui_field_GIVEN_field_has_units_filled_in_ui_WHEN_getting_field_group_THEN_units_are_stored_in_attrs(
    qtbot, ):
    nexus_wrapper = NexusWrapper("test_ui_fields_units")
    instrument = Instrument(nexus_wrapper, NX_CLASS_DEFINITIONS)

    listwidget = QListWidget()
    field = FieldWidget(["test"], listwidget, instrument=instrument)
    field_name = "test"
    field.name = field_name
    field.value_line_edit.setText("1")
    qtbot.addWidget(field)
    units = "m"
    field.units = units
    group = field.value

    assert "units" in group.attrs
    assert group.attrs["units"] == units
Exemple #18
0
def update_existing_stream_field(field: h5py.Dataset, new_ui_field: FieldWidget):
    """
    Fill in a UI stream field for an existing stream field in the component group
    :param field: The dataset to copy into the value line edit
    :param new_ui_field: The new UI field to fill in with existing data
    """
    new_ui_field.field_type = FieldType.kafka_stream.value
    new_ui_field.streams_widget.update_existing_stream_info(field)
 def __init__(self, module, parent: QWidget, model: Model):
     super().__init__(
         module.writer_module.upper() if module.writer_module
         == STATIC_DATASETS else module.writer_module,
         parent,
     )
     layout = QVBoxLayout()
     self.field_widget = FieldWidget(module.parent_node,
                                     parent_dataset=module)
     self.field_widget.field_type_combo.setEnabled(False)
     self.module = module
     self.model = model
     self._set_existing_items()
     layout.addWidget(self.field_widget)
     self.setLayout(layout)
Exemple #20
0
class Ui_Transformation(object):
    def setupUi(self, Transformation, instrument):
        Transformation.setObjectName("Transformation")
        Transformation.resize(361, 171)
        self.frame_layout = QVBoxLayout(Transformation)
        self.frame_layout.setContentsMargins(4, 4, 4, 4)
        self.main_layout = QVBoxLayout()
        self.main_layout.setSpacing(4)

        self.name_layout = QHBoxLayout()
        self.name_layout.setSpacing(-1)
        self.name_label = QLabel("Name", Transformation)
        self._make_text_bold(self.name_label)

        self.name_layout.addWidget(self.name_label)
        self.name_line_edit = QLineEdit(Transformation)

        self.name_layout.addWidget(self.name_line_edit)
        self.main_layout.addLayout(self.name_layout)

        self._add_line()

        self.vector_label = QLabel("", Transformation)
        self._make_text_bold(self.vector_label)
        self.main_layout.addWidget(self.vector_label)

        self._set_up_vector_box(Transformation)

        self._add_line()

        self.value_label = QLabel("")
        self._make_text_bold(self.value_label)
        self.main_layout.addWidget(self.value_label)

        self.magnitude_widget = FieldWidget(hide_name_field=True,
                                            instrument=instrument)
        self.magnitude_widget.setFrameShape(QFrame.NoFrame)
        self.magnitude_widget.setMinimumHeight(40)
        self.main_layout.addWidget(self.magnitude_widget)

        self.ui_placeholder_layout = QFormLayout()
        self.value_spinbox = QDoubleSpinBox(Transformation)
        self.value_spinbox.setToolTip("Placeholder value for 3D view to use")
        self.value_spinbox.setDecimals(8)
        self.value_spinbox.setMaximumSize(QSize(100, 16777215))
        self.ui_placeholder_layout.addRow("Value to use in 3D view:",
                                          self.value_spinbox)

        self.main_layout.addLayout(self.ui_placeholder_layout)

        self.set_spinbox_ranges()

        self.frame_layout.addLayout(self.main_layout)

        self.retranslateUi(Transformation)
        QMetaObject.connectSlotsByName(Transformation)

    def _add_line(self):
        line = QFrame()
        line.setFrameShape((QFrame.HLine))
        line.setFrameShadow(QFrame.Sunken)
        self.main_layout.addWidget(line)

    @staticmethod
    def _make_text_bold(label: QLabel):
        font = label.font()
        font.setBold(True)
        label.setFont(font)

    def _set_up_vector_box(self, Transformation):
        self.xyz_layout = QHBoxLayout()

        self.x_layout = QFormLayout()
        self.x_spinbox = QDoubleSpinBox(Transformation)
        self.x_layout.addRow("x:", self.x_spinbox)
        self.xyz_layout.addLayout(self.x_layout)

        self.y_layout = QFormLayout()
        self.y_spinbox = QDoubleSpinBox(Transformation)
        self.y_layout.addRow("y:", self.y_spinbox)
        self.xyz_layout.addLayout(self.y_layout)

        self.z_layout = QFormLayout()
        self.z_spinbox = QDoubleSpinBox(Transformation)
        self.z_layout.addRow("z:", self.z_spinbox)
        self.xyz_layout.addLayout(self.z_layout)

        self.main_layout.addLayout(self.xyz_layout)

    def set_spinbox_ranges(self):
        self.spinboxes = [
            self.x_spinbox,
            self.y_spinbox,
            self.z_spinbox,
            self.value_spinbox,
        ]
        for spinbox in self.spinboxes:
            spinbox.setRange(-10000000, 10000000)
            spinbox.setDecimals(5)

    def retranslateUi(self, Transformation):
        Transformation.setWindowTitle(
            QApplication.translate("Transformation", "GroupBox", None, -1))
        Transformation.setTitle(
            QApplication.translate("Transformation", "Translation", None, -1))