diff --git a/papers/configs.py b/papers/configs.py index 4f7c176..08b9481 100644 --- a/papers/configs.py +++ b/papers/configs.py @@ -18,33 +18,33 @@ DFT_IMPORT_MOVE = 'no' DFT_COLOR = 'yes' DFT_PLUGINS = 'texnote' -DFT_CONFIG = configparser.SafeConfigParser({ - 'papers_dir' : DFT_PAPERS_DIR, - 'open_cmd' : DFT_OPEN_CMD, - 'edit_cmd' : DFT_EDIT_CMD, - 'import_copy' : DFT_IMPORT_COPY, - 'import_move' : DFT_IMPORT_MOVE, - 'color' : DFT_COLOR, - 'plugins' : DFT_PLUGINS - }) +DFT_CONFIG = {'papers_dir' : DFT_PAPERS_DIR, + 'open_cmd' : DFT_OPEN_CMD, + 'edit_cmd' : DFT_EDIT_CMD, + 'import_copy' : DFT_IMPORT_COPY, + 'import_move' : DFT_IMPORT_MOVE, + 'color' : DFT_COLOR, + 'plugins' : DFT_PLUGINS + } BOOLEANS = {'import-copy', 'import-move', 'color'} -DFT_CONFIG.add_section(MAIN_SECTION) - # package-shared config that can be accessed using : # from configs import config -config = None +_config = None +def config(): + return _config class Config(object): def __init__(self): - object.__setattr__(self, '_cfg', copy.copy(DFT_CONFIG)) + object.__setattr__(self, '_cfg', configparser.SafeConfigParser(DFT_CONFIG)) + self._cfg.add_section(MAIN_SECTION) def as_global(self): - global config - config = self + global _config + _config = self def load(self, path = DFT_CONFIG_PATH): self._cfg.read(path) diff --git a/tests/test_config.py b/tests/test_config.py index c0b7cef..17baf82 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -3,28 +3,42 @@ import unittest import testenv from papers import configs +from papers.configs import config class TestConfig(unittest.TestCase): def test_create_config(self): a = configs.Config() a.as_global() - from papers.configs import config - self.assertEqual(a, config) + self.assertEqual(a, config()) def test_config_content(self): a = configs.Config() a.as_global() - from papers.configs import config - self.assertEqual(config.papers_dir, configs.DFT_PAPERS_DIR) - self.assertEqual(config.color, configs.str2bool(configs.DFT_COLOR)) + self.assertEqual(config().papers_dir, configs.DFT_PAPERS_DIR) + self.assertEqual(config().color, configs.str2bool(configs.DFT_COLOR)) def test_set(self): a = configs.Config() a.as_global() from papers.configs import config - config.color = 'no' - self.assertEqual(config.color, False) + config().color = 'no' + self.assertEqual(config().color, False) # booleans type for new variables are memorized, but not saved. - config.bla = True - self.assertEqual(config.bla, True) + config().bla = True + self.assertEqual(config().bla, True) + + def test_reload(self): + from papers.configs import config + + a = configs.Config() + a.as_global() + a.color = False + a.bla = 'foo' + config.color = not configs.str2bool(configs.DFT_COLOR) + self.assertEqual(config().color, not configs.str2bool(configs.DFT_COLOR)) + + b = configs.Config() + b.as_global() + self.assertEqual(b, config()) + self.assertEqual(config().color, configs.str2bool(configs.DFT_COLOR))