diff configmix/config.py @ 418:bb5f11abd12a

Implement .getkeysl() and .getkeys() for configuration objects that iterate over all the keys of a configuration value
author Franz Glasner <fzglas.hg@dom66.de>
date Thu, 02 Dec 2021 01:24:53 +0100
parents 83d537f1dfbb
children 079a82129110
line wrap: on
line diff
--- a/configmix/config.py	Wed Dec 01 23:10:20 2021 +0100
+++ b/configmix/config.py	Thu Dec 02 01:24:53 2021 +0100
@@ -266,6 +266,20 @@
         else:
             return varvalue
 
+    def getkeysl(self, *path, **kwds):
+        """Yield the keys of a variable value.
+
+        :rtype: A generator
+        :raise KeyError:
+
+        .. note:: Dictionary keys are not subject to interpolation.
+
+        """
+        if "default" in kwds:
+            raise TypeError("got unexpected keyword argument: default")
+        for k in self.getvarl(*path, **kwds).keys():
+            yield k
+
     def getfirstvarl(self, *paths, **kwds):
         """A variant of :meth:`~.getvarl` that returns the first found
         variable in the `paths` list.
@@ -336,6 +350,18 @@
             varnameparts = (varname,)
         return self.getvarl(*varnameparts, namespace=varns, default=default)
 
+    def getkeys(self, varname):
+        """Yield all the keys of a variable value.
+
+        :rtype: A generator
+        :raise KeyError:
+
+        .. note:: Dictionary keys are not subject to interpolation.
+
+        """
+        for k in self.getvar(varname).keys():
+            yield k
+
     def getfirstvar(self, *varnames, **kwds):
         """A variant of :meth:`~.getvar` that returns the first found variable
         in the list of given variables in `varnames`.
@@ -775,6 +801,10 @@
     def getvarl(self, *path, **kwds):
         return self._base.getvarl(*(self._path + path), **kwds)
 
+    def getkeysl(self, *path, **kwds):
+        for k in self._base.getkeysl(*(self._path + path), **kwds):
+            yield k
+
     def getfirstvarl(self, *paths, **kwds):
         real_paths = []
         for path in paths:
@@ -805,6 +835,10 @@
     def getvar(self, varname, default=_MARKER):
         return self._base.getvar(self._pathstr + varname, default=default)
 
+    def getkeys(self, varname):
+        for k in self._base.getkeys(self._pathstr + varname):
+            yield k
+
     def getfirstvar(self, *varnames, **kwds):
         real_varnames = [self._pathstr + vn for vn in varnames]
         return self._base.getfirstvar(*real_varnames, **kwds)