spdx_tools.spdx.parser.rdf.annotation_parser

 1# SPDX-FileCopyrightText: 2023 spdx contributors
 2#
 3# SPDX-License-Identifier: Apache-2.0
 4from rdflib import RDFS, BNode, Graph, URIRef
 5
 6from spdx_tools.spdx.datetime_conversions import datetime_from_str
 7from spdx_tools.spdx.model import Annotation, AnnotationType
 8from spdx_tools.spdx.parser.actor_parser import ActorParser
 9from spdx_tools.spdx.parser.logger import Logger
10from spdx_tools.spdx.parser.parsing_functions import (
11    construct_or_raise_parsing_error,
12    raise_parsing_error_if_logger_has_messages,
13)
14from spdx_tools.spdx.parser.rdf.graph_parsing_functions import parse_enum_value, parse_literal, parse_spdx_id
15from spdx_tools.spdx.rdfschema.namespace import SPDX_NAMESPACE
16
17
18def parse_annotation(annotation_node: BNode, graph: Graph, parent_node: URIRef, doc_namespace: str) -> Annotation:
19    logger = Logger()
20    spdx_id = parse_spdx_id(parent_node, doc_namespace, graph)
21    annotator = parse_literal(
22        logger, graph, annotation_node, SPDX_NAMESPACE.annotator, parsing_method=ActorParser.parse_actor
23    )
24    annotation_type = parse_literal(
25        logger,
26        graph,
27        annotation_node,
28        SPDX_NAMESPACE.annotationType,
29        parsing_method=lambda x: parse_enum_value(x, AnnotationType, SPDX_NAMESPACE.annotationType_),
30    )
31    annotation_date = parse_literal(
32        logger, graph, annotation_node, SPDX_NAMESPACE.annotationDate, parsing_method=datetime_from_str
33    )
34    annotation_comment = parse_literal(logger, graph, annotation_node, RDFS.comment)
35
36    raise_parsing_error_if_logger_has_messages(logger, "Annotation")
37    annotation = construct_or_raise_parsing_error(
38        Annotation,
39        dict(
40            spdx_id=spdx_id,
41            annotation_type=annotation_type,
42            annotator=annotator,
43            annotation_date=annotation_date,
44            annotation_comment=annotation_comment,
45        ),
46    )
47
48    return annotation
def parse_annotation( annotation_node: rdflib.term.BNode, graph: rdflib.graph.Graph, parent_node: rdflib.term.URIRef, doc_namespace: str) -> spdx_tools.spdx.model.annotation.Annotation:
19def parse_annotation(annotation_node: BNode, graph: Graph, parent_node: URIRef, doc_namespace: str) -> Annotation:
20    logger = Logger()
21    spdx_id = parse_spdx_id(parent_node, doc_namespace, graph)
22    annotator = parse_literal(
23        logger, graph, annotation_node, SPDX_NAMESPACE.annotator, parsing_method=ActorParser.parse_actor
24    )
25    annotation_type = parse_literal(
26        logger,
27        graph,
28        annotation_node,
29        SPDX_NAMESPACE.annotationType,
30        parsing_method=lambda x: parse_enum_value(x, AnnotationType, SPDX_NAMESPACE.annotationType_),
31    )
32    annotation_date = parse_literal(
33        logger, graph, annotation_node, SPDX_NAMESPACE.annotationDate, parsing_method=datetime_from_str
34    )
35    annotation_comment = parse_literal(logger, graph, annotation_node, RDFS.comment)
36
37    raise_parsing_error_if_logger_has_messages(logger, "Annotation")
38    annotation = construct_or_raise_parsing_error(
39        Annotation,
40        dict(
41            spdx_id=spdx_id,
42            annotation_type=annotation_type,
43            annotator=annotator,
44            annotation_date=annotation_date,
45            annotation_comment=annotation_comment,
46        ),
47    )
48
49    return annotation