From: Nikos Skalkotos Date: Mon, 29 Jul 2013 08:07:19 +0000 (+0300) Subject: Add type field in the SysprepParam namedtuple X-Git-Tag: 0.5~1^2~13^2~3 X-Git-Url: https://code.grnet.gr/git/snf-image-creator/commitdiff_plain/678b382b7df6a4faed4fd0474f83c006fdf9554a Add type field in the SysprepParam namedtuple This is needed since the input we get from the input dialogs is always strings. --- diff --git a/image_creator/dialog_menu.py b/image_creator/dialog_menu.py index 2c1d58d..d14925f 100644 --- a/image_creator/dialog_menu.py +++ b/image_creator/dialog_menu.py @@ -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 diff --git a/image_creator/dialog_wizard.py b/image_creator/dialog_wizard.py index cfce374..c737e51 100644 --- a/image_creator/dialog_wizard.py +++ b/image_creator/dialog_wizard.py @@ -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): diff --git a/image_creator/os_type/__init__.py b/image_creator/os_type/__init__.py index ddda45e..6cecbb9 100644 --- a/image_creator/os_type/__init__.py +++ b/image_creator/os_type/__init__.py @@ -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 diff --git a/image_creator/os_type/windows.py b/image_creator/os_type/windows.py index 5110e30..58d98c8 100644 --- a/image_creator/os_type/windows.py +++ b/image_creator/os_type/windows.py @@ -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)