Mercurial > hgrepos > Python > libs > ConfigMix
changeset 442:94cf5a8722d6
Add proper .get() support for jailed and unjailed configurations
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Fri, 10 Dec 2021 03:00:11 +0100 |
| parents | 9d20fab53a19 |
| children | 23941c014130 |
| files | configmix/config.py tests/test.py |
| diffstat | 2 files changed, 73 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/configmix/config.py Fri Dec 10 02:20:54 2021 +0100 +++ b/configmix/config.py Fri Dec 10 03:00:11 2021 +0100 @@ -247,6 +247,15 @@ else: return self.getvarl_s(key) + def get(self, key, default=None): + """Mapping interface that forwards to :meth:`~.getvarl_s` + + """ + if isinstance(key, (tuple, list)): + return self.getvarl_s(*key, default=default) + else: + return self.getvarl_s(key, default=default) + def __contains__(self, key): if isinstance(key, (tuple, list)): # No namespace and quoting support here @@ -841,6 +850,14 @@ else: return self._base.getvarl_s(*(self._path + (key, ))) + def get(self, key, default=None): + if isinstance(key, tuple): + return self._base.get(self._path + key, default=default) + elif isinstance(key, list): + return self._base.get(self._path + tuple(key), default=default) + else: + return self._base.get(self._path + (key, ), default=default) + def __contains__(self, key): if isinstance(key, tuple): return (self._path + key) in self._base
--- a/tests/test.py Fri Dec 10 02:20:54 2021 +0100 +++ b/tests/test.py Fri Dec 10 03:00:11 2021 +0100 @@ -794,6 +794,23 @@ self.assertTrue((u"tree1", u"tree2") in cfg) self.assertFalse((u"tree1", u"non-existing-tree2") in cfg) + def test43_get_with_string(self): + cfg = self._load(os.path.join(TESTDATADIR, "conf10.py")) + self.assertEqual( + u"in the root namespace", + cfg.get(u"key1")) + self.assertTrue( + cfg.get(u"key1-not", default=None) is None) + + def test43_get_with_path(self): + cfg = self._load(os.path.join(TESTDATADIR, "conf10.py")) + self.assertEqual( + 0x20, + cfg.get((u"tree1", u"key3"))) + self.assertEqual( + 0x1, + cfg.get((u"no", u"key"), default=0x1)) + class T02LoadAndMerge(_T02MixinLoadAndMerge, unittest.TestCase): @@ -1624,6 +1641,45 @@ self.assertTrue([u"tree2", u"key5"] in jcfg) self.assertFalse([u"tree2", u"no-key"] in jcfg) + def test_get_with_string(self): + cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py")) + jcfg = cfg.jailed(rootpath=(u"tree1",)) + + self.assertEqual( + 0x20, + jcfg.get(u"key3")) + self.assertEqual( + 0x2, + jcfg.get(u"no-key3", default=0x2)) + + def test_get_with_path(self): + cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py")) + jcfg = cfg.jailed(rootpath=(u"tree1",)) + + self.assertEqual( + 0x20, + jcfg.get((u"key3",))) + self.assertEqual( + 0x3, + jcfg.get((u"no-key",), default=0x3)) + self.assertEqual( + u"off", + jcfg.get((u"tree2", u"key6"))) + self.assertEqual( + u"the default", + jcfg.get((u"no", u"key"), default=u"the default")) + self.assertTrue( + jcfg.get((u"no", u"key")) is None) + + self.assertEqual( + u"off", + jcfg.get([u"tree2", u"key6"])) + self.assertEqual( + u"the default", + jcfg.get([u"no", u"key"], default=u"the default")) + self.assertTrue( + jcfg.get([u"no", u"key"]) is None) + if __name__ == "__main__": unittest.main()
