spdx_tools.spdx.validation.external_document_ref_validator

 1# SPDX-FileCopyrightText: 2022 spdx contributors
 2#
 3# SPDX-License-Identifier: Apache-2.0
 4
 5from beartype.typing import List
 6
 7from spdx_tools.spdx.model import ExternalDocumentRef
 8from spdx_tools.spdx.validation.checksum_validator import validate_checksum
 9from spdx_tools.spdx.validation.spdx_id_validators import is_valid_external_doc_ref_id
10from spdx_tools.spdx.validation.uri_validators import validate_uri
11from spdx_tools.spdx.validation.validation_message import SpdxElementType, ValidationContext, ValidationMessage
12
13
14def validate_external_document_refs(
15    external_document_refs: List[ExternalDocumentRef], parent_id: str, spdx_version: str
16) -> List[ValidationMessage]:
17    validation_messages = []
18    for external_document_ref in external_document_refs:
19        validation_messages.extend(validate_external_document_ref(external_document_ref, parent_id, spdx_version))
20
21    return validation_messages
22
23
24def validate_external_document_ref(
25    external_document_ref: ExternalDocumentRef, parent_id: str, spdx_version: str
26) -> List[ValidationMessage]:
27    validation_messages = []
28    context = ValidationContext(
29        parent_id=parent_id, element_type=SpdxElementType.EXTERNAL_DOCUMENT_REF, full_element=external_document_ref
30    )
31
32    if not is_valid_external_doc_ref_id(external_document_ref.document_ref_id):
33        validation_messages.append(
34            ValidationMessage(
35                f'document_ref_id must only contain letters, numbers, ".", "-" and "+" and must begin with '
36                f'"DocumentRef-", but is: {external_document_ref.document_ref_id}',
37                context,
38            )
39        )
40
41    for message in validate_uri(external_document_ref.document_uri):
42        validation_messages.append(ValidationMessage("document_uri " + message, context))
43
44    validation_messages.extend(validate_checksum(external_document_ref.checksum, parent_id, spdx_version))
45
46    return validation_messages
def validate_external_document_refs( external_document_refs: list[spdx_tools.spdx.model.external_document_ref.ExternalDocumentRef], parent_id: str, spdx_version: str) -> list[spdx_tools.spdx.validation.validation_message.ValidationMessage]:
15def validate_external_document_refs(
16    external_document_refs: List[ExternalDocumentRef], parent_id: str, spdx_version: str
17) -> List[ValidationMessage]:
18    validation_messages = []
19    for external_document_ref in external_document_refs:
20        validation_messages.extend(validate_external_document_ref(external_document_ref, parent_id, spdx_version))
21
22    return validation_messages
def validate_external_document_ref( external_document_ref: spdx_tools.spdx.model.external_document_ref.ExternalDocumentRef, parent_id: str, spdx_version: str) -> list[spdx_tools.spdx.validation.validation_message.ValidationMessage]:
25def validate_external_document_ref(
26    external_document_ref: ExternalDocumentRef, parent_id: str, spdx_version: str
27) -> List[ValidationMessage]:
28    validation_messages = []
29    context = ValidationContext(
30        parent_id=parent_id, element_type=SpdxElementType.EXTERNAL_DOCUMENT_REF, full_element=external_document_ref
31    )
32
33    if not is_valid_external_doc_ref_id(external_document_ref.document_ref_id):
34        validation_messages.append(
35            ValidationMessage(
36                f'document_ref_id must only contain letters, numbers, ".", "-" and "+" and must begin with '
37                f'"DocumentRef-", but is: {external_document_ref.document_ref_id}',
38                context,
39            )
40        )
41
42    for message in validate_uri(external_document_ref.document_uri):
43        validation_messages.append(ValidationMessage("document_uri " + message, context))
44
45    validation_messages.extend(validate_checksum(external_document_ref.checksum, parent_id, spdx_version))
46
47    return validation_messages