From 934e29b076d4f98efe52b25db887daec8095d2c5 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Sun, 24 Mar 2013 14:53:05 +0000 Subject: [PATCH] Port the plugins to the new API --- src/builtin_plugin.py | 106 +++++++------- src/image_plugin.py | 138 +++++++++--------- src/mmc_plugin.py | 94 ++++++------ src/remaster_plugin.py | 134 ++++++++--------- src/tar_plugin.py | 122 ++++++++-------- tests/parsers.py | 28 ++-- tests/specs/chroot_to_iso.common | 2 +- tests/specs/data/error_script.sh | 0 tests/specs/data/inner_chroot_script.sh | 0 tests/specs/data/inner_chroot_script_after.sh | 0 tests/specs/data/outer_chroot_script.sh | 0 tests/specs/data/outer_chroot_script_after.sh | 0 tests/specs/data/post_image_script.sh | 0 tests/specs/data/post_iso_script.sh | 0 tests/specs/data/post_tar_script.sh | 0 tests/specs/data/pre_image_script.sh | 0 tests/specs/data/pre_iso_script.sh | 0 tests/specs/data/pre_tar_script.sh | 0 tests/specs/iso_remaster.common | 10 +- tests/specs/iso_to_image.common | 14 +- 20 files changed, 325 insertions(+), 323 deletions(-) mode change 100644 => 100755 tests/specs/data/error_script.sh create mode 100755 tests/specs/data/inner_chroot_script.sh create mode 100755 tests/specs/data/inner_chroot_script_after.sh create mode 100755 tests/specs/data/outer_chroot_script.sh create mode 100755 tests/specs/data/outer_chroot_script_after.sh create mode 100755 tests/specs/data/post_image_script.sh mode change 100644 => 100755 tests/specs/data/post_iso_script.sh create mode 100755 tests/specs/data/post_tar_script.sh create mode 100755 tests/specs/data/pre_image_script.sh mode change 100644 => 100755 tests/specs/data/pre_iso_script.sh create mode 100755 tests/specs/data/pre_tar_script.sh diff --git a/src/builtin_plugin.py b/src/builtin_plugin.py index 0eae526..1eb3042 100644 --- a/src/builtin_plugin.py +++ b/src/builtin_plugin.py @@ -688,7 +688,7 @@ class IsoHandler(GenericExecutionStep, BuiltinHandlerMixin): class LivecdSpec(GenericSpec): - PLUGIN_API_VERSION = 0 + PLUGIN_API_VERSION = 1 @staticmethod def execution_strategy(): @@ -702,110 +702,110 @@ class LivecdSpec(GenericSpec): "destination_livecd_root", ] - def parser_data_path(self): + def parameters(self): return { 'execution_strategy': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'prechroot': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_command_arguments, + 'parser': self._command_splitter, }, 'release_string': { - 'cb': self.ne_string, # validation callback - 've': self.ve_string_stripper, # value extractor + 'verifier': lambda x: len(x) != 0, # validation callback + 'parser': lambda x: x.strip(), # value extractor }, 'release_version': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'release_desc': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'release_file': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'source_chroot': { - 'cb': self.valid_dir, - 've': self.ve_string_stripper, + 'verifier': os.path.isdir, + 'parser': lambda x: x.strip(), }, 'destination_chroot': { - 'cb': self.valid_path_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: "\0" not in x, + 'parser': lambda x: x.strip(), }, 'extra_rsync_parameters': { - 'cb': self.always_valid, - 've': self.ve_command_splitter, + 'verifier': lambda x: True, + 'parser': self._command_splitter, }, 'merge_destination_chroot': { - 'cb': self.valid_dir, - 've': self.ve_string_stripper, + 'verifier': os.path.isdir, + 'parser': lambda x: x.strip(), }, 'error_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'outer_chroot_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'inner_source_chroot_script': { - 'cb': self.valid_path_string_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'inner_chroot_script': { - 'cb': self.valid_path_string_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'outer_chroot_script_after': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'destination_livecd_root': { - 'cb': self.valid_path_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: "\0" not in x, + 'parser': lambda x: x.strip(), }, 'merge_livecd_root': { - 'cb': self.valid_dir, - 've': self.ve_string_stripper, + 'verifier': os.path.isdir, + 'parser': lambda x: x.strip(), }, 'extra_mksquashfs_parameters': { - 'cb': self.always_valid, - 've': self.ve_command_splitter, + 'verifier': lambda x: True, + 'parser': self._command_splitter, }, 'extra_mkisofs_parameters': { - 'cb': self.always_valid, - 've': self.ve_command_splitter, + 'verifier': lambda x: True, + 'parser': self._command_splitter, }, 'pre_iso_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'post_iso_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'destination_iso_directory': { - 'cb': self.valid_dir, - 've': self.ve_string_stripper, + 'verifier': os.path.isdir, + 'parser': lambda x: x.strip(), }, 'destination_iso_image_name': { - 'cb': self.valid_ascii, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'paths_to_remove': { - 'cb': self.ne_list, - 've': self.valid_path_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate_path, }, 'paths_to_empty': { - 'cb': self.ne_list, - 've': self.valid_path_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate_path, }, } - def get_execution_steps(self): + def execution_steps(self): return [MirrorHandler, ChrootHandler, CdrootHandler, IsoHandler] diff --git a/src/image_plugin.py b/src/image_plugin.py index 4842951..1a61e49 100644 --- a/src/image_plugin.py +++ b/src/image_plugin.py @@ -533,7 +533,7 @@ class FinalImageHandler(GenericExecutionStep, BuiltinHandlerMixin): class IsoToImageSpec(GenericSpec): - PLUGIN_API_VERSION = 0 + PLUGIN_API_VERSION = 1 @staticmethod def execution_strategy(): @@ -546,142 +546,142 @@ class IsoToImageSpec(GenericSpec): "image_mb", ] - def parser_data_path(self): + def parameters(self): return { 'execution_strategy': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'prechroot': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_command_arguments, + 'parser': self._command_splitter, }, 'release_string': { - 'cb': self.ne_string, # validation callback - 've': self.ve_string_stripper, # value extractor + 'verifier': lambda x: len(x) != 0, # validation callback + 'parser': lambda x: x.strip(), # value extractor }, 'release_version': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'release_desc': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'release_file': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'source_iso': { - 'cb': self.valid_path_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: "\0" not in x, + 'parser': lambda x: x.strip(), }, 'image_name': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'image_formatter': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'image_mounter': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'image_umounter': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'image_mb': { - 'cb': self.valid_integer, - 've': self.ve_integer_converter, + 'verifier': lambda x: x is not None, + 'parser': self._cast_integer, }, 'image_randomize': { - 'cb': self.valid_ascii, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'error_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'outer_chroot_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'inner_chroot_script': { - 'cb': self.valid_path_string_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'inner_chroot_script_after': { - 'cb': self.valid_path_string_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'outer_chroot_script_after': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'destination_image_directory': { - 'cb': self.valid_dir, - 've': self.ve_string_stripper, + 'verifier': os.path.isdir, + 'parser': lambda x: x.strip(), }, 'pre_image_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'post_image_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'iso_mounter': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'iso_umounter': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'squash_mounter': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'squash_umounter': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'custom_packages_remove_cmd': { - 'cb': self.valid_ascii, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'custom_packages_add_cmd': { - 'cb': self.valid_ascii, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'packages_to_remove': { - 'cb': self.ne_list, - 've': self.valid_comma_sep_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate, }, 'packages_to_add': { - 'cb': self.ne_list, - 've': self.valid_comma_sep_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate, }, 'repositories_update_cmd': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'execute_repositories_update': { - 'cb': self.valid_ascii, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'paths_to_remove': { - 'cb': self.ne_list, - 've': self.valid_path_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate_path, }, 'paths_to_empty': { - 'cb': self.ne_list, - 've': self.valid_path_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate_path, }, } - def get_execution_steps(self): + def execution_steps(self): return [ImageHandler, ImageIsoUnpackHandler, ImageChrootHandler, FinalImageHandler] diff --git a/src/mmc_plugin.py b/src/mmc_plugin.py index 8e81869..910e679 100644 --- a/src/mmc_plugin.py +++ b/src/mmc_plugin.py @@ -377,7 +377,7 @@ class FinalImageHandler(GenericExecutionStep, BuiltinHandlerMixin): class ChrootToMmcImageSpec(GenericSpec): - PLUGIN_API_VERSION = 0 + PLUGIN_API_VERSION = 1 @staticmethod def execution_strategy(): @@ -397,97 +397,97 @@ class ChrootToMmcImageSpec(GenericSpec): "image_name", ] - def parser_data_path(self): + def parameters(self): return { 'execution_strategy': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'prechroot': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_command_arguments, + 'parser': self._command_splitter, }, 'outer_source_chroot_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'inner_source_chroot_script': { - 'cb': self.valid_path_string_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'outer_source_chroot_script_after': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'release_string': { - 'cb': self.ne_string, # validation callback - 've': self.ve_string_stripper, # value extractor + 'verifier': lambda x: len(x) != 0, # validation callback + 'parser': lambda x: x.strip(), # value extractor }, 'release_version': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'release_desc': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'release_file': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'source_chroot': { - 'cb': self.valid_dir, - 've': self.ve_string_stripper, + 'verifier': os.path.isdir, + 'parser': lambda x: x.strip(), }, 'image_name': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'image_mb': { - 'cb': self.valid_integer, - 've': self.ve_integer_converter, + 'verifier': lambda x: x is not None, + 'parser': self._cast_integer, }, 'image_generator_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'error_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'destination_image_directory': { - 'cb': self.valid_dir, - 've': self.ve_string_stripper, + 'verifier': os.path.isdir, + 'parser': lambda x: x.strip(), }, 'source_boot_directory': { - 'cb': self.valid_dir, - 've': self.ve_string_stripper, + 'verifier': os.path.isdir, + 'parser': lambda x: x.strip(), }, 'pre_image_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'post_image_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'packages_to_remove': { - 'cb': self.ne_list, - 've': self.valid_comma_sep_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate, }, 'packages_to_add': { - 'cb': self.ne_list, - 've': self.valid_comma_sep_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate, }, 'paths_to_remove': { - 'cb': self.ne_list, - 've': self.valid_path_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate_path, }, 'paths_to_empty': { - 'cb': self.ne_list, - 've': self.valid_path_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate_path, }, } - def get_execution_steps(self): + def execution_steps(self): return [ChrootHandler, ImageHandler, FinalImageHandler] diff --git a/src/remaster_plugin.py b/src/remaster_plugin.py index c85c948..36c418d 100644 --- a/src/remaster_plugin.py +++ b/src/remaster_plugin.py @@ -376,7 +376,7 @@ class IsoHandler(BuiltinIsoHandler): class RemasterSpec(GenericSpec): - PLUGIN_API_VERSION = 0 + PLUGIN_API_VERSION = 1 @staticmethod def execution_strategy(): @@ -388,137 +388,137 @@ class RemasterSpec(GenericSpec): "destination_iso_directory", ] - def parser_data_path(self): + def parameters(self): return { 'execution_strategy': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'prechroot': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_command_arguments, + 'parser': self._command_splitter, }, 'release_string': { - 'cb': self.ne_string, # validation callback - 've': self.ve_string_stripper, # value extractor + 'verifier': lambda x: len(x) != 0, # validation callback + 'parser': lambda x: x.strip(), # value extractor }, 'release_version': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'release_desc': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'release_file': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'source_iso': { - 'cb': self.valid_path_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: "\0" not in x, + 'parser': lambda x: x.strip(), }, 'iso_title': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'error_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'outer_chroot_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'inner_chroot_script': { - 'cb': self.valid_path_string_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'inner_chroot_script_after': { - 'cb': self.valid_path_string_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'outer_chroot_script_after': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'extra_mksquashfs_parameters': { - 'cb': self.always_valid, - 've': self.ve_command_splitter, + 'verifier': lambda x: True, + 'parser': self._command_splitter, }, 'extra_mkisofs_parameters': { - 'cb': self.always_valid, - 've': self.ve_command_splitter, + 'verifier': lambda x: True, + 'parser': self._command_splitter, }, 'pre_iso_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'post_iso_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'destination_iso_directory': { - 'cb': self.valid_dir, - 've': self.ve_string_stripper, + 'verifier': os.path.isdir, + 'parser': lambda x: x.strip(), }, 'destination_iso_image_name': { - 'cb': self.valid_ascii, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'iso_mounter': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'iso_umounter': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'squash_mounter': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'squash_umounter': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'merge_livecd_root': { - 'cb': self.valid_dir, - 've': self.ve_string_stripper, + 'verifier': os.path.isdir, + 'parser': lambda x: x.strip(), }, 'custom_packages_remove_cmd': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'custom_packages_add_cmd': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'packages_to_remove': { - 'cb': self.ne_list, - 've': self.valid_comma_sep_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate, }, 'packages_to_add': { - 'cb': self.ne_list, - 've': self.valid_comma_sep_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate, }, 'repositories_update_cmd': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'execute_repositories_update': { - 'cb': self.valid_ascii, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'paths_to_remove': { - 'cb': self.ne_list, - 've': self.valid_path_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate_path, }, 'paths_to_empty': { - 'cb': self.ne_list, - 've': self.valid_path_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate_path, }, } - def get_execution_steps(self): + def execution_steps(self): return [IsoUnpackHandler, ChrootHandler, CdrootHandler, IsoHandler] diff --git a/src/tar_plugin.py b/src/tar_plugin.py index dcdaa20..4ec3e42 100644 --- a/src/tar_plugin.py +++ b/src/tar_plugin.py @@ -169,7 +169,7 @@ class TarHandler(GenericExecutionStep, BuiltinHandlerMixin): class IsoToTarSpec(GenericSpec): - PLUGIN_API_VERSION = 0 + PLUGIN_API_VERSION = 1 @staticmethod def execution_strategy(): @@ -184,125 +184,125 @@ class IsoToTarSpec(GenericSpec): "destination_tar_directory", ] - def parser_data_path(self): + def parameters(self): return { 'execution_strategy': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'prechroot': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_command_arguments, + 'parser': self._command_splitter, }, 'release_string': { - 'cb': self.ne_string, # validation callback - 've': self.ve_string_stripper, # value extractor + 'verifier': lambda x: len(x) != 0, # validation callback + 'parser': lambda x: x.strip(), # value extractor }, 'release_version': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'release_desc': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'release_file': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'source_iso': { - 'cb': self.valid_path_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: "\0" not in x, + 'parser': lambda x: x.strip(), }, 'tar_name': { - 'cb': self.ne_string, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'compression_method': { - 'cb': self.supported_compression_method, - 've': self.ve_string_stripper, + 'verifier': self.supported_compression_method, + 'parser': lambda x: x.strip(), }, 'error_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'outer_chroot_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'inner_chroot_script': { - 'cb': self.valid_path_string_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'inner_chroot_script_after': { - 'cb': self.valid_path_string_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'outer_chroot_script_after': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'destination_tar_directory': { - 'cb': self.valid_dir, - 've': self.ve_string_stripper, + 'verifier': os.path.isdir, + 'parser': lambda x: x.strip(), }, 'pre_tar_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'post_tar_script': { - 'cb': self.valid_exec_first_list_item, - 've': self.ve_command_splitter, + 'verifier': self._verify_executable_arguments, + 'parser': self._command_splitter, }, 'iso_mounter': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'iso_umounter': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'squash_mounter': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'squash_umounter': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'custom_packages_remove_cmd': { - 'cb': self.valid_ascii, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'custom_packages_add_cmd': { - 'cb': self.valid_ascii, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'packages_to_remove': { - 'cb': self.ne_list, - 've': self.valid_comma_sep_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate, }, 'packages_to_add': { - 'cb': self.ne_list, - 've': self.valid_comma_sep_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate, }, 'repositories_update_cmd': { - 'cb': self.ne_list, - 've': self.ve_command_splitter, + 'verifier': lambda x: len(x) != 0, + 'parser': self._command_splitter, }, 'execute_repositories_update': { - 'cb': self.valid_ascii, - 've': self.ve_string_stripper, + 'verifier': lambda x: len(x) != 0, + 'parser': lambda x: x.strip(), }, 'paths_to_remove': { - 'cb': self.ne_list, - 've': self.valid_path_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate_path, }, 'paths_to_empty': { - 'cb': self.ne_list, - 've': self.valid_path_list, + 'verifier': lambda x: len(x) != 0, + 'parser': self._comma_separate_path, }, } - def get_execution_steps(self): + def execution_steps(self): return [IsoUnpackHandler, ChrootHandler, TarHandler] diff --git a/tests/parsers.py b/tests/parsers.py index 56b7871..3c44a07 100644 --- a/tests/parsers.py +++ b/tests/parsers.py @@ -36,7 +36,7 @@ class ParsersTest(unittest.TestCase): expected_data = { 'execution_strategy': "iso_remaster", 'paths_to_remove': ['/this/and/that', '/that/and/this'], - 'post_iso_script': ['/sabayon/scripts/post_iso_script.sh'], + 'post_iso_script': ['specs/data/post_iso_script.sh'], 'iso_title': 'Sabayon KDE', 'extra_mkisofs_parameters': ['-b', 'isolinux/isolinux.bin', '-c', 'isolinux/boot.cat'], @@ -46,22 +46,23 @@ class ParsersTest(unittest.TestCase): 'destination_iso_image_name': 'Sabayon_Linux_5.3_x86_TEST.iso', 'release_desc': 'x86 TEST', 'packages_to_remove': ['app-foo/foo', 'app-foo2/foo2'], - 'pre_iso_script': ['/sabayon/scripts/generic_pre_iso_script.sh', + 'pre_iso_script': ['specs/data/pre_iso_script.sh', 'KDE'], 'custom_packages_add_cmd': ['equo', 'install', '--ask'], 'packages_to_add': ['app-admin/packagekit-base', 'app-admin/packagekit-qt4', 'app-admin/sulfur'], 'release_file': '/etc/sabayon-edition', - 'outer_chroot_script': ['/sabayon/scripts/remaster_pre.sh'], + 'outer_chroot_script': ['specs/data/outer_chroot_script.sh'], 'execute_repositories_update': 'yes', 'inner_chroot_script_after': [ - '/sabayon/scripts/remaster_generic_inner_chroot_script_after.sh', + 'specs/data/inner_chroot_script_after.sh', 'kde'], 'release_string': 'Sabayon Linux', 'paths_to_empty': ['/empty/this', '/empty/that'], 'destination_iso_directory': 'specs/out/', 'repositories_update_cmd': ['equo', 'update', '--debug'], - 'outer_chroot_script_after': ['/sabayon/scripts/remaster_post.sh'] + 'outer_chroot_script_after': [ + 'specs/data/outer_chroot_script_after.sh'] } parse_obj = SpecParser("specs/iso_remaster.spec") @@ -128,7 +129,7 @@ class ParsersTest(unittest.TestCase): '__plugin__': None, 'destination_livecd_root': 'specs/out/fake_livecd_root', 'release_desc': 'x86 SpinBase', - 'inner_chroot_script': ['/sabayon/scripts/inner_chroot_script.sh', + 'inner_chroot_script': ['specs/data/inner_chroot_script.sh', 'spinbase'], 'extra_rsync_parameters': ['--one-file-system', '--exclude', '/proc/*', '--exclude', '/dev/pts/*'], @@ -189,6 +190,7 @@ class ParsersTest(unittest.TestCase): self.assert_(isinstance(extracted_data['__plugin__'], IsoToTarSpec)) extracted_data['__plugin__'] = None + self.assertEqual(expected_data, extracted_data) def test_iso_to_image(self): @@ -199,7 +201,7 @@ class ParsersTest(unittest.TestCase): 'execution_strategy': "iso_to_image", 'destination_image_directory': '/', 'outer_chroot_script_after': [ - '/path/to/script/to/be/executed/outside/after'], + 'specs/data/outer_chroot_script_after.sh'], 'iso_mounter': ['mount', '-t', 'iso9660', '-o', 'loop'], 'prechroot': ['linux32'], 'image_name': 'image_name_w00t Sabayon_Linux_SpinBase_5.3_x86_ami.img', @@ -211,20 +213,20 @@ class ParsersTest(unittest.TestCase): 'image_randomize': 'yes', 'image_formatter': ['mkfs.ext2'], 'packages_to_remove': ['app-remove/this', 'app-remove/that'], - 'inner_chroot_script': ['/sabayon/scripts/openvz_inner_chroot_script.sh'], + 'inner_chroot_script': ['specs/data/inner_chroot_script.sh'], 'custom_packages_add_cmd': 'equo install --debug', 'packages_to_add': ['app-add/this', 'app-add/that'], 'iso_umounter': ['umount', '-l'], - 'error_script': ['/path/to/script/to/be/executed/outside/after'], + 'error_script': ['specs/data/error_script.sh'], 'image_mounter': ['mount', '-o', 'rw,loop'], - 'post_image_script': ['/sabayon/scripts/post_image_script.sh'], - 'outer_chroot_script': ['/path/to/script/to/be/executed/outside'], + 'post_image_script': ['specs/data/post_image_script.sh'], + 'outer_chroot_script': ['specs/data/outer_chroot_script.sh'], 'execute_repositories_update': 'yes', 'inner_chroot_script_after': [ - '/sabayon/scripts/image_generic_inner_chroot_script_after.sh'], + 'specs/data/inner_chroot_script_after.sh'], 'paths_to_empty': ['/empty/this', 'and/that'], 'squash_mounter': ['mount', '-t', 'squashfs', '-o', 'loop'], - 'pre_image_script': ['/sabayon/scripts/pre_image_script.sh'], + 'pre_image_script': ['specs/data/pre_image_script.sh'], 'repositories_update_cmd': ['equo', 'update', '--debug'], '__plugin__': None, 'image_umounter': ['umount', '-l'] } diff --git a/tests/specs/chroot_to_iso.common b/tests/specs/chroot_to_iso.common index 72988af..7ab7aca 100644 --- a/tests/specs/chroot_to_iso.common +++ b/tests/specs/chroot_to_iso.common @@ -17,7 +17,7 @@ extra_rsync_parameters: --one-file-system --exclude "/proc/*" --exclude "/dev/pt # Inner chroot script command, to be executed inside destination chroot before packing it # - kmerge.sh - setup kernel bins # inner_chroot_script: /sabayon/scripts/inner_chroot_script.sh -inner_chroot_script: /sabayon/scripts/inner_chroot_script.sh spinbase +inner_chroot_script: specs/data/inner_chroot_script.sh spinbase # Destination LiveCD root directory, where files are placed before getting mkisofs'ed # NOTE: data will be stored inside an auto-generated subdir diff --git a/tests/specs/data/error_script.sh b/tests/specs/data/error_script.sh old mode 100644 new mode 100755 diff --git a/tests/specs/data/inner_chroot_script.sh b/tests/specs/data/inner_chroot_script.sh new file mode 100755 index 0000000..e69de29 diff --git a/tests/specs/data/inner_chroot_script_after.sh b/tests/specs/data/inner_chroot_script_after.sh new file mode 100755 index 0000000..e69de29 diff --git a/tests/specs/data/outer_chroot_script.sh b/tests/specs/data/outer_chroot_script.sh new file mode 100755 index 0000000..e69de29 diff --git a/tests/specs/data/outer_chroot_script_after.sh b/tests/specs/data/outer_chroot_script_after.sh new file mode 100755 index 0000000..e69de29 diff --git a/tests/specs/data/post_image_script.sh b/tests/specs/data/post_image_script.sh new file mode 100755 index 0000000..e69de29 diff --git a/tests/specs/data/post_iso_script.sh b/tests/specs/data/post_iso_script.sh old mode 100644 new mode 100755 diff --git a/tests/specs/data/post_tar_script.sh b/tests/specs/data/post_tar_script.sh new file mode 100755 index 0000000..e69de29 diff --git a/tests/specs/data/pre_image_script.sh b/tests/specs/data/pre_image_script.sh new file mode 100755 index 0000000..e69de29 diff --git a/tests/specs/data/pre_iso_script.sh b/tests/specs/data/pre_iso_script.sh old mode 100644 new mode 100755 diff --git a/tests/specs/data/pre_tar_script.sh b/tests/specs/data/pre_tar_script.sh new file mode 100755 index 0000000..e69de29 diff --git a/tests/specs/iso_remaster.common b/tests/specs/iso_remaster.common index cbfb391..0627965 100644 --- a/tests/specs/iso_remaster.common +++ b/tests/specs/iso_remaster.common @@ -13,15 +13,15 @@ iso_title: Sabayon KDE # Outer chroot script command, to be executed outside destination chroot before # before entering it (and before inner_chroot_script) -outer_chroot_script: /sabayon/scripts/remaster_pre.sh +outer_chroot_script: specs/data/outer_chroot_script.sh # Inner chroot script command, to be executed inside destination chroot after # packages installation and removal -inner_chroot_script_after: /sabayon/scripts/remaster_generic_inner_chroot_script_after.sh kde +inner_chroot_script_after: specs/data/inner_chroot_script_after.sh kde # Outer chroot script command, to be executed outside destination chroot before # before entering it (and AFTER inner_chroot_script) -outer_chroot_script_after: /sabayon/scripts/remaster_post.sh +outer_chroot_script_after: specs/data/outer_chroot_script_after.sh # Extra mkisofs parameters, perhaps something to include/use your bootloader extra_mkisofs_parameters: -b isolinux/isolinux.bin -c isolinux/boot.cat @@ -33,13 +33,13 @@ extra_mkisofs_parameters: -b isolinux/isolinux.bin -c isolinux/boot.cat # CDROOT_DIR = path pointing to the root of the CD image being created # ISO_PATH = path pointing to the destination ISO # ISO_CHECKSUM_PATH = path pointing to the destination iso checksum (md5) -pre_iso_script: /sabayon/scripts/generic_pre_iso_script.sh KDE +pre_iso_script: specs/data/pre_iso_script.sh KDE # Post-ISO building script. Hook called after ISO image creation # Variables exported: # ISO_PATH = path pointing to the destination ISO # ISO_CHECKSUM_PATH = path pointing to the destination iso checksum (md5) -post_iso_script: /sabayon/scripts/post_iso_script.sh +post_iso_script: specs/data/post_iso_script.sh # Destination directory for the ISO image path (MANDATORY) destination_iso_directory: specs/out/ diff --git a/tests/specs/iso_to_image.common b/tests/specs/iso_to_image.common index 11eea31..2ecbdf2 100644 --- a/tests/specs/iso_to_image.common +++ b/tests/specs/iso_to_image.common @@ -3,36 +3,36 @@ execution_strategy: iso_to_image # Error script command, executed when something went wrong and molecule has # to terminate the execution -error_script: /path/to/script/to/be/executed/outside/after +error_script: specs/data/error_script.sh # Outer chroot script command, to be executed outside destination chroot before # before entering it (and before inner_chroot_script) -outer_chroot_script: /path/to/script/to/be/executed/outside +outer_chroot_script: specs/data/outer_chroot_script.sh # Inner chroot script command, to be executed inside destination chroot before # packing it -inner_chroot_script: /sabayon/scripts/openvz_inner_chroot_script.sh +inner_chroot_script: specs/data/inner_chroot_script.sh # Inner chroot script command, to be executed inside destination chroot after # packages installation and removal -inner_chroot_script_after: /sabayon/scripts/image_generic_inner_chroot_script_after.sh +inner_chroot_script_after: specs/data/inner_chroot_script_after.sh # Outer chroot script command, to be executed outside destination chroot before # before entering it (and AFTER inner_chroot_script) -outer_chroot_script_after: /path/to/script/to/be/executed/outside/after +outer_chroot_script_after: specs/data/outer_chroot_script_after.sh # Pre-image building script. Hook called before image file creation # Variables exported: # TMP_IMAGE_PATH = path pointing to the temporary destination image file # LOOP_DEVICE = loop device (/dev/loopN) currently in use -pre_image_script: /sabayon/scripts/pre_image_script.sh +pre_image_script: specs/data/pre_image_script.sh # Post-image building script. Hook called after image file creation and move # into destination directory. # Variables exported: # IMAGE_PATH = path pointing to the destination image file # IMAGE_CHECKSUM_PATH = path pointing to the destination image file checksum (md5) -post_image_script: /sabayon/scripts/post_image_script.sh +post_image_script: specs/data/post_image_script.sh # Destination directory for the image path (MANDATORY) destination_image_directory: /