spdx_tools.spdx.parser.rdf.checksum_parser
1# SPDX-FileCopyrightText: 2023 spdx contributors 2# 3# SPDX-License-Identifier: Apache-2.0 4from rdflib import BNode, Graph 5 6from spdx_tools.spdx.model import Checksum, ChecksumAlgorithm 7from spdx_tools.spdx.parser.error import SPDXParsingError 8from spdx_tools.spdx.parser.logger import Logger 9from spdx_tools.spdx.parser.parsing_functions import ( 10 construct_or_raise_parsing_error, 11 raise_parsing_error_if_logger_has_messages, 12) 13from spdx_tools.spdx.parser.rdf.graph_parsing_functions import parse_literal, remove_prefix 14from spdx_tools.spdx.rdfschema.namespace import SPDX_NAMESPACE 15 16 17def parse_checksum(parent_node: BNode, graph: Graph) -> Checksum: 18 logger = Logger() 19 algorithm = parse_literal( 20 logger, graph, parent_node, SPDX_NAMESPACE.algorithm, parsing_method=convert_rdf_to_algorithm 21 ) 22 value = parse_literal(logger, graph, parent_node, SPDX_NAMESPACE.checksumValue) 23 24 raise_parsing_error_if_logger_has_messages(logger, "Checksum") 25 checksum = construct_or_raise_parsing_error(Checksum, dict(algorithm=algorithm, value=value)) 26 return checksum 27 28 29def convert_rdf_to_algorithm(algorithm: str) -> ChecksumAlgorithm: 30 algorithm = remove_prefix(algorithm, SPDX_NAMESPACE.checksumAlgorithm_).upper() 31 if "BLAKE2B" in algorithm: 32 algorithm = algorithm.replace("BLAKE2B", "BLAKE2B_") 33 try: 34 checksum = ChecksumAlgorithm[algorithm] 35 except KeyError: 36 raise SPDXParsingError([f"Invalid value for ChecksumAlgorithm: {algorithm}"]) 37 return checksum
def
parse_checksum( parent_node: rdflib.term.BNode, graph: rdflib.graph.Graph) -> spdx_tools.spdx.model.checksum.Checksum:
18def parse_checksum(parent_node: BNode, graph: Graph) -> Checksum: 19 logger = Logger() 20 algorithm = parse_literal( 21 logger, graph, parent_node, SPDX_NAMESPACE.algorithm, parsing_method=convert_rdf_to_algorithm 22 ) 23 value = parse_literal(logger, graph, parent_node, SPDX_NAMESPACE.checksumValue) 24 25 raise_parsing_error_if_logger_has_messages(logger, "Checksum") 26 checksum = construct_or_raise_parsing_error(Checksum, dict(algorithm=algorithm, value=value)) 27 return checksum
30def convert_rdf_to_algorithm(algorithm: str) -> ChecksumAlgorithm: 31 algorithm = remove_prefix(algorithm, SPDX_NAMESPACE.checksumAlgorithm_).upper() 32 if "BLAKE2B" in algorithm: 33 algorithm = algorithm.replace("BLAKE2B", "BLAKE2B_") 34 try: 35 checksum = ChecksumAlgorithm[algorithm] 36 except KeyError: 37 raise SPDXParsingError([f"Invalid value for ChecksumAlgorithm: {algorithm}"]) 38 return checksum