From 0e1c9eed5d22b2fb6c73e2588d9e21052f213283 Mon Sep 17 00:00:00 2001 From: Meret Behrens Date: Thu, 22 Feb 2024 17:52:15 +0100 Subject: [PATCH] [issue-798] fix tag-value parser: parse Tool or Organization as annotator Signed-off-by: Meret Behrens --- src/spdx_tools/spdx/parser/tagvalue/parser.py | 2 +- .../parser/tagvalue/test_annotation_parser.py | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/spdx_tools/spdx/parser/tagvalue/parser.py b/src/spdx_tools/spdx/parser/tagvalue/parser.py index 32be1143e..a190dd7d7 100644 --- a/src/spdx_tools/spdx/parser/tagvalue/parser.py +++ b/src/spdx_tools/spdx/parser/tagvalue/parser.py @@ -488,7 +488,7 @@ def p_snippet_range(self, p): # parsing methods for annotation - @grammar_rule("annotator : ANNOTATOR PERSON_VALUE\n| TOOL_VALUE\n| ORGANIZATION_VALUE") + @grammar_rule("annotator : ANNOTATOR PERSON_VALUE\n| ANNOTATOR TOOL_VALUE\n| ANNOTATOR ORGANIZATION_VALUE") def p_annotator(self, p): self.initialize_new_current_element(Annotation) set_value(p, self.current_element, method_to_apply=ActorParser.parse_actor) diff --git a/tests/spdx/parser/tagvalue/test_annotation_parser.py b/tests/spdx/parser/tagvalue/test_annotation_parser.py index 629fe72e9..f10ebe8c6 100644 --- a/tests/spdx/parser/tagvalue/test_annotation_parser.py +++ b/tests/spdx/parser/tagvalue/test_annotation_parser.py @@ -34,6 +34,28 @@ def test_parse_annotation(): assert annotation.spdx_id == DOCUMENT_SPDX_ID +def test_parse_annotation_with_organization_as_annotator(): + parser = Parser() + annotation_str = "\n".join( + [ + "Annotator: Organization: some-organization", + "AnnotationDate: 2010-01-29T18:30:22Z", + "AnnotationComment: Document level annotation", + "AnnotationType: OTHER", + f"SPDXREF: {DOCUMENT_SPDX_ID}", + ] + ) + document = parser.parse("\n".join([DOCUMENT_STR, annotation_str])) + assert document is not None + assert len(document.annotations) == 1 + annotation = document.annotations[0] + assert annotation.annotator.name == "some-organization" + assert annotation.annotation_date == datetime(2010, 1, 29, 18, 30, 22) + assert annotation.annotation_comment == "Document level annotation" + assert annotation.annotation_type == AnnotationType.OTHER + assert annotation.spdx_id == DOCUMENT_SPDX_ID + + @pytest.mark.parametrize( "annotation_str, expected_message", [