Exemplo n.º 1
0
    def test_rule_allowed_patterns(self):
        """Parse an xml element with a text value not compliant to the provided regexpattern, and ensure that the correct validation message is applied."""

        validation_result = validify.validate(
            "validify/tests/test_rule_allowed_patterns.xml",
            validation_rules=compile_test_rules(),
            log_to_console=False)
        assert len(validation_result) == 0
Exemplo n.º 2
0
    def test_rule_optional_subelements(self):
        """Parse an xml element with an invalid subelement and ensure that the correct validation message is applied."""

        validation_result = validify.validate(
            "validify/tests/test_rule_optional_subelements.xml",
            validation_rules=compile_test_rules(),
            log_to_console=False)
        assert len(validation_result) == 1
        if len(validation_result) > 0:
            assert validation_result[0]["message_id"] == "0005"
Exemplo n.º 3
0
    def test_rule_obligatory_attributes(self):
        """Parse an xml element with a missing obligatory attribute and ensure that the correct validation message is applied."""

        validation_result = validify.validate(
            "validify/tests/test_rule_obligatory_attributes.xml",
            validation_rules=compile_test_rules(),
            log_to_console=False)
        assert len(validation_result) == 1
        if len(validation_result) > 0:
            assert validation_result[0]["message_id"] == "0004"
Exemplo n.º 4
0
    def test_root_element_namespace_evaluation(self):
        """Parse an xml document, evaluate the root element and ensure that the correct validation message is applied."""

        validation_result = validify.validate(
            "validify/tests/test_root_element_namespace_evaluation.xml",
            validation_rules=compile_test_rules(),
            log_to_console=False)
        assert len(validation_result) == 1
        if len(validation_result) == 1:
            assert validation_result[0]["message_id"] == "s0002"
Exemplo n.º 5
0
    def test_non_wellformed_input_file(self):
        """Parse a non-wellformed XML document and ensure that the correct validation message is applied."""

        validation_result = validify.validate(
            "validify/tests/test_non_wellformed_input_file.xml",
            validation_rules=compile_test_rules(),
            log_to_console=False)
        assert len(validation_result) == 1
        if len(validation_result) == 1:
            assert validation_result[0]["message_id"] == "e0001"
Exemplo n.º 6
0
    def test_attribute_definition_allowed_values(self):
        """Parse an xml element with a non-allowed attribute value, and ensure that the correct validation message is applied."""

        validation_result = validify.validate(
            "validify/tests/test_attribute_definition_allowed_values.xml",
            validation_rules=compile_test_rules(),
            log_to_console=False)
        assert len(validation_result) == 1
        if len(validation_result) > 0:
            assert validation_result[0]["message_id"] == "0012"
Exemplo n.º 7
0
    def test_rule_allowed_values(self):
        """Parse an xml element which has an invalid text value and ensure that the correct validation message is applied."""

        validation_result = validify.validate(
            "validify/tests/test_rule_allowed_values.xml",
            validation_rules=compile_test_rules(),
            log_to_console=False)
        assert len(validation_result) == 1
        if len(validation_result) > 0:
            assert validation_result[0]["message_id"] == "0010"
Exemplo n.º 8
0
    def test_ruleset_condition_reference_elements(self):
        """Parse an xml element where the conditions for the defined reference element are not met and check if the validation rule is rightly skipped.

        These tests starting with "test_ruleset_condition" are meant to assert whether the conditions set for applying a ruleset are correctly evaluated.
        """

        validation_result = validify.validate(
            "validify/tests/test_rule_condition_reference_elements.xml",
            validation_rules=compile_test_rules(),
            log_to_console=False)
        assert len(validation_result) == 0
Exemplo n.º 9
0
    def test_ruleset_condition_attribute_values(self):
        """Parse an xml element with an invalid attribute value and check if the validation rule is skipped correctly.

        These tests starting with "test_ruleset_condition" are meant to assert whether the conditions set for applying a ruleset are correctly evaluated.
        """

        validation_result = validify.validate(
            "validify/tests/test_rule_condition_attribute_values.xml",
            validation_rules=compile_test_rules(),
            log_to_console=False)
        assert len(validation_result) == 0
Exemplo n.º 10
0
    def test_non_valid_elementtree_input(self):
        """Pass a non-valid value (string) as ElementTree input parameter. Ensure that the resulting exception is handled."""

        validation_result = validify.validate(
            input_elementtree="1234",
            validation_rules=compile_test_rules(),
            log_to_console=False)

        assert len(validation_result) == 1
        if len(validation_result) == 1:
            assert validation_result[0]["message_id"] == "e0002"
Exemplo n.º 11
0
    def test_attribute_definition_allowed_patterns(self):
        """Parse an xml element with an attribute value not compliant to the provided regexpattern, and ensure that the correct validation message is applied."""

        validation_result = validify.validate(
            "validify/tests/test_attribute_definition_allowed_patterns.xml",
            validation_rules=compile_test_rules(),
            log_to_console=False)
        assert len(validation_result) == 2
        if len(validation_result) == 2:
            assert validation_result[0]["message_id"] == "0012"
            assert validation_result[1]["message_id"] == "0013"
