diff --git a/GTG/backends/__init__.py b/GTG/backends/__init__.py index fe84cb3ad..fce63546a 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 bb5970284..d876af84f 100644 --- a/GTG/core/config.py +++ b/GTG/core/config.py @@ -181,10 +181,14 @@ def save(self): self._save_function() -class CoreConfig(): +class CoreConfig_(): """ Class holding configuration to all systems and tasks """ + _instance = None + def __init__(self): + assert self._instance is None + self._conf_path = os.path.join(CONFIG_DIR, 'gtg.conf') self._conf = open_config_file(self._conf_path) @@ -194,6 +198,11 @@ def __init__(self): self._backends_conf_path = os.path.join(CONFIG_DIR, 'backends.conf') self._backends_conf = open_config_file(self._backends_conf_path) + @classmethod + def get_instance(cls): + cls._instance = cls._instance or cls() + return cls._instance + def save_gtg_config(self): self._conf.write(open(self._conf_path, 'w')) @@ -220,15 +229,27 @@ 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) + +def CoreConfig(): + return CoreConfig_.get_instance()