Mercurial > hgrepos > Python > libs > ConfigMix
changeset 439:bd27da55483a
Optimized __contains__() implementation for jailed and unjailed configurations
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Fri, 10 Dec 2021 02:15:00 +0100 |
| parents | 37424d1f8dcf |
| children | f297c23f78f0 |
| files | CHANGES.txt configmix/config.py tests/test.py |
| diffstat | 3 files changed, 49 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/CHANGES.txt Fri Dec 10 01:44:12 2021 +0100 +++ b/CHANGES.txt Fri Dec 10 02:15:00 2021 +0100 @@ -22,6 +22,10 @@ - **[feature]** Simple dict-level access for jailed configuration +- **[feature]** + Optimized "__contains__()" implementation for jailed and unjailed + configurations + 0.18.1 (2021-12-10) ~~~~~~~~~~~~~~~~~~~
--- a/configmix/config.py Fri Dec 10 01:44:12 2021 +0100 +++ b/configmix/config.py Fri Dec 10 02:15:00 2021 +0100 @@ -247,6 +247,18 @@ else: return self.getvarl_s(key) + def __contains__(self, key): + if isinstance(key, (tuple, list)): + # No namespace and quoting support here + try: + self._lookupvar(*key) + except KeyError: + return False + else: + return True + else: + return super(Configuration, self).__contains__(key) + def getvarl(self, *path, **kwds): """Get a variable where the hierarchy is given in `path` as sequence and the namespace is given in the `namespace` keyword argument. @@ -827,6 +839,12 @@ else: return self.getvarl_s(key) + def __contains__(self, key): + if isinstance(key, (tuple, list)): + return (self._path + key) in self._base + else: + return (self._path + (key, )) in self._base + def getvarl(self, *path, **kwds): return self._base.getvarl(*(self._path + path), **kwds)
--- a/tests/test.py Fri Dec 10 01:44:12 2021 +0100 +++ b/tests/test.py Fri Dec 10 02:15:00 2021 +0100 @@ -784,6 +784,16 @@ set([u"key1", u"key2", u"tree1"]), set(cfg.getkeysl())) + def test40_contains_with_string(self): + cfg = self._load(os.path.join(TESTDATADIR, "conf10.py")) + self.assertTrue(u"tree1" in cfg) + self.assertFalse(u"non-existing-tree1" in cfg) + + def test41_contains_with_path(self): + cfg = self._load(os.path.join(TESTDATADIR, "conf10.py")) + self.assertTrue((u"tree1", u"tree2") in cfg) + self.assertFalse((u"tree1", u"non-existing-tree2") in cfg) + class T02LoadAndMerge(_T02MixinLoadAndMerge, unittest.TestCase): @@ -1585,6 +1595,23 @@ else: self.fail("KeyError expected") + def test_contains_with_string(self): + cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py")) + jcfg = cfg.jailed(rootpath=(u"tree1",)) + + self.assertTrue(u"key3" in jcfg) + self.assertFalse(u"key3-not" in jcfg) + + def test_contains_with_path(self): + cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py")) + jcfg = cfg.jailed(rootpath=(u"tree1",)) + + self.assertTrue((u"key3",) in jcfg) + self.assertFalse((u"key3-not",) in jcfg) + + self.assertTrue((u"tree2", u"key5") in jcfg) + self.assertFalse((u"tree2", u"no-key") in jcfg) + if __name__ == "__main__": unittest.main()
