# HG changeset patch # User Franz Glasner # Date 1459443881 -7200 # Node ID b04a350f894b2dd012ddd432b9494400e5ea91bf # Parent 3600e871c1295b4ae01eda7b5f7951cf770f3e04 Implement methods to convert text to other types when getting configuration variables. The conversion is done after variable substitutions. diff -r 3600e871c129 -r b04a350f894b configmix/config.py --- a/configmix/config.py Mon Mar 21 13:49:31 2016 +0100 +++ b/configmix/config.py Thu Mar 31 19:04:41 2016 +0200 @@ -84,6 +84,46 @@ else: return default + def getintvar_s(self, varname, default=_MARKER): + """Get a (possibly substituted) variable and coerce text to a + number. + + """ + s = self.getvar_s(varname, default) + if isinstance(s, self._TEXTTYPE): + return int(s, 0) + else: + return s + + def getboolvar_s(self, varname, default=_MARKER): + """Get a (possibly substituted) variable and convert text to a + boolean + + """ + s = self.getvar_s(varname, default) + if isinstance(s, self._TEXTTYPE): + sl = s.strip().lower() + if not sl in self._BOOL_CVT: + raise ValueError("Not a boolean: %r" % s) + return self._BOOL_CVT[sl] + else: + return s + + # Conversion of booleans + _BOOL_CVT = {'1': True, 'yes': True, 'true': True, 'on': True, + '0': False, 'no': False, 'false': False, 'off': False} + + def getfloatvar_s(self, varname, default=_MARKER): + """Get a (possibly substituted) variable and convert text to a + float + + """ + s = self.getvar_s(varname, default) + if isinstance(s, self._TEXTTYPE): + return float(s) + else: + return s + def _split_ns(self, s): nameparts = s.split(':', 1) if len(nameparts) == 1: