spdx_tools.spdx.validation.extracted_licensing_info_validator

 1# SPDX-FileCopyrightText: 2022 spdx contributors
 2#
 3# SPDX-License-Identifier: Apache-2.0
 4
 5import re
 6
 7from beartype.typing import List, Optional
 8
 9from spdx_tools.spdx.model import ExtractedLicensingInfo
10from spdx_tools.spdx.validation.uri_validators import validate_url
11from spdx_tools.spdx.validation.validation_message import SpdxElementType, ValidationContext, ValidationMessage
12
13
14def validate_extracted_licensing_infos(
15    extracted_licensing_infos: Optional[List[ExtractedLicensingInfo]],
16) -> List[ValidationMessage]:
17    validation_messages = []
18    for extracted_licensing_info in extracted_licensing_infos:
19        validation_messages.extend(validate_extracted_licensing_info(extracted_licensing_info))
20
21    return validation_messages
22
23
24def validate_extracted_licensing_info(extracted_licensing_infos: ExtractedLicensingInfo) -> List[ValidationMessage]:
25    validation_messages: List[ValidationMessage] = []
26    context = ValidationContext(
27        element_type=SpdxElementType.EXTRACTED_LICENSING_INFO, full_element=extracted_licensing_infos
28    )
29
30    license_id: str = extracted_licensing_infos.license_id
31    if license_id and not re.match(r"^LicenseRef-[\da-zA-Z.-]+$", license_id):
32        validation_messages.append(
33            ValidationMessage(
34                f'license_id must only contain letters, numbers, "." and "-" and must begin with "LicenseRef-", '
35                f"but is: {license_id}",
36                context,
37            )
38        )
39
40    if license_id and not extracted_licensing_infos.extracted_text:
41        validation_messages.append(
42            ValidationMessage("extracted_text must be provided if there is a license_id assigned", context)
43        )
44
45    for cross_reference in extracted_licensing_infos.cross_references:
46        for message in validate_url(cross_reference):
47            validation_messages.append(ValidationMessage("cross_reference " + message, context))
48
49    return validation_messages
def validate_extracted_licensing_infos( extracted_licensing_infos: Optional[list[spdx_tools.spdx.model.extracted_licensing_info.ExtractedLicensingInfo]]) -> list[spdx_tools.spdx.validation.validation_message.ValidationMessage]:
15def validate_extracted_licensing_infos(
16    extracted_licensing_infos: Optional[List[ExtractedLicensingInfo]],
17) -> List[ValidationMessage]:
18    validation_messages = []
19    for extracted_licensing_info in extracted_licensing_infos:
20        validation_messages.extend(validate_extracted_licensing_info(extracted_licensing_info))
21
22    return validation_messages
def validate_extracted_licensing_info( extracted_licensing_infos: spdx_tools.spdx.model.extracted_licensing_info.ExtractedLicensingInfo) -> list[spdx_tools.spdx.validation.validation_message.ValidationMessage]:
25def validate_extracted_licensing_info(extracted_licensing_infos: ExtractedLicensingInfo) -> List[ValidationMessage]:
26    validation_messages: List[ValidationMessage] = []
27    context = ValidationContext(
28        element_type=SpdxElementType.EXTRACTED_LICENSING_INFO, full_element=extracted_licensing_infos
29    )
30
31    license_id: str = extracted_licensing_infos.license_id
32    if license_id and not re.match(r"^LicenseRef-[\da-zA-Z.-]+$", license_id):
33        validation_messages.append(
34            ValidationMessage(
35                f'license_id must only contain letters, numbers, "." and "-" and must begin with "LicenseRef-", '
36                f"but is: {license_id}",
37                context,
38            )
39        )
40
41    if license_id and not extracted_licensing_infos.extracted_text:
42        validation_messages.append(
43            ValidationMessage("extracted_text must be provided if there is a license_id assigned", context)
44        )
45
46    for cross_reference in extracted_licensing_infos.cross_references:
47        for message in validate_url(cross_reference):
48            validation_messages.append(ValidationMessage("cross_reference " + message, context))
49
50    return validation_messages