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
def convert_rdf_to_algorithm(algorithm: str) -> spdx_tools.spdx.model.checksum.ChecksumAlgorithm:
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