diff --git a/image_creator/dialog_menu.py b/image_creator/dialog_menu.py index e32b46c69eea529ff7ef305700fa2678a0bc48c0..f1311899ca739e7cfa774e61fef17a369f8a413e 100644 --- a/image_creator/dialog_menu.py +++ b/image_creator/dialog_menu.py @@ -648,9 +648,13 @@ def update_sysprep_param(session, name): param = image.os.sysprep_params[name] while 1: - if param.type == "file": - title = "Please select a file to use for the `%s' parameter" % name - value = select_file(d, ftype="br", title=title) + if param.type in ("file", "dir"): + + title = "Please select a %s to use for the `%s' parameter" % \ + (name, 'file' if param.type == 'file' else 'directory') + ftype = "br" if param.type == 'file' else 'd' + + value = select_file(d, ftype=ftype, title=title) if value is None: return False else: diff --git a/image_creator/os_type/__init__.py b/image_creator/os_type/__init__.py index e37291b150971284f28f2a0af6e8a9331542cb0a..630725571b5fb43c49ee8b25c1dc7f075ac9d765 100644 --- a/image_creator/os_type/__init__.py +++ b/image_creator/os_type/__init__.py @@ -88,7 +88,8 @@ class SysprepParam(object): type_checker = {"posint": self._check_posint, "string": self._check_string, - "file": self._check_fname} + "file": self._check_fname, + "dir": self._check_dname} assert type in type_checker.keys(), "Invalid parameter type: %s" % type @@ -101,6 +102,7 @@ class SysprepParam(object): self._checker = type_checker[type] def set_value(self, value): + """Update the value of the parameter""" try: self.value = self._checker(value) except ValueError as e: @@ -144,6 +146,19 @@ class SysprepParam(object): raise ValueError("Invalid filename") + def _check_dname(self, value): + """Check if the value is a valid directory""" + + value = str(value) + if len(value) == 0: + return "" + + import os + if os.path.isdir(value): + return value + + raise ValueError("Invalid dirname") + def add_sysprep_param(name, type, default, descr): """Decorator for __init__ that adds the definition for a system preparation