Exemplo n.º 12
0
    def test_rule_character_content_allowed(self):
        """Parse an xml element which has character content (while not allowed in the rule definition) and ensure that the correct validation message is applied."""

        validation_result = validify.validate(
            "validify/tests/test_rule_character_content_allowed.xml",
            validation_rules=compile_test_rules(),
            log_to_console=False)
        assert len(validation_result) == 2
        if len(validation_result) == 2:
            assert validation_result[0]["message_id"] == "0008"
            assert validation_result[1]["message_id"] == "0009"
Exemplo n.º 13
0
    def test_rule_max_occurence(self):
        """Parse an xml element which occurs more often than allowed, and ensure that the correct validation message is applied."""

        validation_result = validify.validate(
            "validify/tests/test_rule_max_occurence.xml",
            validation_rules=compile_test_rules(),
            log_to_console=False)
        assert len(validation_result) == 3
        if len(validation_result) == 3:
            assert validation_result[0]["message_id"] == "0007"
            assert validation_result[1]["message_id"] == "0007"
            assert validation_result[2]["message_id"] == "0007"
Exemplo n.º 14
0
    def test_elementtree_input(self):
        """Parse an ElementTree object, and ensure that rules are correctly applied to the document elements.

        See ./test_valid_elementtree_input.xml for an XML representation of the ElementTree example object.
        """

        xml_root_element = etree.Element("test_example")
        xml_test_element = etree.SubElement(xml_root_element, "value_test")
        xml_test_element.text = "invalid value"
        xml_tree = etree.ElementTree(xml_root_element)

        validation_result = validify.validate(
            input_elementtree=xml_tree,
            validation_rules=compile_test_rules(),
            log_to_console=False)

        assert len(validation_result) == 1
        if len(validation_result) == 1:
            assert validation_result[0]["message_id"] == "0010"
def handle_validation(root_path: str, input_files: list, rule_definition: str):
    """Übergebene Liste von Input-Dateien an validify übergeben, Validierungsergebnisse pro Datei als List sammeln und in Gesamt-Liste zusammennführen.

    Überführen in ein Pandas DataFrame und Aggregrieren der Validierungsergebnisse (mehrere Vorkommen zusammenfassen).
    Übergabe der Validierungsergebnisse an Template-Erzeugung.
    """
    timer_start = datetime.datetime.now()

    # Zurücksetzen des Prozessierungs-Status:
    write_processing_status(root_path=root_path,
                            processing_step=None,
                            status_message=None,
                            error_status=0)
    error_status = 0

    validation_rules_findbuch = eadddb_findbuch.compile_validation_rules()
    validation_rules_tektonik = eadddb_tektonik.compile_validation_rules()

    ext = [".xml", ".XML"]
    validation_results = []
    input_files_count = len(input_files)

    for input_file_i, input_file in enumerate(input_files):
        if handle_thread_actions.load_from_xml("stop_thread",
                                               root_path) is True:
            break
        validation_progress = int((input_file_i / input_files_count) * 100)
        write_processing_status(
            root_path=root_path,
            processing_step=validation_progress,
            status_message="Validierung läuft für Datei {} ({}/{})".format(
                input_file, input_file_i + 1, input_files_count),
            error_status=error_status)
        if input_file.endswith(tuple(ext)):
            validation_results_single = []
            if rule_definition == "eadddb_findbuch":
                validation_results_single = validify.validate(
                    input_file,
                    validation_rules=validation_rules_findbuch,
                    log_to_console=False)
            elif rule_definition == "eadddb_tektonik":
                validation_results_single = validify.validate(
                    input_file,
                    validation_rules=validation_rules_tektonik,
                    log_to_console=False)

            for item in validation_results_single:
                item.update({"input_file": input_file})
            validation_results.extend(validation_results_single)

    timer_end = datetime.datetime.now()
    processing_duration = timer_end - timer_start
    logger.debug("Prozessierungsdauer (Validierung - validify): {}".format(
        processing_duration))

    # Aggregrieren der Validierungsergebnisse (mehrere Vorkommen zusammenfassen)
    timer_start = datetime.datetime.now()
    aggregated_validation_results = []

    if len(validation_results) > 0:
        validation_results_dataframe = pd.DataFrame(validation_results)
        validation_results_dataframe[
            'aggregated_details'] = validation_results_dataframe[
                "element_local_name"].astype(
                    str
                ) + ";" + validation_results_dataframe["input_file"].astype(
                    str) + ";" + validation_results_dataframe[
                        "element_sourceline"].astype(
                            str) + ";" + validation_results_dataframe[
                                "element_path"].astype(str)

        aggregated_validation_results = (validation_results_dataframe.groupby(
            ['message_id',
             'element_name']).agg(set).reset_index().to_dict('r'))

    timer_end = datetime.datetime.now()
    processing_duration = timer_end - timer_start
    logger.debug("Prozessierungsdauer (Validierung - pandas): {}".format(
        processing_duration))

    # Serialisierung der Validierungsergebnisse
    timer_start = datetime.datetime.now()

    serialize_validation_results.export_to_html(aggregated_validation_results)

    timer_end = datetime.datetime.now()
    write_processing_status(root_path=root_path,
                            processing_step=100,
                            status_message="Validierung abgeschlossen.",
                            error_status=error_status)
    processing_duration = timer_end - timer_start
    logger.debug(
        "Prozessierungsdauer (Validierung - HTML-Serialisierung): {}".format(
            processing_duration))