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