Add type field in the SysprepParam namedtuple
authorNikos Skalkotos <skalkoto@grnet.gr>
Mon, 29 Jul 2013 08:07:19 +0000 (11:07 +0300)
committerNikos Skalkotos <skalkoto@grnet.gr>
Tue, 30 Jul 2013 13:43:59 +0000 (16:43 +0300)
This is needed since the input we get from the input dialogs is
always strings.

image_creator/dialog_menu.py
image_creator/dialog_wizard.py
image_creator/os_type/__init__.py
image_creator/os_type/windows.py

index 2c1d58d..d14925f 100644 (file)
@@ -648,12 +648,17 @@ def sysprep_params(session):
 
     for i in range(len(fields)):
         param = needed[names[i]]
-        if param.validator(output[i]):
-            image.os.sysprep_params[names[i]] = output[i]
-        else:
-            d.msgbox("The value you provided for parameter: %s is not valid" %
-                     names[i], width=SMALL_WIDTH)
-            return False
+        try:
+            value = param.type(output[i])
+            if param.validate(value):
+                image.os.sysprep_params[names[i]] = value
+                continue
+        except ValueError:
+            pass
+
+        d.msgbox("The value you provided for parameter: `%s' is not valid" %
+                 names[i], width=SMALL_WIDTH)
+        return False
 
     return True
 
index cfce374..c737e51 100644 (file)
@@ -350,12 +350,17 @@ def start_wizard(session):
     def sysprep_params_validate(answer):
         params = {}
         for i in range(len(answer)):
-            if needed[param_names[i]].validator(answer):
-                params[param_names[i]] = answer[i]
-            else:
-                session['dialog'].msgbox("Invalid value for parameter `%s'" %
+            try:
+                value = needed[param_names[i]].type(answer[i])
+                if needed[param_names[i]].validate(value):
+                    params[param_names[i]] = value
+                    continue
+            except ValueError:
+                pass
+
+            session['dialog'].msgbox("Invalid value for parameter `%s'" %
                                          param_names[i])
-                raise WizardReloadPage
+            raise WizardReloadPage
         return params
 
     def sysprep_params_display(params):
index ddda45e..6cecbb9 100644 (file)
@@ -88,7 +88,7 @@ def sysprep(message, enabled=True, **kwargs):
     return wrapper
 
 
-def add_sysprep_param(name, default, description, validator=lambda x: True):
+def add_sysprep_param(name, type, default, descr, validate=lambda x: True):
     """Decorator for __init__ that adds the definition for a system preparation
     parameter in an instance of a os_type class
     """
@@ -97,7 +97,7 @@ def add_sysprep_param(name, default, description, validator=lambda x: True):
         def inner(self, *args, **kwargs):
             init(self, *args, **kwargs)
             self.needed_sysprep_params[name] = \
-                self.SysprepParam(default, description, validator)
+                self.SysprepParam(type, default, descr, validate)
         return inner
     return wrapper
 
@@ -118,7 +118,8 @@ def del_sysprep_param(name):
 class OSBase(object):
     """Basic operating system class"""
 
-    SysprepParam = namedtuple('SysprepParam', 'default description validator')
+    SysprepParam = namedtuple('SysprepParam',
+                              ['type', 'default', 'description', 'validate'])
 
     def __init__(self, image, **kargs):
         self.image = image
index 5110e30..58d98c8 100644 (file)
@@ -108,7 +108,7 @@ KMS_CLIENT_SETUP_KEYS = {
 class Windows(OSBase):
     """OS class for Windows"""
 
-    @add_sysprep_param('password', None, 'Image Administrator Password')
+    @add_sysprep_param('password', str, None, 'Image Administrator Password')
     def __init__(self, image, **kargs):
         super(Windows, self).__init__(image, **kargs)