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