changeset 441:9d20fab53a19

FIX: Handle "list"-type keys in __contains__ and __getitem__ properly: convert to tuples for contatenation with tuple
author Franz Glasner <fzglas.hg@dom66.de>
date Fri, 10 Dec 2021 02:20:54 +0100
parents f297c23f78f0
children 94cf5a8722d6
files configmix/config.py tests/test.py
diffstat 2 files changed, 18 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/configmix/config.py	Fri Dec 10 02:18:16 2021 +0100
+++ b/configmix/config.py	Fri Dec 10 02:20:54 2021 +0100
@@ -834,14 +834,18 @@
         """Mapping interface that forwards to :meth:`~.getvarl_s`
 
         """
-        if isinstance(key, (tuple, list)):
+        if isinstance(key, tuple):
             return self._base.getvarl_s(*(self._path + key))
+        elif isinstance(key, list):
+            return self._base.getvarl_s(*(self._path + tuple(key)))
         else:
             return self._base.getvarl_s(*(self._path + (key, )))
 
     def __contains__(self, key):
-        if isinstance(key, (tuple, list)):
+        if isinstance(key, tuple):
             return (self._path + key) in self._base
+        elif isinstance(key, list):
+            return (self._path + tuple(key)) in self._base
         else:
             return (self._path + (key, )) in self._base
 
--- a/tests/test.py	Fri Dec 10 02:18:16 2021 +0100
+++ b/tests/test.py	Fri Dec 10 02:20:54 2021 +0100
@@ -1588,12 +1588,21 @@
         self.assertEqual(
             u"get this as `tree1.tree2.key4'",
             jcfg[(u"key4",)])
+        self.assertEqual(
+            u"get this as `tree1.tree2.key4'",
+            jcfg[[u"key4"]])
         try:
             jcfg[(u"key3",)]
         except KeyError:
             pass
         else:
             self.fail("KeyError expected")
+        try:
+            jcfg[[u"key3"]]
+        except KeyError:
+            pass
+        else:
+            self.fail("KeyError expected")
 
     def test_contains_with_string(self):
         cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py"))
@@ -1612,6 +1621,9 @@
         self.assertTrue((u"tree2", u"key5") in jcfg)
         self.assertFalse((u"tree2", u"no-key") in jcfg)
 
+        self.assertTrue([u"tree2", u"key5"] in jcfg)
+        self.assertFalse([u"tree2", u"no-key"] in jcfg)
+
 
 if __name__ == "__main__":
     unittest.main()