changeset 503:a56f1d97a3f3

Use generator comprehensions where possible instead of list comprehensions that are converted to tuples
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 18 Dec 2021 01:49:48 +0100
parents 4f90e1eb7af8
children 4dbc16ff2670
files configmix/config.py
diffstat 1 files changed, 37 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/configmix/config.py	Sat Dec 18 01:26:41 2021 +0100
+++ b/configmix/config.py	Sat Dec 18 01:49:48 2021 +0100
@@ -482,10 +482,8 @@
         varns, varname = self._split_ns(varname)
         if not varns:
             if varname:
-                varnameparts = [
-                    unquote(vp)
-                    for vp in varname.split(_HIER_SEPARATOR)
-                ]
+                varnameparts = (unquote(vp)
+                                for vp in varname.split(_HIER_SEPARATOR))
             else:
                 varnameparts = tuple()
         else:
@@ -835,9 +833,7 @@
                 raise ValueError(
                     "jailed configurations do not support namespaces")
             if varname:
-                rootpath = [
-                    unquote(p) for p in root.split(_HIER_SEPARATOR)
-                ]
+                rootpath = (unquote(p) for p in root.split(_HIER_SEPARATOR))
             else:
                 rootpath = tuple()
         jc = _JailedConfiguration(*rootpath)
@@ -868,7 +864,7 @@
 
     """
 
-    __slots__ = ("_base", "_path", "_pathstr")
+    __slots__ = ("_base", "_path", "_path_string")
 
     is_jail = True
     """Flag to show that this is a jail for another configuration"""
@@ -876,13 +872,19 @@
     def __init__(self, *path):
         super(_JailedConfiguration, self).__init__()
         self._path = path
-        if path:
-            self._pathstr = \
-                _HIER_SEPARATOR.join(
-                    [quote(p) for p in path]) \
-                + _HIER_SEPARATOR
-        else:
-            self._pathstr = _EMPTY_STR
+        self._path_string = None
+
+    @property
+    def _pathstr(self):
+        v = self._path_string
+        if v is None:
+            if self._path:
+                v = _HIER_SEPARATOR.join(quote(p) for p in self._path) \
+                    + _HIER_SEPARATOR
+            else:
+                v = _EMPTY_STR
+        self._path_string = v
+        return v
 
     @property
     def base(self):
@@ -995,10 +997,20 @@
         return self._base.getfirstvarl_s(*real_paths, **kwds)
 
     def getvar(self, varname, **kwds):
-        return self._base.getvar(self._pathstr + varname, **kwds)
+        if varname:
+            varnameparts = tuple(unquote(vp)
+                                 for vp in varname.split(_HIER_SEPARATOR))
+        else:
+            varnameparts = tuple()
+        return self._base.getvarl(*(self._path + varnameparts), **kwds)
 
     def getkeys(self, varname):
-        for k in self._base.getkeys(self._pathstr + varname):
+        if varname:
+            varnameparts = tuple(unquote(vp)
+                                 for vp in varname.split(_HIER_SEPARATOR))
+        else:
+            varnameparts = tuple()
+        for k in self._base.getkeysl(*(self._path + varnameparts)):
             yield k
 
     def getfirstvar(self, *varnames, **kwds):
@@ -1006,7 +1018,12 @@
         return self._base.getfirstvar(*real_varnames, **kwds)
 
     def getvar_s(self, varname, **kwds):
-        return self._base.getvar_s(self._pathstr + varname, **kwds)
+        if varname:
+            varnameparts = tuple(unquote(vp)
+                                 for vp in varname.split(_HIER_SEPARATOR))
+        else:
+            varnameparts = tuple()
+        return self._base.getvarl_s(*(self._path + varnameparts), **kwds)
 
     def getfirstvar_s(self, *varnames, **kwds):
         real_varnames = [self._pathstr + vn for vn in varnames]
@@ -1052,9 +1069,9 @@
                 raise ValueError(
                     "sub-jails do not support namespaces")
             if varname:
-                rootpath = [
+                rootpath = (
                     unquote(p) for p in varname.split(_HIER_SEPARATOR)
-                ]
+                )
             else:
                 rootpath = tuple()
         if self._path: