Example #1
0
 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)
Example #2
0
 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)
Example #3
0
 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)
Example #4
0
 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)
Example #5
0
 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)
Example #6
0
 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)
Example #7
0
 def test_setter_05(self):
     value = "OEBPS/"
     jobconf = JobConfiguration()
     jobconf.is_hierarchy_prefix = value
     self.assertEqual(jobconf.is_hierarchy_prefix, value)
Example #8
0
 def test_setter_14(self):
     value = ContainerFormat.ZIP
     jobconf = JobConfiguration()
     jobconf.os_container_format = value
     self.assertEqual(jobconf.os_container_format, value)
Example #9
0
 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)
Example #10
0
 def test_setter_10(self):
     value = "."
     jobconf = JobConfiguration()
     jobconf.is_text_file_relative_path = value
     self.assertEqual(jobconf.is_text_file_relative_path, value)
Example #11
0
 def test_setter_08(self):
     value = TextFileFormat.UNPARSED
     jobconf = JobConfiguration()
     jobconf.is_text_file_format = value
     self.assertEqual(jobconf.is_text_file_format, value)
Example #12
0
 def test_job_set_configuration(self):
     job = Job()
     jobconf = JobConfiguration()
     job.configuration = jobconf
     self.assertNotEqual(job.configuration, None)
Example #13
0
 def setter(self, attribute, value):
     jobconf = JobConfiguration()
     setattr(jobconf, attribute, value)
     self.assertEqual(getattr(jobconf, attribute), value)
Example #14
0
 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)
Example #15
0
 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)
Example #16
0
 def test_setter_06(self):
     value = HierarchyType.FLAT
     jobconf = JobConfiguration()
     jobconf.is_hierarchy_type = value
     self.assertEqual(jobconf.is_hierarchy_type, value)
Example #17
0
 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)
Example #18
0
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
Example #19
0
 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)
Example #20
0
 def test_setter_17(self):
     value = "test_output.zip"
     jobconf = JobConfiguration()
     jobconf.os_file_name = value
     self.assertEqual(jobconf.os_file_name, value)
Example #21
0
 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)
Example #22
0
 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)
Example #23
0
 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)
Example #24
0
 def test_setter_01(self):
     value = Language.IT
     jobconf = JobConfiguration()
     jobconf.language = value
     self.assertEqual(jobconf.language, value)
Example #25
0
 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")
Example #26
0
 def test_setter_02(self):
     value = "Test description"
     jobconf = JobConfiguration()
     jobconf.description = value
     self.assertEqual(jobconf.description, value)
Example #27
0
 def test_job_set_configuration(self):
     job = Job()
     jobconf = JobConfiguration()
     job.configuration = jobconf
     self.assertIsNotNone(job.configuration)
Example #28
0
 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)