diff --git a/keymapper/config.py b/keymapper/config.py index 3e31153c..2ca73bae 100644 --- a/keymapper/config.py +++ b/keymapper/config.py @@ -85,7 +85,7 @@ class ConfigBase: config : dict The dictionary to search. Defaults to self._config. """ - chunks = path.split('.') + chunks = path.copy() if isinstance(path, list) else path.split('.') if config is None: child = self._config @@ -110,7 +110,7 @@ class ConfigBase: Parameters ---------- - path : string + path : string or string[] For example 'macros.keystroke_sleep_ms' """ def callback(parent, child, chunk): @@ -124,8 +124,9 @@ class ConfigBase: Parameters ---------- - path : string + path : string or string[] For example 'macros.keystroke_sleep_ms' + or ['macros', 'keystroke_sleep_ms'] value : any """ logger.debug( @@ -197,13 +198,13 @@ class GlobalConfig(ConfigBase): if None, don't autoload something for this device. """ if preset is not None: - self.set(f'autoload.{device}', preset) + self.set(['autoload', device], preset) else: logger.info( 'Not loading injecting for "%s" automatically anmore', device ) - self.remove(f'autoload.{device}') + self.remove(['autoload', device]) def iterate_autoload_presets(self): """Get tuples of (device, preset).""" @@ -211,7 +212,7 @@ class GlobalConfig(ConfigBase): def is_autoloaded(self, device, preset): """Should this preset be loaded automatically?""" - return self.get(f'autoload.{device}', log_unknown=False) == preset + return self.get(['autoload', device], log_unknown=False) == preset def load_config(self): """Load the config from the file system.""" diff --git a/tests/testcases/test_config.py b/tests/testcases/test_config.py index c7c1d32a..3b70b2cb 100644 --- a/tests/testcases/test_config.py +++ b/tests/testcases/test_config.py @@ -86,36 +86,42 @@ class TestConfig(unittest.TestCase): def test_autoload(self): self.assertEqual(len(config.iterate_autoload_presets()), 0) self.assertFalse(config.is_autoloaded('d1', 'a')) - self.assertFalse(config.is_autoloaded('d2', 'b')) + self.assertFalse(config.is_autoloaded('d2.foo', 'b')) + self.assertEqual(config.get(['autoload', 'd1']), None) + self.assertEqual(config.get(['autoload', 'd2.foo']), None) config.set_autoload_preset('d1', 'a') self.assertEqual(len(config.iterate_autoload_presets()), 1) self.assertTrue(config.is_autoloaded('d1', 'a')) - self.assertFalse(config.is_autoloaded('d2', 'b')) + self.assertFalse(config.is_autoloaded('d2.foo', 'b')) - config.set_autoload_preset('d2', 'b') + config.set_autoload_preset('d2.foo', 'b') self.assertEqual(len(config.iterate_autoload_presets()), 2) self.assertTrue(config.is_autoloaded('d1', 'a')) - self.assertTrue(config.is_autoloaded('d2', 'b')) + self.assertTrue(config.is_autoloaded('d2.foo', 'b')) + self.assertEqual(config.get(['autoload', 'd1']), 'a') + self.assertEqual(config.get(['autoload', 'd2.foo']), 'b') - config.set_autoload_preset('d2', 'c') + config.set_autoload_preset('d2.foo', 'c') self.assertEqual(len(config.iterate_autoload_presets()), 2) self.assertTrue(config.is_autoloaded('d1', 'a')) - self.assertFalse(config.is_autoloaded('d2', 'b')) - self.assertTrue(config.is_autoloaded('d2', 'c')) + self.assertFalse(config.is_autoloaded('d2.foo', 'b')) + self.assertTrue(config.is_autoloaded('d2.foo', 'c')) + self.assertEqual(config._config['autoload']['d2.foo'], 'c') self.assertListEqual( list(config.iterate_autoload_presets()), - [('d1', 'a'), ('d2', 'c')] + [('d1', 'a'), ('d2.foo', 'c')] ) - config.set_autoload_preset('d2', None) + config.set_autoload_preset('d2.foo', None) self.assertTrue(config.is_autoloaded('d1', 'a')) - self.assertFalse(config.is_autoloaded('d2', 'b')) - self.assertFalse(config.is_autoloaded('d2', 'c')) + self.assertFalse(config.is_autoloaded('d2.foo', 'b')) + self.assertFalse(config.is_autoloaded('d2.foo', 'c')) self.assertListEqual( list(config.iterate_autoload_presets()), [('d1', 'a')] ) + self.assertEqual(config.get(['autoload', 'd1']), 'a') def test_initial(self): # when loading for the first time, create a config file with @@ -136,7 +142,7 @@ class TestConfig(unittest.TestCase): self.assertEqual(len(config.iterate_autoload_presets()), 0) config.set_autoload_preset('d1', 'a') - config.set_autoload_preset('d2', 'b') + config.set_autoload_preset('d2.foo', 'b') config.save_config() # ignored after load @@ -145,7 +151,7 @@ class TestConfig(unittest.TestCase): config.load_config() self.assertListEqual( list(config.iterate_autoload_presets()), - [('d1', 'a'), ('d2', 'b')] + [('d1', 'a'), ('d2.foo', 'b')] )