comparison configmix/config.py @ 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
comparison
equal deleted inserted replaced
502:4f90e1eb7af8 503:a56f1d97a3f3
480 480
481 """ 481 """
482 varns, varname = self._split_ns(varname) 482 varns, varname = self._split_ns(varname)
483 if not varns: 483 if not varns:
484 if varname: 484 if varname:
485 varnameparts = [ 485 varnameparts = (unquote(vp)
486 unquote(vp) 486 for vp in varname.split(_HIER_SEPARATOR))
487 for vp in varname.split(_HIER_SEPARATOR)
488 ]
489 else: 487 else:
490 varnameparts = tuple() 488 varnameparts = tuple()
491 else: 489 else:
492 varnameparts = (varname,) 490 varnameparts = (varname,)
493 return self.getvarl(*varnameparts, namespace=varns, default=default) 491 return self.getvarl(*varnameparts, namespace=varns, default=default)
833 varns, varname = self._split_ns(root) 831 varns, varname = self._split_ns(root)
834 if varns: 832 if varns:
835 raise ValueError( 833 raise ValueError(
836 "jailed configurations do not support namespaces") 834 "jailed configurations do not support namespaces")
837 if varname: 835 if varname:
838 rootpath = [ 836 rootpath = (unquote(p) for p in root.split(_HIER_SEPARATOR))
839 unquote(p) for p in root.split(_HIER_SEPARATOR)
840 ]
841 else: 837 else:
842 rootpath = tuple() 838 rootpath = tuple()
843 jc = _JailedConfiguration(*rootpath) 839 jc = _JailedConfiguration(*rootpath)
844 if bind_root: 840 if bind_root:
845 jc.rebind(self) 841 jc.rebind(self)
866 configuration from the parent configuration's 862 configuration from the parent configuration's
867 :meth:`~.Configuration.jailed` factory method. 863 :meth:`~.Configuration.jailed` factory method.
868 864
869 """ 865 """
870 866
871 __slots__ = ("_base", "_path", "_pathstr") 867 __slots__ = ("_base", "_path", "_path_string")
872 868
873 is_jail = True 869 is_jail = True
874 """Flag to show that this is a jail for another configuration""" 870 """Flag to show that this is a jail for another configuration"""
875 871
876 def __init__(self, *path): 872 def __init__(self, *path):
877 super(_JailedConfiguration, self).__init__() 873 super(_JailedConfiguration, self).__init__()
878 self._path = path 874 self._path = path
879 if path: 875 self._path_string = None
880 self._pathstr = \ 876
881 _HIER_SEPARATOR.join( 877 @property
882 [quote(p) for p in path]) \ 878 def _pathstr(self):
883 + _HIER_SEPARATOR 879 v = self._path_string
884 else: 880 if v is None:
885 self._pathstr = _EMPTY_STR 881 if self._path:
882 v = _HIER_SEPARATOR.join(quote(p) for p in self._path) \
883 + _HIER_SEPARATOR
884 else:
885 v = _EMPTY_STR
886 self._path_string = v
887 return v
886 888
887 @property 889 @property
888 def base(self): 890 def base(self):
889 """Ask for the base (aka parent) configuration". 891 """Ask for the base (aka parent) configuration".
890 892
993 else: 995 else:
994 raise TypeError("a paths item must be a list or tuple") 996 raise TypeError("a paths item must be a list or tuple")
995 return self._base.getfirstvarl_s(*real_paths, **kwds) 997 return self._base.getfirstvarl_s(*real_paths, **kwds)
996 998
997 def getvar(self, varname, **kwds): 999 def getvar(self, varname, **kwds):
998 return self._base.getvar(self._pathstr + varname, **kwds) 1000 if varname:
1001 varnameparts = tuple(unquote(vp)
1002 for vp in varname.split(_HIER_SEPARATOR))
1003 else:
1004 varnameparts = tuple()
1005 return self._base.getvarl(*(self._path + varnameparts), **kwds)
999 1006
1000 def getkeys(self, varname): 1007 def getkeys(self, varname):
1001 for k in self._base.getkeys(self._pathstr + varname): 1008 if varname:
1009 varnameparts = tuple(unquote(vp)
1010 for vp in varname.split(_HIER_SEPARATOR))
1011 else:
1012 varnameparts = tuple()
1013 for k in self._base.getkeysl(*(self._path + varnameparts)):
1002 yield k 1014 yield k
1003 1015
1004 def getfirstvar(self, *varnames, **kwds): 1016 def getfirstvar(self, *varnames, **kwds):
1005 real_varnames = [self._pathstr + vn for vn in varnames] 1017 real_varnames = [self._pathstr + vn for vn in varnames]
1006 return self._base.getfirstvar(*real_varnames, **kwds) 1018 return self._base.getfirstvar(*real_varnames, **kwds)
1007 1019
1008 def getvar_s(self, varname, **kwds): 1020 def getvar_s(self, varname, **kwds):
1009 return self._base.getvar_s(self._pathstr + varname, **kwds) 1021 if varname:
1022 varnameparts = tuple(unquote(vp)
1023 for vp in varname.split(_HIER_SEPARATOR))
1024 else:
1025 varnameparts = tuple()
1026 return self._base.getvarl_s(*(self._path + varnameparts), **kwds)
1010 1027
1011 def getfirstvar_s(self, *varnames, **kwds): 1028 def getfirstvar_s(self, *varnames, **kwds):
1012 real_varnames = [self._pathstr + vn for vn in varnames] 1029 real_varnames = [self._pathstr + vn for vn in varnames]
1013 return self._base.getfirstvar_s(*real_varnames, **kwds) 1030 return self._base.getfirstvar_s(*real_varnames, **kwds)
1014 1031
1050 varns, varname = self._base._split_ns(root) 1067 varns, varname = self._base._split_ns(root)
1051 if varns: 1068 if varns:
1052 raise ValueError( 1069 raise ValueError(
1053 "sub-jails do not support namespaces") 1070 "sub-jails do not support namespaces")
1054 if varname: 1071 if varname:
1055 rootpath = [ 1072 rootpath = (
1056 unquote(p) for p in varname.split(_HIER_SEPARATOR) 1073 unquote(p) for p in varname.split(_HIER_SEPARATOR)
1057 ] 1074 )
1058 else: 1075 else:
1059 rootpath = tuple() 1076 rootpath = tuple()
1060 if self._path: 1077 if self._path:
1061 new_rootpath = self._path + tuple(rootpath) 1078 new_rootpath = self._path + tuple(rootpath)
1062 else: 1079 else: