diff configmix/config.py @ 610:764d4185c76a

C-implementations of Configuration.getvarl_s() and Configuration.getvar()
author Franz Glasner <fzglas.hg@dom66.de>
date Wed, 12 Jan 2022 00:44:02 +0100
parents e55a42144ba9
children 4499e9b4855d
line wrap: on
line diff
--- a/configmix/config.py	Tue Jan 11 21:17:06 2022 +0100
+++ b/configmix/config.py	Wed Jan 12 00:44:02 2022 +0100
@@ -33,7 +33,8 @@
 try:
     from ._speedups import (fast_unquote, fast_quote, fast_pathstr2path,
                             _fast_split_ns, _fast_split_filters,
-                            _fast_getvarl, _fast_getvar_s,
+                            _fast_getvarl, _fast_getvarl_s,
+                            _fast_getvar, _fast_getvar_s,
                             _fast_interpolate_variables,
                             _sync_MISSING, _sync_MARKER)
 except ImportError:
@@ -43,6 +44,8 @@
     _fast_split_ns = None
     _fast_split_filters = None
     _fast_getvarl = None
+    _fast_getvarl_s = None
+    _fast_getvar = None
     _fast_getvar_s = None
     _fast_interpolate_variables = None
     _sync_MISSING = None
@@ -607,7 +610,7 @@
         else:
             return default
 
-    def getvar(self, varname, default=_MARKER):
+    def py_getvar(self, varname, default=_MARKER):
         """Get a variable of the form ``[ns:][[key1.]key2.]name`` - including
         variables from other namespaces.
 
@@ -625,6 +628,17 @@
         else:
             return self.getvarl(varname, namespace=varns, default=default)
 
+    if _fast_getvar:
+
+        def fast_getvar(self, varname, default=_MARKER):
+            return _fast_getvar(self, varname, default);
+
+        getvar = fast_getvar
+
+    else:
+
+        getvar = py_getvar
+
     def getkeys(self, varname):
         """Yield all the keys of a variable value.
 
@@ -656,7 +670,7 @@
         else:
             return default
 
-    def getvarl_s(self, *path, **kwds):
+    def py_getvarl_s(self, *path, **kwds):
         """Get a variable - including variables from other namespaces.
 
         `path` and `namespace` are interpreted as in
@@ -678,6 +692,17 @@
             else:
                 return default
 
+    if _fast_getvarl_s:
+
+        def fast_getvarl_s(self, *path, **kwds):
+            return _fast_getvarl_s(self, path, **kwds)
+
+        getvarl_s = fast_getvarl_s
+
+    else:
+
+        getvarl_s = py_getvarl_s
+
     def getfirstvarl_s(self, *paths, **kwds):
         """A variant of :meth:`~.getfirstvarl` that does variable
         interpolation.