From f56a620aec5ea602511f4754a738fed347deb308 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit-Claudel?= Date: Mon, 19 Sep 2022 00:17:03 -0700 Subject: [PATCH] Index backends by id, not by name This allows GTG to have multiple backends of one kind at the same time. * GTG/backends/__init__.py (BackendFactory.get_saved_backends_list): Rename `backend` to `backend_id` for clarity. Call `config.rename_backend_section` on each backend for compatibility with previous versions of GTG. * GTG/core/config.py (CoreConfig_.rename_backend_section): New function to rename a config section (from backend name to backend ID). (CoreConfig_.get_all_backends): Rename `backend` to `backend_id` for clarity. Fixes #930. --- GTG/backends/__init__.py | 10 +++++++--- GTG/core/config.py | 19 ++++++++++++++----- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/GTG/backends/__init__.py b/GTG/backends/__init__.py index fe84cb3adb..fce63546a4 100644 --- a/GTG/backends/__init__.py +++ b/GTG/backends/__init__.py @@ -138,8 +138,8 @@ def get_saved_backends_list(self): config = CoreConfig() backends = [] - for backend in config.get_all_backends(): - settings = config.get_backend_config(backend) + for backend_id in config.get_all_backends(): + settings = config.get_backend_config(backend_id) module = self.get_backend(settings.get('module')) # Skip this backend if it doesn't have a module @@ -167,7 +167,11 @@ def get_saved_backends_list(self): # Parameter not found in config pass - backend_data['backend'] = module.Backend(backend_data) + backend = backend_data['backend'] = module.Backend(backend_data) + + # Rename configuration sections created by older versions of GTG + config.rename_backend_section(backend.get_name(), backend.get_id()) + backends.append(backend_data) return backends diff --git a/GTG/core/config.py b/GTG/core/config.py index 0e4e2cc201..d876af84fc 100644 --- a/GTG/core/config.py +++ b/GTG/core/config.py @@ -229,16 +229,25 @@ def get_task_config(self, task_id): DEFAULTS['task'], self.save_task_config) + def rename_backend_section(self, backend_name, backend_id): + """Rename section `backend_name` to `backend_id` if it exists.""" + if backend_name in self._backends_conf: + assert backend_id not in self._backends_conf + self._backends_conf.add_section(backend_id) + for (k, v) in self._backends_conf[backend_name].items(): + self._backends_conf.set(backend_id, k, v) + self._backends_conf.remove_section(backend_name) + def get_all_backends(self): return self._backends_conf.sections() - def get_backend_config(self, backend): - if backend not in self._backends_conf: - self._backends_conf.add_section(backend) + def get_backend_config(self, backend_id): + if backend_id not in self._backends_conf: + self._backends_conf.add_section(backend_id) return SectionConfig( - f'Backend {backend}', - self._backends_conf[backend], + f'Backend {backend_id}', + self._backends_conf[backend_id], DEFAULTS['backend'], self.save_backends_config)