From 4b6d82ec8146f6981695f9ed0c4f320fc175ce31 Mon Sep 17 00:00:00 2001 From: Nikos Skalkotos <skalkoto@grnet.gr> Date: Wed, 4 Jun 2014 16:14:02 +0300 Subject: [PATCH] Add a new "directory" type for sysprep params --- image_creator/dialog_menu.py | 10 +++++++--- image_creator/os_type/__init__.py | 17 ++++++++++++++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/image_creator/dialog_menu.py b/image_creator/dialog_menu.py index e32b46c..f131189 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 e37291b..6307255 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 -- GitLab