changeset 36:b04a350f894b

Implement methods to convert text to other types when getting configuration variables. The conversion is done after variable substitutions.
author Franz Glasner <hg@dom66.de>
date Thu, 31 Mar 2016 19:04:41 +0200
parents 3600e871c129
children 2a4dbbb42f43
files configmix/config.py
diffstat 1 files changed, 40 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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: