# HG changeset patch # User Franz Glasner # Date 1639554517 -3600 # Node ID 9dc9cef1b9cd37b94f1875fa100d88be2e132f20 # Parent a68240971d3d0bb2151cb06285df066db17be82b Implement proper iteration support for jailed configurations diff -r a68240971d3d -r 9dc9cef1b9cd configmix/config.py --- a/configmix/config.py Wed Dec 15 01:01:07 2021 +0100 +++ b/configmix/config.py Wed Dec 15 08:48:37 2021 +0100 @@ -940,6 +940,9 @@ real_varnames = [self._pathstr + vn for vn in varnames] return self._base.getfirstvar_s(*real_varnames, **kwds) + def __iter__(self): + return iter(self._base.getvarl_s(*self._path)) + def jailed(self, rootpath=None, root=None, bind_root=True): """Return a "jailed" configuration that effectively is a subjail of the current jail diff -r a68240971d3d -r 9dc9cef1b9cd tests/data/conf10.py --- a/tests/data/conf10.py Wed Dec 15 01:01:07 2021 +0100 +++ b/tests/data/conf10.py Wed Dec 15 08:48:37 2021 +0100 @@ -9,7 +9,12 @@ 'tree2': { 'key4': u"get this as `tree1.tree2.key4'", 'key5': True, - 'key6': u"off" + 'key6': u"off", + 'key7': [], + 'key8': [ + u"val1", + u"val2", + u"{{key1}}" + ] } } - diff -r a68240971d3d -r 9dc9cef1b9cd tests/test.py --- a/tests/test.py Wed Dec 15 01:01:07 2021 +0100 +++ b/tests/test.py Wed Dec 15 08:48:37 2021 +0100 @@ -1553,11 +1553,11 @@ jcfg = cfg.jailed(root=u"tree1") self.assertEqual( - set([u"key4", u"key5", u"key6"]), + set([u"key4", u"key5", u"key6", u"key7", u"key8"]), set(jcfg.getkeysl(u"tree2"))) self.assertEqual( - set([u"key4", u"key5", u"key6"]), + set([u"key4", u"key5", u"key6", u"key7", u"key8"]), set(jcfg.getkeys(u"tree2"))) self.assertEqual( @@ -1716,6 +1716,24 @@ else: self.fail("AttributeError expected") + def test_iteration_dict(self): + cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py")) + jcfg = cfg.jailed(rootpath=(u"tree1",)) + s = [] + for k in jcfg: + s.append(k) + s.sort() + self.assertEqual([u"key3", u"tree2"], s) + + def test_iteration_list(self): + cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py")) + jcfg = cfg.jailed(rootpath=(u"tree1", u"tree2", u"key8")) + s = [] + for k in jcfg: + s.append(k) + s.sort() + self.assertEqual([u"in the root namespace", u"val1", u"val2"], s) + if __name__ == "__main__": unittest.main()