spdx_tools.spdx.validation.snippet_validator
1# SPDX-FileCopyrightText: 2022 spdx contributors 2# 3# SPDX-License-Identifier: Apache-2.0 4 5from beartype.typing import List, Optional 6 7from spdx_tools.spdx.model import Document, Snippet 8from spdx_tools.spdx.validation.license_expression_validator import ( 9 validate_license_expression, 10 validate_license_expressions, 11) 12from spdx_tools.spdx.validation.spdx_id_validators import validate_spdx_id 13from spdx_tools.spdx.validation.validation_message import SpdxElementType, ValidationContext, ValidationMessage 14 15 16def validate_snippets( 17 snippets: List[Snippet], spdx_version: str, document: Optional[Document] = None 18) -> List[ValidationMessage]: 19 validation_messages = [] 20 if document: 21 for snippet in snippets: 22 validation_messages.extend(validate_snippet_within_document(snippet, spdx_version, document)) 23 else: 24 for snippet in snippets: 25 validation_messages.extend(validate_snippet(snippet, spdx_version)) 26 27 return validation_messages 28 29 30def validate_snippet_within_document( 31 snippet: Snippet, spdx_version: str, document: Document 32) -> List[ValidationMessage]: 33 validation_messages: List[ValidationMessage] = [] 34 context = ValidationContext( 35 spdx_id=snippet.spdx_id, 36 parent_id=document.creation_info.spdx_id, 37 element_type=SpdxElementType.SNIPPET, 38 full_element=snippet, 39 ) 40 41 messages: List[str] = validate_spdx_id(snippet.spdx_id, document) 42 for message in messages: 43 validation_messages.append(ValidationMessage(message, context)) 44 45 messages: List[str] = validate_spdx_id(snippet.file_spdx_id, document, check_files=True) 46 for message in messages: 47 validation_messages.append(ValidationMessage(message, context)) 48 49 validation_messages.extend(validate_license_expression(snippet.license_concluded, document, snippet.spdx_id)) 50 51 validation_messages.extend( 52 validate_license_expressions(snippet.license_info_in_snippet, document, snippet.spdx_id) 53 ) 54 55 validation_messages.extend(validate_snippet(snippet, spdx_version, context)) 56 57 return validation_messages 58 59 60def validate_snippet( 61 snippet: Snippet, spdx_version: str, context: Optional[ValidationContext] = None 62) -> List[ValidationMessage]: 63 validation_messages = [] 64 if not context: 65 context = ValidationContext( 66 spdx_id=snippet.spdx_id, element_type=SpdxElementType.SNIPPET, full_element=snippet 67 ) 68 69 if snippet.byte_range[0] < 1: 70 validation_messages.append( 71 ValidationMessage( 72 f"byte_range values must be greater than or equal to 1, but is: {snippet.byte_range}", context 73 ) 74 ) 75 76 if snippet.byte_range[0] > snippet.byte_range[1]: 77 validation_messages.append( 78 ValidationMessage( 79 f"the first value of byte_range must be less than or equal to the second, but is: " 80 f"{snippet.byte_range}", 81 context, 82 ) 83 ) 84 85 if snippet.line_range: 86 if snippet.line_range[0] < 1: 87 validation_messages.append( 88 ValidationMessage( 89 f"line_range values must be greater than or equal to 1, but is: {snippet.line_range}", context 90 ) 91 ) 92 93 if snippet.line_range[0] > snippet.line_range[1]: 94 validation_messages.append( 95 ValidationMessage( 96 f"the first value of line_range must be less than or equal to the second, " 97 f"but is: {snippet.line_range}", 98 context, 99 ) 100 ) 101 102 if spdx_version == "SPDX-2.2": 103 if snippet.license_concluded is None: 104 validation_messages.append(ValidationMessage("license_concluded is mandatory in SPDX-2.2", context)) 105 if snippet.copyright_text is None: 106 validation_messages.append(ValidationMessage("copyright_text is mandatory in SPDX-2.2", context)) 107 108 return validation_messages
def
validate_snippets( snippets: list[spdx_tools.spdx.model.snippet.Snippet], spdx_version: str, document: Optional[spdx_tools.spdx.model.document.Document] = None) -> list[spdx_tools.spdx.validation.validation_message.ValidationMessage]:
17def validate_snippets( 18 snippets: List[Snippet], spdx_version: str, document: Optional[Document] = None 19) -> List[ValidationMessage]: 20 validation_messages = [] 21 if document: 22 for snippet in snippets: 23 validation_messages.extend(validate_snippet_within_document(snippet, spdx_version, document)) 24 else: 25 for snippet in snippets: 26 validation_messages.extend(validate_snippet(snippet, spdx_version)) 27 28 return validation_messages
def
validate_snippet_within_document( snippet: spdx_tools.spdx.model.snippet.Snippet, spdx_version: str, document: spdx_tools.spdx.model.document.Document) -> list[spdx_tools.spdx.validation.validation_message.ValidationMessage]:
31def validate_snippet_within_document( 32 snippet: Snippet, spdx_version: str, document: Document 33) -> List[ValidationMessage]: 34 validation_messages: List[ValidationMessage] = [] 35 context = ValidationContext( 36 spdx_id=snippet.spdx_id, 37 parent_id=document.creation_info.spdx_id, 38 element_type=SpdxElementType.SNIPPET, 39 full_element=snippet, 40 ) 41 42 messages: List[str] = validate_spdx_id(snippet.spdx_id, document) 43 for message in messages: 44 validation_messages.append(ValidationMessage(message, context)) 45 46 messages: List[str] = validate_spdx_id(snippet.file_spdx_id, document, check_files=True) 47 for message in messages: 48 validation_messages.append(ValidationMessage(message, context)) 49 50 validation_messages.extend(validate_license_expression(snippet.license_concluded, document, snippet.spdx_id)) 51 52 validation_messages.extend( 53 validate_license_expressions(snippet.license_info_in_snippet, document, snippet.spdx_id) 54 ) 55 56 validation_messages.extend(validate_snippet(snippet, spdx_version, context)) 57 58 return validation_messages
def
validate_snippet( snippet: spdx_tools.spdx.model.snippet.Snippet, spdx_version: str, context: Optional[spdx_tools.spdx.validation.validation_message.ValidationContext] = None) -> list[spdx_tools.spdx.validation.validation_message.ValidationMessage]:
61def validate_snippet( 62 snippet: Snippet, spdx_version: str, context: Optional[ValidationContext] = None 63) -> List[ValidationMessage]: 64 validation_messages = [] 65 if not context: 66 context = ValidationContext( 67 spdx_id=snippet.spdx_id, element_type=SpdxElementType.SNIPPET, full_element=snippet 68 ) 69 70 if snippet.byte_range[0] < 1: 71 validation_messages.append( 72 ValidationMessage( 73 f"byte_range values must be greater than or equal to 1, but is: {snippet.byte_range}", context 74 ) 75 ) 76 77 if snippet.byte_range[0] > snippet.byte_range[1]: 78 validation_messages.append( 79 ValidationMessage( 80 f"the first value of byte_range must be less than or equal to the second, but is: " 81 f"{snippet.byte_range}", 82 context, 83 ) 84 ) 85 86 if snippet.line_range: 87 if snippet.line_range[0] < 1: 88 validation_messages.append( 89 ValidationMessage( 90 f"line_range values must be greater than or equal to 1, but is: {snippet.line_range}", context 91 ) 92 ) 93 94 if snippet.line_range[0] > snippet.line_range[1]: 95 validation_messages.append( 96 ValidationMessage( 97 f"the first value of line_range must be less than or equal to the second, " 98 f"but is: {snippet.line_range}", 99 context, 100 ) 101 ) 102 103 if spdx_version == "SPDX-2.2": 104 if snippet.license_concluded is None: 105 validation_messages.append(ValidationMessage("license_concluded is mandatory in SPDX-2.2", context)) 106 if snippet.copyright_text is None: 107 validation_messages.append(ValidationMessage("copyright_text is mandatory in SPDX-2.2", context)) 108 109 return validation_messages