diff --git a/scripts/Engineering/gui/engineering_diffraction/settings/settings_helper.py b/scripts/Engineering/gui/engineering_diffraction/settings/settings_helper.py index 665f298256529818ed7245c559ae71f52cf107a7..020ad2f3032f2d82b3f6a86b7c7bea913d9ca0b4 100644 --- a/scripts/Engineering/gui/engineering_diffraction/settings/settings_helper.py +++ b/scripts/Engineering/gui/engineering_diffraction/settings/settings_helper.py @@ -11,6 +11,13 @@ from qtpy.QtCore import QSettings def set_setting(group, prefix, setting_name, value): + """ + Change or add a setting in the mantid .ini file. + :param group: Settings group to pull from. + :param prefix: Acts like a subgroup. + :param setting_name: The key to the setting. + :param value: The value of the setting. + """ settings = QSettings() settings.beginGroup(group) settings.setValue(prefix + setting_name, value) @@ -18,8 +25,33 @@ def set_setting(group, prefix, setting_name, value): def get_setting(group, prefix, setting_name, return_type=str): + """ + Get a setting from the .ini file of mantid settings. + + NOTE: If you specify an int, but the setting contains a bool, you will get 0 for False + and 1 for True, without a warning. Specifying bool will raise a TypeError if anything + other than a bool or empty string is found in the settings. Not specifying a type will + return a string. If nothing is found then an empty string is returned. + + :param group: Settings group to pull from. + :param prefix: The prefix of the setting, acts like a subgroup. + :param setting_name: Name of the setting. + :param return_type: The type of the setting to get. + :return: The chosen setting. + """ settings = QSettings() settings.beginGroup(group) - setting = settings.value(prefix + setting_name, type=return_type) + if return_type is bool: + setting = settings.value(prefix + setting_name, type=str) + if setting == "": + pass + elif setting == "true": + setting = True + elif setting == "false": + setting = False + else: + raise TypeError("Unable to convert string into valid bool") + else: + setting = settings.value(prefix + setting_name, type=return_type) settings.endGroup() return setting diff --git a/scripts/Engineering/gui/engineering_diffraction/settings/test/test_settings_helper.py b/scripts/Engineering/gui/engineering_diffraction/settings/test/test_settings_helper.py index 51530f1705d7bddd87b0c846863a29d96fb777f2..62a0bf0d145ed963a25d27d06295258523df9bc9 100644 --- a/scripts/Engineering/gui/engineering_diffraction/settings/test/test_settings_helper.py +++ b/scripts/Engineering/gui/engineering_diffraction/settings/test/test_settings_helper.py @@ -107,6 +107,54 @@ class SettingsHelperTest(unittest.TestCase): def test_get_setting_with_invalid(self): self.assertEqual(get_setting(GROUP, PREFIX, "something"), "") + def test_get_setting_int_without_specifying_type(self): + settings = QSettings() + settings.beginGroup(GROUP) + settings.setValue(PREFIX + "something", 10) + settings.endGroup() + + self.assertEqual(get_setting(GROUP, PREFIX, "something"), "10") + + def test_get_setting_bool_without_specifying_type(self): + settings = QSettings() + settings.beginGroup(GROUP) + settings.setValue(PREFIX + "something", True) + settings.endGroup() + + self.assertEqual(get_setting(GROUP, PREFIX, "something"), "true") + + def test_get_setting_bool_specifying_int(self): + settings = QSettings() + settings.beginGroup(GROUP) + settings.setValue(PREFIX + "something", True) + settings.endGroup() + + self.assertEqual(get_setting(GROUP, PREFIX, "something", return_type=int), 1) + + def test_get_setting_int_specifying_bool(self): + settings = QSettings() + settings.beginGroup(GROUP) + settings.setValue(PREFIX + "something", 10) + settings.endGroup() + + self.assertRaises(TypeError, get_setting, GROUP, PREFIX, "something", return_type=bool) + + def test_get_setting_string_specifying_int(self): + settings = QSettings() + settings.beginGroup(GROUP) + settings.setValue(PREFIX + "something", "some setting") + settings.endGroup() + + self.assertRaises(TypeError, get_setting, GROUP, PREFIX, "something", return_type=int) + + def test_get_setting_string_specifying_bool(self): + settings = QSettings() + settings.beginGroup(GROUP) + settings.setValue(PREFIX + "something", "a") + settings.endGroup() + + self.assertRaises(TypeError, get_setting, GROUP, PREFIX, "something", return_type=bool) + if __name__ == '__main__': unittest.main()