def setter(self, attribute, value): jobconf = JobConfiguration() jobconf[attribute] = value read_value = jobconf[attribute] if value is None: self.assertIsNone(read_value) else: self.assertEqual(read_value, value)
def test_config_string_missing_keys(self): jobconf = JobConfiguration() jobconf["language"] = Language.ITA jobconf["description"] = u"Test description" jobconf["i_a_name_regex"] = u"*.mp3" jobconf["i_a_relative_path"] = u"." jobconf["i_hierarchy_prefix"] = u"OEBPS/" jobconf["i_hierarchy_type"] = HierarchyType.FLAT jobconf["i_task_directory_name_regex"] = u"[0-9]*" jobconf["i_t_name_regex"] = u"*.txt" jobconf["i_t_relative_path"] = u"." jobconf["o_container_format"] = ContainerFormat.ZIP jobconf["o_hierarchy_prefix"] = u"OEBPS/mo/" jobconf["o_hierarchy_type"] = HierarchyType.FLAT jobconf["o_name"] = u"test_output.zip" expected = u"is_audio_file_name_regex=*.mp3|is_audio_file_relative_path=.|is_hierarchy_prefix=OEBPS/|is_hierarchy_type=flat|is_task_dir_name_regex=[0-9]*|is_text_file_name_regex=*.txt|is_text_file_relative_path=.|job_description=Test description|job_language=ita|os_job_file_container=zip|os_job_file_hierarchy_prefix=OEBPS/mo/|os_job_file_hierarchy_type=flat|os_job_file_name=test_output.zip" self.assertEqual(jobconf.config_string(), expected)
def test_constructor_from_config_string_plain(self): config_string = "job_description=Test description|job_language=it|is_audio_file_name_regex=*.mp3|is_audio_file_relative_path=.|is_hierarchy_prefix=OEBPS/|is_hierarchy_type=flat|is_task_dir_name_regex=[0-9]*|is_text_type=plain|is_text_file_name_regex=*.txt|is_text_file_relative_path=.|os_job_file_name=test_output.zip|os_job_file_container=zip|os_job_file_hierarchy_type=flat|os_job_file_hierarchy_prefix=OEBPS/mo/" jobconf = JobConfiguration(config_string) self.assertEqual(jobconf.language, Language.IT) self.assertEqual(jobconf.description, "Test description") self.assertEqual(jobconf.is_text_file_format, TextFileFormat.PLAIN) self.assertEqual(jobconf.is_text_unparsed_class_regex, None) self.assertEqual(jobconf.is_text_unparsed_id_regex, None) self.assertEqual(jobconf.is_text_unparsed_id_sort, None)
def test_constructor_from_config_string_unparsed(self): config_string = "job_description=Test description|job_language=it|is_audio_file_name_regex=*.mp3|is_audio_file_relative_path=.|is_hierarchy_prefix=OEBPS/|is_hierarchy_type=flat|is_task_dir_name_regex=[0-9]*|is_text_type=unparsed|is_text_file_name_regex=*.txt|is_text_file_relative_path=.|is_text_unparsed_class_regex=ra|is_text_unparsed_id_regex=f[0-9]*|is_text_unparsed_id_sort=numeric|os_job_file_name=test_output.zip|os_job_file_container=zip|os_job_file_hierarchy_type=flat|os_job_file_hierarchy_prefix=OEBPS/mo/" jobconf = JobConfiguration(config_string) self.assertEqual(jobconf.language, Language.IT) self.assertEqual(jobconf.description, "Test description") self.assertEqual(jobconf.is_text_file_format, TextFileFormat.UNPARSED) self.assertEqual(jobconf.is_text_unparsed_class_regex, "ra") self.assertEqual(jobconf.is_text_unparsed_id_regex, "f[0-9]*") self.assertEqual(jobconf.is_text_unparsed_id_sort, IDSortingAlgorithm.NUMERIC)
def test_config_string_full(self): jobconf = JobConfiguration() jobconf["language"] = Language.ITA jobconf["description"] = u"Test description" jobconf["i_a_name_regex"] = u"*.mp3" jobconf["i_a_relative_path"] = u"." jobconf["i_hierarchy_prefix"] = u"OEBPS/" jobconf["i_hierarchy_type"] = HierarchyType.FLAT jobconf["i_task_directory_name_regex"] = u"[0-9]*" jobconf["i_t_format"] = TextFileFormat.UNPARSED jobconf["i_t_name_regex"] = u"*.txt" jobconf["i_t_relative_path"] = u"." jobconf["i_t_unparsed_class_regex"] = u"ra" jobconf["i_t_unparsed_id_regex"] = u"f[0-9]*" jobconf["i_t_unparsed_id_sort"] = IDSortingAlgorithm.NUMERIC jobconf["o_container_format"] = ContainerFormat.ZIP jobconf["o_hierarchy_prefix"] = u"OEBPS/mo/" jobconf["o_hierarchy_type"] = HierarchyType.FLAT jobconf["o_name"] = u"test_output.zip" expected = u"is_audio_file_name_regex=*.mp3|is_audio_file_relative_path=.|is_hierarchy_prefix=OEBPS/|is_hierarchy_type=flat|is_task_dir_name_regex=[0-9]*|is_text_file_name_regex=*.txt|is_text_file_relative_path=.|is_text_type=unparsed|is_text_unparsed_class_regex=ra|is_text_unparsed_id_regex=f[0-9]*|is_text_unparsed_id_sort=numeric|job_description=Test description|job_language=ita|os_job_file_container=zip|os_job_file_hierarchy_prefix=OEBPS/mo/|os_job_file_hierarchy_type=flat|os_job_file_name=test_output.zip" self.assertEqual(jobconf.config_string(), expected)
def test_setter_05(self): value = "OEBPS/" jobconf = JobConfiguration() jobconf.is_hierarchy_prefix = value self.assertEqual(jobconf.is_hierarchy_prefix, value)
def test_setter_14(self): value = ContainerFormat.ZIP jobconf = JobConfiguration() jobconf.os_container_format = value self.assertEqual(jobconf.os_container_format, value)
def test_setter_12(self): value = "f[0-9]*" jobconf = JobConfiguration() jobconf.is_text_unparsed_id_regex = value self.assertEqual(jobconf.is_text_unparsed_id_regex, value)
def test_setter_10(self): value = "." jobconf = JobConfiguration() jobconf.is_text_file_relative_path = value self.assertEqual(jobconf.is_text_file_relative_path, value)
def test_setter_08(self): value = TextFileFormat.UNPARSED jobconf = JobConfiguration() jobconf.is_text_file_format = value self.assertEqual(jobconf.is_text_file_format, value)
def test_job_set_configuration(self): job = Job() jobconf = JobConfiguration() job.configuration = jobconf self.assertNotEqual(job.configuration, None)
def setter(self, attribute, value): jobconf = JobConfiguration() setattr(jobconf, attribute, value) self.assertEqual(getattr(jobconf, attribute), value)
def test_config_string_missing_keys(self): jobconf = JobConfiguration() jobconf.language = Language.IT jobconf.description = "Test description" jobconf.is_audio_file_name_regex = "*.mp3" jobconf.is_audio_file_relative_path = "." jobconf.is_hierarchy_prefix = "OEBPS/" jobconf.is_hierarchy_type = HierarchyType.FLAT jobconf.is_task_directory_name_regex = "[0-9]*" jobconf.is_text_file_format = TextFileFormat.PLAIN jobconf.is_text_file_name_regex = "*.txt" jobconf.is_text_file_relative_path = "." jobconf.os_container_format = ContainerFormat.ZIP jobconf.os_hierarchy_prefix = "OEBPS/mo/" jobconf.os_hierarchy_type = HierarchyType.FLAT jobconf.os_file_name = "test_output.zip" expected = "job_description=Test description|job_language=it|is_audio_file_name_regex=*.mp3|is_audio_file_relative_path=.|is_hierarchy_prefix=OEBPS/|is_hierarchy_type=flat|is_task_dir_name_regex=[0-9]*|is_text_type=plain|is_text_file_name_regex=*.txt|is_text_file_relative_path=.|os_job_file_name=test_output.zip|os_job_file_container=zip|os_job_file_hierarchy_type=flat|os_job_file_hierarchy_prefix=OEBPS/mo/" self.assertEqual(jobconf.config_string(), expected)
def test_config_string_full(self): jobconf = JobConfiguration() jobconf.language = Language.IT jobconf.description = "Test description" jobconf.is_audio_file_name_regex = "*.mp3" jobconf.is_audio_file_relative_path = "." jobconf.is_hierarchy_prefix = "OEBPS/" jobconf.is_hierarchy_type = HierarchyType.FLAT jobconf.is_task_directory_name_regex = "[0-9]*" jobconf.is_text_file_format = TextFileFormat.UNPARSED jobconf.is_text_file_name_regex = "*.txt" jobconf.is_text_file_relative_path = "." jobconf.is_text_unparsed_class_regex = "ra" jobconf.is_text_unparsed_id_regex = "f[0-9]*" jobconf.is_text_unparsed_id_sort = IDSortingAlgorithm.NUMERIC jobconf.os_container_format = ContainerFormat.ZIP jobconf.os_hierarchy_prefix = "OEBPS/mo/" jobconf.os_hierarchy_type = HierarchyType.FLAT jobconf.os_file_name = "test_output.zip" expected = "job_description=Test description|job_language=it|is_audio_file_name_regex=*.mp3|is_audio_file_relative_path=.|is_hierarchy_prefix=OEBPS/|is_hierarchy_type=flat|is_task_dir_name_regex=[0-9]*|is_text_type=unparsed|is_text_file_name_regex=*.txt|is_text_file_relative_path=.|is_text_unparsed_class_regex=ra|is_text_unparsed_id_regex=f[0-9]*|is_text_unparsed_id_sort=numeric|os_job_file_name=test_output.zip|os_job_file_container=zip|os_job_file_hierarchy_type=flat|os_job_file_hierarchy_prefix=OEBPS/mo/" self.assertEqual(jobconf.config_string(), expected)
def test_setter_06(self): value = HierarchyType.FLAT jobconf = JobConfiguration() jobconf.is_hierarchy_type = value self.assertEqual(jobconf.is_hierarchy_type, value)
def test_setter_07(self): value = "[0-9]*" jobconf = JobConfiguration() jobconf.is_task_directory_name_regex = value self.assertEqual(jobconf.is_task_directory_name_regex, value)
class ExecuteJobCLI(AbstractCLIProgram): """ Execute a Job, passed as a container or as a container and a configuration string (i.e., from a wizard). """ CONTAINER_FILE = gf.relative_path("res/job.zip", __file__) CONTAINER_FILE_NO_CONFIG = gf.relative_path("res/job_no_config.zip", __file__) OUTPUT_DIRECTORY = "output/" CONFIG_STRING = u"is_hierarchy_type=flat|is_hierarchy_prefix=assets/|is_text_file_relative_path=.|is_text_file_name_regex=.*\.xhtml|is_text_type=unparsed|is_audio_file_relative_path=.|is_audio_file_name_regex=.*\.mp3|is_text_unparsed_id_regex=f[0-9]+|is_text_unparsed_id_sort=numeric|os_job_file_name=demo_sync_job_output|os_job_file_container=zip|os_job_file_hierarchy_type=flat|os_job_file_hierarchy_prefix=assets/|os_task_file_name=\\$PREFIX.xhtml.smil|os_task_file_format=smil|os_task_file_smil_page_ref=\\$PREFIX.xhtml|os_task_file_smil_audio_ref=../Audio/\\$PREFIX.mp3|job_language=eng|job_description=Demo Sync Job" PARAMETERS = JobConfiguration.parameters(sort=True, as_strings=True) NAME = gf.file_name_without_extension(__file__) HELP = { "description": u"Execute a Job, passed as a container.", "synopsis": [(u"--list-parameters", False), (u"CONTAINER OUTPUT_DIR [CONFIG_STRING]", True)], "examples": [ u"%s %s" % (CONTAINER_FILE, OUTPUT_DIRECTORY), u"%s %s --cewsubprocess" % (CONTAINER_FILE, OUTPUT_DIRECTORY), u"%s %s \"%s\"" % (CONTAINER_FILE_NO_CONFIG, OUTPUT_DIRECTORY, CONFIG_STRING) ], "options": [ u"--cewsubprocess : run cew in separate process (see docs)", u"--skip-validator : do not validate the given container and/or config string" ] } def perform_command(self): """ Perform command and return the appropriate exit code. :rtype: int """ if self.has_option([u"--list-parameters"]): return self.print_parameters() if len(self.actual_arguments) < 2: return self.print_help() container_path = self.actual_arguments[0] output_directory_path = self.actual_arguments[1] config_string = None if (len(self.actual_arguments)) > 2 and ( not self.actual_arguments[2].startswith(u"-")): config_string = self.actual_arguments[2] validate = not self.has_option(u"--skip-validator") if self.has_option(u"--cewsubprocess"): self.rconf[RuntimeConfiguration.CEW_SUBPROCESS_ENABLED] = True if not self.check_input_file_or_directory(container_path): return self.ERROR_EXIT_CODE if not self.check_output_directory(output_directory_path): return self.ERROR_EXIT_CODE if validate: try: self.print_info( u"Validating the container (specify --skip-validator to bypass)..." ) validator = Validator(rconf=self.rconf, logger=self.logger) result = validator.check_container(container_path, config_string=config_string) if not result.passed: self.print_error(u"The given container is not valid:") self.print_error(result.pretty_print()) return self.ERROR_EXIT_CODE self.print_info(u"Validating the container... done") except Exception as exc: self.print_error( u"An unexpected error occurred while validating the container:" ) self.print_error(u"%s" % exc) return self.ERROR_EXIT_CODE try: self.print_info(u"Loading job from container...") executor = ExecuteJob(rconf=self.rconf, logger=self.logger) executor.load_job_from_container(container_path, config_string) self.print_info(u"Loading job from container... done") except Exception as exc: self.print_error( u"An unexpected error occurred while loading the job:") self.print_error(u"%s" % exc) return self.ERROR_EXIT_CODE try: self.print_info(u"Executing...") executor.execute() self.print_info(u"Executing... done") except Exception as exc: self.print_error( u"An unexpected error occurred while executing the job:") self.print_error(u"%s" % exc) return self.ERROR_EXIT_CODE try: self.print_info(u"Creating output container...") path = executor.write_output_container(output_directory_path) self.print_info(u"Creating output container... done") self.print_success(u"Created output file '%s'" % path) executor.clean(True) return self.NO_ERROR_EXIT_CODE except Exception as exc: self.print_error( u"An unexpected error occurred while writing the output container:" ) self.print_error(u"%s" % exc) return self.ERROR_EXIT_CODE def print_parameters(self): """ Print the list of parameters and exit. """ self.print_info(u"Available parameters:") self.print_generic(u"\n" + u"\n".join(self.PARAMETERS) + u"\n") return self.HELP_EXIT_CODE
def test_setter_09(self): value = "*.txt" jobconf = JobConfiguration() jobconf.is_text_file_name_regex = value self.assertEqual(jobconf.is_text_file_name_regex, value)
def test_setter_17(self): value = "test_output.zip" jobconf = JobConfiguration() jobconf.os_file_name = value self.assertEqual(jobconf.os_file_name, value)
def test_setter_11(self): value = "ra" jobconf = JobConfiguration() jobconf.is_text_unparsed_class_regex = value self.assertEqual(jobconf.is_text_unparsed_class_regex, value)
def test_setter_13(self): value = IDSortingAlgorithm.NUMERIC jobconf = JobConfiguration() jobconf.is_text_unparsed_id_sort = value self.assertEqual(jobconf.is_text_unparsed_id_sort, value)
def test_setter_01(self): value = Language.IT jobconf = JobConfiguration() jobconf.language = value self.assertEqual(jobconf.language, value)
def test_constructor_from_config_string_plain(self): config_string = u"job_description=Test description|job_language=ita|is_audio_file_name_regex=*.mp3|is_audio_file_relative_path=.|is_hierarchy_prefix=OEBPS/|is_hierarchy_type=flat|is_task_dir_name_regex=[0-9]*|is_text_type=plain|is_text_file_name_regex=*.txt|is_text_file_relative_path=.|os_job_file_name=test_output.zip|os_job_file_container=zip|os_job_file_hierarchy_type=flat|os_job_file_hierarchy_prefix=OEBPS/mo/" jobconf = JobConfiguration(config_string) self.assertEqual(jobconf["language"], Language.ITA) self.assertEqual(jobconf["description"], u"Test description")
def test_setter_02(self): value = "Test description" jobconf = JobConfiguration() jobconf.description = value self.assertEqual(jobconf.description, value)
def test_job_set_configuration(self): job = Job() jobconf = JobConfiguration() job.configuration = jobconf self.assertIsNotNone(job.configuration)
def test_setter_03(self): value = "*.mp3" jobconf = JobConfiguration() jobconf.is_audio_file_name_regex = value self.assertEqual(jobconf.is_audio_file_name_regex, value)