diff --git a/image_creator/dialog_menu.py b/image_creator/dialog_menu.py index 2c1d58dfd8a839bda7b7af64726570e92795a73d..d14925f35a83f9f35e0ff79a9d2a9096f36f0e61 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 cfce374d169037194b0f85dd0edb94772ca2f978..c737e51087795fdb856d20e83192910a0a1a3370 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 ddda45ee3c7b09d69e07b31bf44af3d027fe210b..6cecbb9b81f6f3ca52fb9e0cb7b77ae1f5bf111d 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 5110e306e94c1a2a45f957434ca45167e82851e7..58d98c88017a1ce0ef49ebc6e7e9dfb4f3237c50 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)