changeset 467:9fcdc42a0457

len-support for jailed configurations: implement a proper __len__() method
author Franz Glasner <fzglas.hg@dom66.de>
date Wed, 15 Dec 2021 22:59:05 +0100
parents 32e228696a63
children 95df1a10259a
files configmix/config.py docs/apidoc.rst tests/test.py
diffstat 3 files changed, 8 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/configmix/config.py	Wed Dec 15 09:34:16 2021 +0100
+++ b/configmix/config.py	Wed Dec 15 22:59:05 2021 +0100
@@ -943,6 +943,9 @@
     def __iter__(self):
         return iter(self._base.getvarl_s(*self._path))
 
+    def __len__(self):
+        return len(self._base.getvarl(*self._path))
+
     if PY2:
 
         def __nonzero__(self):
--- a/docs/apidoc.rst	Wed Dec 15 09:34:16 2021 +0100
+++ b/docs/apidoc.rst	Wed Dec 15 22:59:05 2021 +0100
@@ -33,7 +33,7 @@
    .. autoclass:: _JailedConfiguration
       :members:
       :undoc-members:
-      :special-members: __getitem__, __getattr__, __bool__, __iter__
+      :special-members: __getitem__, __getattr__, __len__, __bool__, __iter__
 
 
 Module :mod:`configmix.constants`
--- a/tests/test.py	Wed Dec 15 09:34:16 2021 +0100
+++ b/tests/test.py	Wed Dec 15 22:59:05 2021 +0100
@@ -1738,21 +1738,25 @@
         cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py"))
         jcfg = cfg.jailed(rootpath=(u"tree1", u"tree2", u"key7"))
         self.assertFalse(jcfg)
+        self.assertEqual(0, len(jcfg))
 
     def test_boolean_context_list_true(self):
         cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py"))
         jcfg = cfg.jailed(rootpath=(u"tree1", u"tree2", u"key8"))
         self.assertTrue(jcfg)
+        self.assertEqual(3, len(jcfg))
 
     def test_boolean_context_dict_false(self):
         cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py"))
         jcfg = cfg.jailed(rootpath=(u"tree1", u"tree2", u"key9"))
         self.assertFalse(jcfg)
+        self.assertEqual(0, len(jcfg))
 
     def test_boolean_context_dict_true(self):
         cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py"))
         jcfg = cfg.jailed(rootpath=(u"tree1", u"tree2"))
         self.assertTrue(jcfg)
+        self.assertEqual(6, len(jcfg))
 
     def test_list_by_index(self):
         cfg = configmix.load(os.path.join(TESTDATADIR, "conf10.py"))