forked from spdx/tools-python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathextracted_licensing_info_parser.py
More file actions
51 lines (46 loc) · 2.03 KB
/
Copy pathextracted_licensing_info_parser.py
File metadata and controls
51 lines (46 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# SPDX-FileCopyrightText: 2023 spdx contributors
#
# SPDX-License-Identifier: Apache-2.0
from rdflib import RDFS, Graph, URIRef
from spdx.model.extracted_licensing_info import ExtractedLicensingInfo
from spdx.parser.logger import Logger
from spdx.parser.parsing_functions import construct_or_raise_parsing_error, raise_parsing_error_if_logger_has_messages
from spdx.parser.rdf.graph_parsing_functions import (
get_correctly_typed_triples,
parse_literal,
parse_literal_or_no_assertion_or_none,
)
from spdx.rdfschema.namespace import SPDX_NAMESPACE
def parse_extracted_licensing_info(
extracted_licensing_info_node: URIRef, graph: Graph, doc_namespace: str
) -> ExtractedLicensingInfo:
logger = Logger()
license_id = parse_literal(logger, graph, extracted_licensing_info_node, SPDX_NAMESPACE.licenseId)
if not license_id:
license_id = (
extracted_licensing_info_node.fragment
if extracted_licensing_info_node.startswith(f"{doc_namespace}#")
else extracted_licensing_info_node.toPython()
)
extracted_text = parse_literal(logger, graph, extracted_licensing_info_node, SPDX_NAMESPACE.extractedText)
comment = parse_literal(logger, graph, extracted_licensing_info_node, RDFS.comment)
license_name = parse_literal_or_no_assertion_or_none(
logger, graph, extracted_licensing_info_node, SPDX_NAMESPACE.name
)
cross_references = []
for _, _, cross_reference_node in get_correctly_typed_triples(
logger, graph, extracted_licensing_info_node, RDFS.seeAlso
):
cross_references.append(cross_reference_node.toPython())
raise_parsing_error_if_logger_has_messages(logger, "ExtractedLicensingInfo")
extracted_licensing_info = construct_or_raise_parsing_error(
ExtractedLicensingInfo,
dict(
license_id=license_id,
extracted_text=extracted_text,
comment=comment,
license_name=license_name,
cross_references=cross_references,
),
)
return extracted_licensing_info