Mercurial > hgrepos > Python > libs > ConfigMix
changeset 419:079a82129110
Allow the empty variable name to retrieve the root configuration object
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Thu, 02 Dec 2021 09:22:22 +0100 |
| parents | bb5f11abd12a |
| children | 212a27cb0fc4 |
| files | CHANGES.txt configmix/config.py tests/test.py |
| diffstat | 3 files changed, 44 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/CHANGES.txt Thu Dec 02 01:24:53 2021 +0100 +++ b/CHANGES.txt Thu Dec 02 09:22:22 2021 +0100 @@ -16,8 +16,10 @@ ~~~ - **[feature]** + Allow empty variable names in some cases to get the root object of a + configuration. +- **[feature]** Allow to get sub-jails from an already jailed configuration. - - **[feature]** Implement :meth:`~configmix.config.Configuration.getkeysl` and :meth:`~configmix.config.Configuration.getkeys` that return generators
--- a/configmix/config.py Thu Dec 02 01:24:53 2021 +0100 +++ b/configmix/config.py Thu Dec 02 09:22:22 2021 +0100 @@ -343,9 +343,13 @@ """ varns, varname = self._split_ns(varname) if not varns: - varnameparts = [ - self.unquote(vp) for vp in varname.split(self._HIER_SEPARATOR) - ] + if varname: + varnameparts = [ + self.unquote(vp) + for vp in varname.split(self._HIER_SEPARATOR) + ] + else: + varnameparts = tuple() else: varnameparts = (varname,) return self.getvarl(*varnameparts, namespace=varns, default=default) @@ -506,6 +510,8 @@ else `default` is returned. """ default = kwds.pop("default", _MARKER) + if not path: + return self try: v = self.expand_if_reference(self[path[0]]) for p in path[1:]:
--- a/tests/test.py Thu Dec 02 01:24:53 2021 +0100 +++ b/tests/test.py Thu Dec 02 09:22:22 2021 +0100 @@ -764,6 +764,26 @@ set([u"name", u"pwd"]), set(cfg.getkeys(u"db.user"))) + def test37_get_root_object(self): + cfg = self._load(os.path.join(TESTDATADIR, "conf20.yml")) + self.assertTrue(cfg.getvarl() is cfg) + + def test38_get_root_object(self): + cfg = self._load(os.path.join(TESTDATADIR, "conf20.yml")) + self.assertTrue(cfg.getvar(u"") is cfg) + + def test39_get_root_keys(self): + cfg = self._load(os.path.join(TESTDATADIR, "conf10.py")) + self.assertEqual( + set([u"key1", u"key2", u"tree1"]), + set(cfg.getkeys(u""))) + + def test39b_get_root_keys(self): + cfg = self._load(os.path.join(TESTDATADIR, "conf10.py")) + self.assertEqual( + set([u"key1", u"key2", u"tree1"]), + set(cfg.getkeysl())) + class T02LoadAndMerge(_T02MixinLoadAndMerge, unittest.TestCase): @@ -1499,6 +1519,18 @@ set([u"key3", u"tree2"]), set(jcfg.getkeysl())) + def test_getkeys_all_empty_paths(self): + cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py")) + jcfg = cfg.jailed(rootpath=tuple()) + + self.assertEqual( + set([u"key1", u"key2", u"tree1"]), + set(jcfg.getkeysl())) + + self.assertEqual( + set([u"key1", u"key2", u"tree1"]), + set(jcfg.getkeys(u""))) + if __name__ == "__main__": unittest.main()
