Mercurial > hgrepos > Python > libs > ConfigMix
changeset 398:b1f82b853290
Jailed configuration: implement more methods: getfirstvarl, getfirstvarl_s, getfirstvar and getfirstvar_s
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Fri, 19 Nov 2021 01:39:18 +0100 |
| parents | 88239f28415c |
| children | b45403d175a0 |
| files | configmix/config.py tests/test.py |
| diffstat | 2 files changed, 141 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/configmix/config.py Thu Nov 18 22:29:05 2021 +0100 +++ b/configmix/config.py Fri Nov 19 01:39:18 2021 +0100 @@ -707,11 +707,43 @@ def getvarl(self, *path, **kwds): return self._base.getvarl(*(self._path + path), **kwds) + def getfirstvarl(self, *paths, **kwds): + real_paths = [] + for path in paths: + if isinstance(path, (list, tuple)): + real_paths.append(self._path + path) + elif isinstance(path, dict): + raise TypeError( + "a `dict' is not supported in a jailed configuration") + else: + raise TypeError("a paths item must be a list or tuple") + return self._base.getfirstvarl(*real_paths, **kwds) + def getvarl_s(self, *path, **kwds): return self._base.getvarl_s(*(self._path + path), **kwds) + def getfirstvarl_s(self, *paths, **kwds): + real_paths = [] + for path in paths: + if isinstance(path, (list, tuple)): + real_paths.append(self._path + path) + elif isinstance(path, dict): + raise TypeError( + "a `dict' is not supported in a jailed configuration") + else: + raise TypeError("a paths item must be a list or tuple") + return self._base.getfirstvarl_s(*real_paths, **kwds) + def getvar(self, varname, default=_MARKER): return self._base.getvar(self._pathstr + varname, default=default) + def getfirstvar(self, *varnames, **kwds): + real_varnames = [self._pathstr + vn for vn in varnames] + return self._base.getfirstvar(*real_varnames, **kwds) + def getvar_s(self, varname, default=_MARKER): return self._base.getvar_s(self._pathstr + varname, default=default) + + def getfirstvar_s(self, *varnames, **kwds): + real_varnames = [self._pathstr + vn for vn in varnames] + return self._base.getfirstvar_s(*real_varnames, **kwds)
--- a/tests/test.py Thu Nov 18 22:29:05 2021 +0100 +++ b/tests/test.py Fri Nov 19 01:39:18 2021 +0100 @@ -1271,6 +1271,115 @@ u"get this as `tree1.tree2.key4'", jcfg.getvar_s(u"tree1.tree2.key4")) + def test_rootpath_getfirstvar_nonexisting(self): + cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py")) + jcfg = cfg.jailed(rootpath=(u"tree1",)) + + self.assertIsNone(jcfg.getfirstvarl( + *[(u"a", u"b"), + (u"tree2", u"no-key")], + default=None)) + self.assertIsNone(jcfg.getfirstvarl_s( + *[(u"a", u"b"), + (u"tree2", u"no-key")], + default=None)) + self.assertIsNone(jcfg.getfirstvar( + u"a.b", u"tree2.no-key", + default=None)) + self.assertIsNone(jcfg.getfirstvar_s( + u"a.b", u"tree2.no-key", + default=None)) + + def test_rootpath_getfirstvar_raising(self): + cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py")) + jcfg = cfg.jailed(rootpath=(u"tree1",)) + + self.assertRaises( + KeyError, + jcfg.getfirstvarl, + (u"a", u"b"), + (u"tree2", u"no-key")) + self.assertRaises( + KeyError, + jcfg.getfirstvarl_s, + (u"a", u"b"), + (u"tree2", u"no-key")) + self.assertRaises( + KeyError, + jcfg.getfirstvar, + u"a.b", u"tree2.no-key") + self.assertRaises( + KeyError, + jcfg.getfirstvar_s, + u"a.b", u"tree2.no-key") + + def test_rootpath_getfirstvar_existing(self): + cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py")) + jcfg = cfg.jailed(rootpath=(u"tree1",)) + + self.assertEqual( + u"get this as `tree1.tree2.key4'", + jcfg.getfirstvarl( + *[(u"a", u"b"), + (u"tree2", u"key4")])) + self.assertEqual( + 0x20, + jcfg.getfirstvarl_s( + *[(u"a", u"b"), + (u"key3", ), + (u"tree2", u"key4")])) + self.assertEqual( + 0x20, + jcfg.getfirstvar( + u"key1", u"key3")) + self.assertEqual( + u"get this as `tree1.tree2.key4'", + jcfg.getfirstvar_s( + u"a.b", u"tree2.key4", u"tree2.key5")) + + def test_root_getfirstvar_nonexisting(self): + cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py")) + jcfg = cfg.jailed(root=u"tree1") + + self.assertIsNone(jcfg.getfirstvarl( + *[(u"a", u"b"), + (u"tree2", u"no-key")], + default=None)) + self.assertIsNone(jcfg.getfirstvarl_s( + *[(u"a", u"b"), + (u"tree2", u"no-key")], + default=None)) + self.assertIsNone(jcfg.getfirstvarl_s( + *[(u"a", u"b"), + (u"tree2", u"no-key")], + default=None)) + self.assertIsNone(jcfg.getfirstvar_s( + u"a.b", u"tree2.no-key", + default=None)) + + def test_root_getfirstvar_raising(self): + cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py")) + jcfg = cfg.jailed(root=u"tree1") + + self.assertRaises( + KeyError, + jcfg.getfirstvarl, + (u"a", u"b"), + (u"tree2", u"no-key")) + self.assertRaises( + KeyError, + jcfg.getfirstvarl_s, + (u"a", u"b"), + (u"tree2", u"no-key")) + self.assertRaises( + KeyError, + jcfg.getfirstvar, + u"a.b", u"tree2.no-key") + self.assertRaises( + KeyError, + jcfg.getfirstvar_s, + u"a.b", u"tree2.no-key") + if __name__ == "__main__": unittest.main()
