diff --git a/src/shiver/models/convert_dgs_to_single_mde.py b/src/shiver/models/convert_dgs_to_single_mde.py index 3c35362e..b9569f82 100644 --- a/src/shiver/models/convert_dgs_to_single_mde.py +++ b/src/shiver/models/convert_dgs_to_single_mde.py @@ -264,7 +264,14 @@ def PyExec(self): # pylint: disable=too-many-branches run_obj = data.getRun() # check if monitor is necessary and get Ei,T0 if inst_name in ["HYSPEC", "CNCS"]: - Ei = Ei_supplied if Ei_supplied else run_obj["EnergyRequest"].getStatistics().mean + Ei = None + if Ei_supplied: + Ei = Ei_supplied + elif "EnergyRequest" in run_obj: + Ei = run_obj["EnergyRequest"].getStatistics().mean + else: + self.log().error("EnergyRequest is not defined") + raise ValueError("EnergyRequest is not defined") T0 = T0_supplied if (T0_supplied is not None) else GetEi(data).Tzero else: if (Ei_supplied is not None) and (T0_supplied is not None): diff --git a/src/shiver/models/generate.py b/src/shiver/models/generate.py index 11faef60..4495c7ec 100644 --- a/src/shiver/models/generate.py +++ b/src/shiver/models/generate.py @@ -47,7 +47,7 @@ def generate_mde(self, config_dict: dict): # disable the Generate button to prevent multiple clicks if self.generate_mde_finish_callback: - self.generate_mde_finish_callback() + self.generate_mde_finish_callback(False) # remove output workspace if it exists in memory output_workspace = config_dict.get("mde_name", "") @@ -190,8 +190,11 @@ def finish_generate_mde(self, obs, error=False, msg=""): self.workspace_name = None self.output_dir = None self.config_dict = None + # enable button if self.generate_mde_finish_callback: - self.generate_mde_finish_callback() + self.generate_mde_finish_callback(True) + if self.error_callback: + self.error_callback(msg=err_msg) else: logger.information("GenerateDGSMDE finished") # attach config_dict to the workspace @@ -262,8 +265,8 @@ def finish_save_md(self, obs, error=False, msg=""): self.output_dir = None self.algorithm_observer.remove(obs) - - self.generate_mde_finish_callback() + # enable button + self.generate_mde_finish_callback(True) class GenerateMDEObserver(AlgorithmObserver): diff --git a/src/shiver/views/generate.py b/src/shiver/views/generate.py index 1cbf8ed8..e708fe90 100644 --- a/src/shiver/views/generate.py +++ b/src/shiver/views/generate.py @@ -94,8 +94,8 @@ def __init__(self, parent=None): self.field_errors = {self.buttons.save_btn: [], self.buttons.generate_btn: []} # mandatory fields for the two available buttons self.field_btns = { - self.mde_type_widget.output_dir: [self.buttons.save_btn], - self.mde_type_widget.mde_name: [self.buttons.save_btn], + self.mde_type_widget.output_dir: [self.buttons.save_btn, self.buttons.generate_btn], + self.mde_type_widget.mde_name: [self.buttons.save_btn, self.buttons.generate_btn], self.raw_data_widget.files: [self.buttons.save_btn, self.buttons.generate_btn], self.reduction_parameters.ei_input: [self.buttons.save_btn], self.reduction_parameters.t0_input: [self.buttons.save_btn], @@ -104,9 +104,9 @@ def __init__(self, parent=None): self.mde_type_widget.check_mde_name() self.raw_data_widget.check_file_input() - def generate_mde_finish_callback(self): + def generate_mde_finish_callback(self, activate): """Toggle the generate button disabled state.""" - if self.isEnabled(): + if not activate: self.setDisabled(True) else: self.setEnabled(True) diff --git a/tests/views/test_generate.py b/tests/views/test_generate.py index 89ea9e98..4871c961 100644 --- a/tests/views/test_generate.py +++ b/tests/views/test_generate.py @@ -41,7 +41,7 @@ def error_callback(msg): # all three required fields are empty assert len(generate.field_errors[generate.buttons.save_btn]) == 3 - assert len(generate.field_errors[generate.buttons.generate_btn]) == 1 + assert len(generate.field_errors[generate.buttons.generate_btn]) == 3 # set files directory = os.path.realpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../data/raw")) @@ -93,7 +93,7 @@ def error_callback(msg): assert not mde_type_widget.as_dict() assert errors_list[-1] == "Invalid MDE name found in history." assert len(generate.field_errors[generate.buttons.save_btn]) == 1 - assert len(generate.field_errors[generate.buttons.generate_btn]) == 0 + assert len(generate.field_errors[generate.buttons.generate_btn]) == 1 # check error_2: empty output dir mde_type_widget.re_init_widget() @@ -148,7 +148,7 @@ def test_generate_widget_colors_invalid(qtbot): # all three required fields are empty assert len(generate.field_errors[generate.buttons.save_btn]) == 3 - assert len(generate.field_errors[generate.buttons.generate_btn]) == 1 + assert len(generate.field_errors[generate.buttons.generate_btn]) == 3 # check mde_name border qtbot.keyClicks(mde_type_widget.mde_name, "") @@ -156,7 +156,7 @@ def test_generate_widget_colors_invalid(qtbot): color = color_search.search(css_style_mde_name).group(1) assert color == "red" assert len(generate.field_errors[generate.buttons.save_btn]) == 3 - assert len(generate.field_errors[generate.buttons.generate_btn]) == 1 + assert len(generate.field_errors[generate.buttons.generate_btn]) == 3 qtbot.keyClicks(mde_type_widget.output_dir, "/tmp/test?") # check output_dir border @@ -170,7 +170,7 @@ def test_generate_widget_colors_invalid(qtbot): color = color_search.search(css_style_files).group(1) assert color == "red" assert len(generate.field_errors[generate.buttons.save_btn]) == 3 - assert len(generate.field_errors[generate.buttons.generate_btn]) == 1 + assert len(generate.field_errors[generate.buttons.generate_btn]) == 3 # assert buttons are deactivated assert generate.buttons.save_btn.isEnabled() is False @@ -186,7 +186,7 @@ def test_generate_widget_colors_valid(qtbot): generate.show() assert len(generate.field_errors[generate.buttons.save_btn]) == 3 - assert len(generate.field_errors[generate.buttons.generate_btn]) == 1 + assert len(generate.field_errors[generate.buttons.generate_btn]) == 3 # set mde_name qtbot.keyClicks(mde_type_widget.mde_name, "mde_test_2")