diff options
Diffstat (limited to 'fg21sim')
-rw-r--r-- | fg21sim/configs/manager.py | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/fg21sim/configs/manager.py b/fg21sim/configs/manager.py index 70c32b5..eb6b1d0 100644 --- a/fg21sim/configs/manager.py +++ b/fg21sim/configs/manager.py @@ -17,6 +17,7 @@ import operator from functools import reduce from collections import MutableMapping import pkg_resources +import copy from configobj import ConfigObj, ConfigObjError, flatten_errors from validate import Validator @@ -144,13 +145,12 @@ class ConfigManager: configspec = _get_configspec() self._configspec = ConfigObj(configspec, interpolation=False, list_values=False, _inspec=True) - # FIXME/NOTE: The comments are LOST! configs_default = ConfigObj(interpolation=False, configspec=self._configspec) # Keep a copy of the default configurations self._config_default = self._validate(configs_default) - # NOTE: `_config_default.copy()` only returns a *shallow* copy. - self._config = ConfigObj(self._config_default, interpolation=False) + # NOTE: use ``copy.deepcopy``; see ``self.reset()`` for more details + self._config = copy.deepcopy(self._config_default) if userconfig: self.read_userconfig(userconfig) @@ -226,8 +226,10 @@ class ConfigManager: NOTE: Also reset ``self.userconfig`` to ``None``. """ - # NOTE: `_config_default.copy()` only returns a *shallow* copy. - self._config = ConfigObj(self._config_default, interpolation=False) + # NOTE: + # * ``_config_default.copy()`` only returns a *shallow* copy. + # * ``ConfigObj(_config_default)`` will lost all comments + self._config = copy.deepcopy(self._config_default) self.userconfig = None logger.warning("Reset the configurations to the copy of defaults!") @@ -238,7 +240,11 @@ class ConfigManager: """ validator = Validator() try: - results = config.validate(validator, preserve_errors=True) + # NOTE: + # Use the "copy" mode, which will copy both the default values + # and all the comments. + results = config.validate(validator, preserve_errors=True, + copy=True) except ConfigObjError as e: raise ConfigError(e) if results is not True: |