# HG changeset patch # User Franz Glasner # Date 1638433342 -3600 # Node ID 079a82129110db655cb7bade8cc3639706531d60 # Parent bb5f11abd12a7872e3e00a5d8734d09ccdee5c18 Allow the empty variable name to retrieve the root configuration object diff -r bb5f11abd12a -r 079a82129110 CHANGES.txt --- 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 diff -r bb5f11abd12a -r 079a82129110 configmix/config.py --- 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:]: diff -r bb5f11abd12a -r 079a82129110 tests/test.py --- 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()