From f88225308898b224a68a8186e3bf1fff895ca024 Mon Sep 17 00:00:00 2001 From: Denis Rouzaud Date: Tue, 10 Feb 2026 16:03:20 +0100 Subject: [PATCH] add an experimental flag for modules fixes #96 --- oqtopus/core/modules_config.py | 1 + oqtopus/default_config.yaml | 1 + oqtopus/gui/main_dialog.py | 2 + oqtopus/gui/module_selection_widget.py | 51 +++++++++++++++++--------- oqtopus/gui/settings_dialog.py | 6 +++ oqtopus/ui/settings_dialog.ui | 11 +++++- oqtopus/utils/plugin_utils.py | 10 +++++ 7 files changed, 63 insertions(+), 19 deletions(-) diff --git a/oqtopus/core/modules_config.py b/oqtopus/core/modules_config.py index d21b66d..9ce1088 100644 --- a/oqtopus/core/modules_config.py +++ b/oqtopus/core/modules_config.py @@ -7,6 +7,7 @@ class ModuleConfig(BaseModel): organisation: str repository: str exclude_releases: str | None = None # Regexp pattern to exclude releases + experimental: bool = False # Whether this module is experimental class ModulesConfig(BaseModel): diff --git a/oqtopus/default_config.yaml b/oqtopus/default_config.yaml index c834a3d..176acd2 100644 --- a/oqtopus/default_config.yaml +++ b/oqtopus/default_config.yaml @@ -15,6 +15,7 @@ modules: id: tce organisation: teksi repository: cemetery + experimental: true - name: SIGNALO id: signalo diff --git a/oqtopus/gui/main_dialog.py b/oqtopus/gui/main_dialog.py index 5f58f29..737e562 100644 --- a/oqtopus/gui/main_dialog.py +++ b/oqtopus/gui/main_dialog.py @@ -180,6 +180,8 @@ def __open_settings_dialog(self): if dlg.exec() == QDialog.DialogCode.Accepted: # Update column visibility from settings self.__logsWidget.update_column_visibility_from_settings() + # Reload modules in case experimental visibility changed + self.__moduleSelectionWidget.reloadModules() def __cleanup_cache(self): """Delete all cached data (downloaded packages and GitHub API cache).""" diff --git a/oqtopus/gui/module_selection_widget.py b/oqtopus/gui/module_selection_widget.py index daddeeb..4dc5e2c 100644 --- a/oqtopus/gui/module_selection_widget.py +++ b/oqtopus/gui/module_selection_widget.py @@ -43,23 +43,7 @@ def __init__(self, modules_config_path, parent=None): self.module_progressBar.setVisible(False) - self.module_module_comboBox.clear() - self.module_module_comboBox.addItem(self.tr("Please select a module"), None) - if self.__modules_config is not None: - for config_module in self.__modules_config.modules: - module = Module( - name=config_module.name, - id=config_module.id, - organisation=config_module.organisation, - repository=config_module.repository, - exclude_releases=config_module.exclude_releases, - parent=self, - ) - self.module_module_comboBox.addItem(module.name, module) - module.signal_versionsLoaded.connect(self.__loadVersionsFinished) - module.signal_developmentVersionsLoaded.connect( - self.__loadDevelopmentVersionsFinished - ) + self.__populate_module_combobox() self.module_latestVersion_label.setText("") QtUtils.setForegroundColor(self.module_latestVersion_label, PluginUtils.COLOR_GREEN) @@ -80,6 +64,39 @@ def __init__(self, modules_config_path, parent=None): self.__packagePrepareTaskProgress ) + def reloadModules(self): + """Reload the module combobox, e.g. after settings change.""" + self.__populate_module_combobox() + + def __populate_module_combobox(self): + """Populate the module combobox based on config and current settings.""" + self.module_module_comboBox.blockSignals(True) + self.module_module_comboBox.clear() + self.module_module_comboBox.addItem(self.tr("Please select a module"), None) + show_experimental = PluginUtils.get_show_experimental_modules() + if self.__modules_config is not None: + for config_module in self.__modules_config.modules: + if config_module.experimental and not show_experimental: + continue + module = Module( + name=config_module.name, + id=config_module.id, + organisation=config_module.organisation, + repository=config_module.repository, + exclude_releases=config_module.exclude_releases, + parent=self, + ) + display_name = ( + f"{module.name} (experimental)" if config_module.experimental else module.name + ) + self.module_module_comboBox.addItem(display_name, module) + module.signal_versionsLoaded.connect(self.__loadVersionsFinished) + module.signal_developmentVersionsLoaded.connect( + self.__loadDevelopmentVersionsFinished + ) + self.module_module_comboBox.blockSignals(False) + self.module_module_comboBox.setCurrentIndex(0) + def close(self): if self.__packagePrepareTask.isRunning(): # Disconnect signals first to prevent crashes when emitting to destroyed widgets diff --git a/oqtopus/gui/settings_dialog.py b/oqtopus/gui/settings_dialog.py index 4fa5296..e2469b7 100644 --- a/oqtopus/gui/settings_dialog.py +++ b/oqtopus/gui/settings_dialog.py @@ -12,6 +12,9 @@ def __init__(self, parent=None): self.githubToken_lineEdit.setText(PluginUtils.get_github_token()) self.allow_multiple_modules_checkBox.setChecked(PluginUtils.get_allow_multiple_modules()) + self.show_experimental_modules_checkBox.setChecked( + PluginUtils.get_show_experimental_modules() + ) # Load log column visibility settings self.log_show_datetime_checkBox.setChecked(PluginUtils.get_log_show_datetime()) @@ -26,6 +29,9 @@ def __init__(self, parent=None): def accept(self): PluginUtils.set_github_token(self.githubToken_lineEdit.text()) PluginUtils.set_allow_multiple_modules(self.allow_multiple_modules_checkBox.isChecked()) + PluginUtils.set_show_experimental_modules( + self.show_experimental_modules_checkBox.isChecked() + ) PluginUtils.set_log_show_datetime(self.log_show_datetime_checkBox.isChecked()) PluginUtils.set_log_show_level(self.log_show_level_checkBox.isChecked()) PluginUtils.set_log_show_module(self.log_show_module_checkBox.isChecked()) diff --git a/oqtopus/ui/settings_dialog.ui b/oqtopus/ui/settings_dialog.ui index 5202cfd..a68e55d 100644 --- a/oqtopus/ui/settings_dialog.ui +++ b/oqtopus/ui/settings_dialog.ui @@ -52,6 +52,13 @@ + + + Show experimental modules + + + + Log display columns @@ -81,7 +88,7 @@ - + Qt::Vertical @@ -94,7 +101,7 @@ - + Qt::Horizontal diff --git a/oqtopus/utils/plugin_utils.py b/oqtopus/utils/plugin_utils.py index f778907..ed86dce 100644 --- a/oqtopus/utils/plugin_utils.py +++ b/oqtopus/utils/plugin_utils.py @@ -241,6 +241,16 @@ def set_allow_multiple_modules(allow: bool): settings = QSettings() settings.setValue("oqtopus/allow_multiple_modules", allow) + @staticmethod + def get_show_experimental_modules(): + settings = QSettings() + return settings.value("oqtopus/show_experimental_modules", False, type=bool) + + @staticmethod + def set_show_experimental_modules(show: bool): + settings = QSettings() + settings.setValue("oqtopus/show_experimental_modules", show) + @staticmethod def get_log_show_datetime(): settings = QSettings()