spdx_tools.spdx.parser.rdf.extracted_licensing_info_parser

 1# SPDX-FileCopyrightText: 2023 spdx contributors
 2#
 3# SPDX-License-Identifier: Apache-2.0
 4from rdflib import RDFS, Graph, URIRef
 5
 6from spdx_tools.spdx.model import ExtractedLicensingInfo
 7from spdx_tools.spdx.parser.logger import Logger
 8from spdx_tools.spdx.parser.parsing_functions import (
 9    construct_or_raise_parsing_error,
10    raise_parsing_error_if_logger_has_messages,
11)
12from spdx_tools.spdx.parser.rdf.graph_parsing_functions import (
13    get_correctly_typed_triples,
14    parse_literal,
15    parse_literal_or_no_assertion_or_none,
16)
17from spdx_tools.spdx.rdfschema.namespace import SPDX_NAMESPACE
18
19
20def parse_extracted_licensing_info(
21    extracted_licensing_info_node: URIRef, graph: Graph, doc_namespace: str
22) -> ExtractedLicensingInfo:
23    logger = Logger()
24    license_id = parse_literal(logger, graph, extracted_licensing_info_node, SPDX_NAMESPACE.licenseId)
25    if not license_id:
26        license_id = (
27            extracted_licensing_info_node.fragment
28            if extracted_licensing_info_node.startswith(f"{doc_namespace}#")
29            else extracted_licensing_info_node.toPython()
30        )
31
32    extracted_text = parse_literal(logger, graph, extracted_licensing_info_node, SPDX_NAMESPACE.extractedText)
33    comment = parse_literal(logger, graph, extracted_licensing_info_node, RDFS.comment)
34    license_name = parse_literal_or_no_assertion_or_none(
35        logger, graph, extracted_licensing_info_node, SPDX_NAMESPACE.name
36    )
37    cross_references = []
38    for _, _, cross_reference_node in get_correctly_typed_triples(
39        logger, graph, extracted_licensing_info_node, RDFS.seeAlso
40    ):
41        cross_references.append(cross_reference_node.toPython())
42    raise_parsing_error_if_logger_has_messages(logger, "ExtractedLicensingInfo")
43    extracted_licensing_info = construct_or_raise_parsing_error(
44        ExtractedLicensingInfo,
45        dict(
46            license_id=license_id,
47            extracted_text=extracted_text,
48            comment=comment,
49            license_name=license_name,
50            cross_references=cross_references,
51        ),
52    )
53
54    return extracted_licensing_info
def parse_extracted_licensing_info( extracted_licensing_info_node: rdflib.term.URIRef, graph: rdflib.graph.Graph, doc_namespace: str) -> spdx_tools.spdx.model.extracted_licensing_info.ExtractedLicensingInfo:
21def parse_extracted_licensing_info(
22    extracted_licensing_info_node: URIRef, graph: Graph, doc_namespace: str
23) -> ExtractedLicensingInfo:
24    logger = Logger()
25    license_id = parse_literal(logger, graph, extracted_licensing_info_node, SPDX_NAMESPACE.licenseId)
26    if not license_id:
27        license_id = (
28            extracted_licensing_info_node.fragment
29            if extracted_licensing_info_node.startswith(f"{doc_namespace}#")
30            else extracted_licensing_info_node.toPython()
31        )
32
33    extracted_text = parse_literal(logger, graph, extracted_licensing_info_node, SPDX_NAMESPACE.extractedText)
34    comment = parse_literal(logger, graph, extracted_licensing_info_node, RDFS.comment)
35    license_name = parse_literal_or_no_assertion_or_none(
36        logger, graph, extracted_licensing_info_node, SPDX_NAMESPACE.name
37    )
38    cross_references = []
39    for _, _, cross_reference_node in get_correctly_typed_triples(
40        logger, graph, extracted_licensing_info_node, RDFS.seeAlso
41    ):
42        cross_references.append(cross_reference_node.toPython())
43    raise_parsing_error_if_logger_has_messages(logger, "ExtractedLicensingInfo")
44    extracted_licensing_info = construct_or_raise_parsing_error(
45        ExtractedLicensingInfo,
46        dict(
47            license_id=license_id,
48            extracted_text=extracted_text,
49            comment=comment,
50            license_name=license_name,
51            cross_references=cross_references,
52        ),
53    )
54
55    return extracted_licensing_info