diff --git a/src/spdx/constants.py b/src/spdx/constants.py new file mode 100644 index 000000000..167f98951 --- /dev/null +++ b/src/spdx/constants.py @@ -0,0 +1,4 @@ +# SPDX-FileCopyrightText: 2023 spdx contributors +# +# SPDX-License-Identifier: Apache-2.0 +DOCUMENT_SPDX_ID = "SPDXRef-DOCUMENT" diff --git a/src/spdx/parser/rdf/creation_info_parser.py b/src/spdx/parser/rdf/creation_info_parser.py index 3e11589fa..5254d3a10 100644 --- a/src/spdx/parser/rdf/creation_info_parser.py +++ b/src/spdx/parser/rdf/creation_info_parser.py @@ -10,6 +10,7 @@ from rdflib.exceptions import UniquenessError from rdflib.term import URIRef +from spdx.constants import DOCUMENT_SPDX_ID from spdx.datetime_conversions import datetime_from_str from spdx.model.document import CreationInfo from spdx.model.external_document_ref import ExternalDocumentRef @@ -98,7 +99,7 @@ def parse_namespace_and_spdx_id(graph: Graph) -> (str, str): if "#" not in subject: logging.error( "No '#' found in the URI of SpdxDocument, " - "the URI for the SpdxDocument should be the namespace appended by '#SPDXRef-DOCUMENT." + f"the URI for the SpdxDocument should be the namespace appended by '#{DOCUMENT_SPDX_ID}." ) sys.exit(1) @@ -106,7 +107,8 @@ def parse_namespace_and_spdx_id(graph: Graph) -> (str, str): if not namespace: logging.error( - "No namespace found, the URI for the SpdxDocument should be the namespace appended by '#SPDXRef-DOCUMENT." + f"No namespace found, the URI for the SpdxDocument should be the namespace appended by " + f"'#{DOCUMENT_SPDX_ID}." ) sys.exit(1) diff --git a/src/spdx/validation/creation_info_validator.py b/src/spdx/validation/creation_info_validator.py index 00e4a279e..9cb4e1259 100644 --- a/src/spdx/validation/creation_info_validator.py +++ b/src/spdx/validation/creation_info_validator.py @@ -4,6 +4,7 @@ from typing import List +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.document import CreationInfo from spdx.validation.actor_validator import validate_actors from spdx.validation.external_document_ref_validator import validate_external_document_refs @@ -16,9 +17,9 @@ def validate_creation_info(creation_info: CreationInfo, spdx_version: str) -> Li context = ValidationContext(spdx_id=creation_info.spdx_id, element_type=SpdxElementType.DOCUMENT) - if creation_info.spdx_id != "SPDXRef-DOCUMENT": + if creation_info.spdx_id != DOCUMENT_SPDX_ID: validation_messages.append( - ValidationMessage(f'spdx_id must be "SPDXRef-DOCUMENT", but is: {creation_info.spdx_id}', context) + ValidationMessage(f"spdx_id must be {DOCUMENT_SPDX_ID}, but is: {creation_info.spdx_id}", context) ) if creation_info.data_license != "CC0-1.0": diff --git a/tests/spdx/fixtures.py b/tests/spdx/fixtures.py index 7800221e7..5d58b9fbf 100644 --- a/tests/spdx/fixtures.py +++ b/tests/spdx/fixtures.py @@ -5,6 +5,7 @@ from license_expression import get_spdx_licensing +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.actor import Actor, ActorType from spdx.model.annotation import Annotation, AnnotationType from spdx.model.checksum import Checksum, ChecksumAlgorithm @@ -46,7 +47,7 @@ def package_verification_code_fixture( def creation_info_fixture( spdx_version="SPDX-2.3", - spdx_id="SPDXRef-DOCUMENT", + spdx_id=DOCUMENT_SPDX_ID, name="documentName", document_namespace="https://some.namespace", creators=None, @@ -264,7 +265,7 @@ def extracted_licensing_info_fixture( def relationship_fixture( - spdx_element_id="SPDXRef-DOCUMENT", + spdx_element_id=DOCUMENT_SPDX_ID, relationship_type=RelationshipType.DESCRIBES, related_spdx_element_id="SPDXRef-File", comment="relationshipComment", diff --git a/tests/spdx/parser/jsonlikedict/test_annotation_parser.py b/tests/spdx/parser/jsonlikedict/test_annotation_parser.py index 13ed71ca9..1b6297eaf 100644 --- a/tests/spdx/parser/jsonlikedict/test_annotation_parser.py +++ b/tests/spdx/parser/jsonlikedict/test_annotation_parser.py @@ -6,6 +6,7 @@ import pytest +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.actor import Actor, ActorType from spdx.model.annotation import Annotation, AnnotationType from spdx.parser.error import SPDXParsingError @@ -21,19 +22,19 @@ def test_parse_annotation(): "comment": "Document level annotation", } - annotation = annotation_parser.parse_annotation(annotation_dict, spdx_id="SPDXRef-DOCUMENT") + annotation = annotation_parser.parse_annotation(annotation_dict, spdx_id=DOCUMENT_SPDX_ID) assert annotation.annotator == Actor(ActorType.PERSON, name="Jane Doe") assert annotation.annotation_type == AnnotationType.OTHER assert annotation.annotation_date == datetime.datetime(2010, 1, 29, 18, 30, 22) assert annotation.annotation_comment == "Document level annotation" - assert annotation.spdx_id == "SPDXRef-DOCUMENT" + assert annotation.spdx_id == DOCUMENT_SPDX_ID def test_parse_all_annotations(): annotation_parser = AnnotationParser() doc_dict = { - "SPDXID": "SPDXRef-DOCUMENT", + "SPDXID": DOCUMENT_SPDX_ID, "packages": [ { "SPDXID": "SPDXRef-Package", @@ -87,7 +88,7 @@ def test_parse_all_annotations(): annotations, [ Annotation( - spdx_id="SPDXRef-DOCUMENT", + spdx_id=DOCUMENT_SPDX_ID, annotation_type=AnnotationType.REVIEW, annotator=Actor(actor_type=ActorType.PERSON, name="Jane Doe", email=None), annotation_date=datetime.datetime(2010, 1, 29, 18, 30, 22), diff --git a/tests/spdx/parser/jsonlikedict/test_creation_info_parser.py b/tests/spdx/parser/jsonlikedict/test_creation_info_parser.py index e60d9ff3e..a77dbba7a 100644 --- a/tests/spdx/parser/jsonlikedict/test_creation_info_parser.py +++ b/tests/spdx/parser/jsonlikedict/test_creation_info_parser.py @@ -6,6 +6,7 @@ import pytest +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.actor import Actor, ActorType from spdx.model.checksum import Checksum, ChecksumAlgorithm from spdx.model.external_document_ref import ExternalDocumentRef @@ -18,7 +19,7 @@ def test_parse_creation_info(): creation_info_parser = CreationInfoParser() doc_dict = { "spdxVersion": "2.3", - "SPDXID": "SPDXRef-DOCUMENT", + "SPDXID": DOCUMENT_SPDX_ID, "name": "Example Document", "dataLicense": "CC0-1.0", "documentNamespace": "namespace", @@ -39,7 +40,7 @@ def test_parse_creation_info(): creation_info = creation_info_parser.parse_creation_info(doc_dict) assert creation_info.spdx_version == "2.3" - assert creation_info.spdx_id == "SPDXRef-DOCUMENT" + assert creation_info.spdx_id == DOCUMENT_SPDX_ID assert creation_info.name == "Example Document" assert creation_info.document_namespace == "namespace" assert creation_info.created == datetime(2010, 1, 29, 18, 30, 22) @@ -65,7 +66,7 @@ def test_parse_creation_info(): "incomplete_dict,expected_message", [ ( - {"spdxVersion": "2.3", "SPDXID": "SPDXRef-DOCUMENT", "name": "Example Document"}, + {"spdxVersion": "2.3", "SPDXID": DOCUMENT_SPDX_ID, "name": "Example Document"}, ["Error while parsing document Example Document: ['CreationInfo does not exist.']"], ), ( @@ -98,7 +99,7 @@ def test_parse_invalid_creation_info(): creation_info_parser = CreationInfoParser() doc_dict = { "spdxVersion": "2.3", - "SPDXID": "SPDXRef-DOCUMENT", + "SPDXID": DOCUMENT_SPDX_ID, "name": "Example Document", "creationInfo": { "created": "2010-01-29T18:30:22Z", diff --git a/tests/spdx/parser/jsonlikedict/test_relationship_parser.py b/tests/spdx/parser/jsonlikedict/test_relationship_parser.py index 8a77e64b5..af394ef78 100644 --- a/tests/spdx/parser/jsonlikedict/test_relationship_parser.py +++ b/tests/spdx/parser/jsonlikedict/test_relationship_parser.py @@ -5,6 +5,7 @@ import pytest +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.relationship import Relationship, RelationshipType from spdx.model.spdx_no_assertion import SpdxNoAssertion from spdx.parser.error import SPDXParsingError @@ -15,7 +16,7 @@ def test_parse_relationship(): relationship_parser = RelationshipParser() relationship_dict = { - "spdxElementId": "SPDXRef-DOCUMENT", + "spdxElementId": DOCUMENT_SPDX_ID, "relationshipType": "CONTAINS", "relatedSpdxElement": "NOASSERTION", "comment": "Comment.", @@ -24,7 +25,7 @@ def test_parse_relationship(): relationship = relationship_parser.parse_relationship(relationship_dict) assert relationship.relationship_type == RelationshipType.CONTAINS - assert relationship.spdx_element_id == "SPDXRef-DOCUMENT" + assert relationship.spdx_element_id == DOCUMENT_SPDX_ID assert relationship.related_spdx_element_id == SpdxNoAssertion() assert relationship.comment == "Comment." @@ -32,7 +33,7 @@ def test_parse_relationship(): def test_parse_incomplete_relationship(): relationship_parser = RelationshipParser() relationship_dict = { - "spdxElementId": "SPDXRef-DOCUMENT", + "spdxElementId": DOCUMENT_SPDX_ID, "relatedSpdxElement": "SPDXRef-Package", "comment": "Comment.", } @@ -62,12 +63,12 @@ def test_parse_document_describes(): relationship_parser = RelationshipParser() document_dict = { - "SPDXID": "SPDXRef-DOCUMENT", + "SPDXID": DOCUMENT_SPDX_ID, "documentDescribes": ["SPDXRef-Package", "SPDXRef-File", "SPDXRef-Snippet"], } relationships = relationship_parser.parse_document_describes( - doc_spdx_id="SPDXRef-DOCUMENT", + doc_spdx_id=DOCUMENT_SPDX_ID, described_spdx_ids=document_dict.get("documentDescribes"), existing_relationships=[], ) @@ -76,9 +77,9 @@ def test_parse_document_describes(): TestCase().assertCountEqual( relationships, [ - Relationship("SPDXRef-DOCUMENT", RelationshipType.DESCRIBES, "SPDXRef-Package"), - Relationship("SPDXRef-DOCUMENT", RelationshipType.DESCRIBES, "SPDXRef-File"), - Relationship("SPDXRef-DOCUMENT", RelationshipType.DESCRIBES, "SPDXRef-Snippet"), + Relationship(DOCUMENT_SPDX_ID, RelationshipType.DESCRIBES, "SPDXRef-Package"), + Relationship(DOCUMENT_SPDX_ID, RelationshipType.DESCRIBES, "SPDXRef-File"), + Relationship(DOCUMENT_SPDX_ID, RelationshipType.DESCRIBES, "SPDXRef-Snippet"), ], ) @@ -90,14 +91,14 @@ def test_parse_document_describes(): ["SPDXRef-Package", "SPDXRef-File"], [ { - "spdxElementId": "SPDXRef-DOCUMENT", + "spdxElementId": DOCUMENT_SPDX_ID, "relatedSpdxElement": "SPDXRef-Package", "relationshipType": "DESCRIBES", "comment": "This relationship has a comment.", }, { "spdxElementId": "SPDXRef-File", - "relatedSpdxElement": "SPDXRef-DOCUMENT", + "relatedSpdxElement": DOCUMENT_SPDX_ID, "relationshipType": "DESCRIBED_BY", "comment": "This relationship has a comment.", }, @@ -106,11 +107,11 @@ def test_parse_document_describes(): Relationship( related_spdx_element_id="SPDXRef-Package", relationship_type=RelationshipType.DESCRIBES, - spdx_element_id="SPDXRef-DOCUMENT", + spdx_element_id=DOCUMENT_SPDX_ID, comment="This relationship has a comment.", ), Relationship( - related_spdx_element_id="SPDXRef-DOCUMENT", + related_spdx_element_id=DOCUMENT_SPDX_ID, relationship_type=RelationshipType.DESCRIBED_BY, spdx_element_id="SPDXRef-File", comment="This relationship has a comment.", @@ -124,12 +125,12 @@ def test_parse_document_describes(): Relationship( related_spdx_element_id="SPDXRef-Package", relationship_type=RelationshipType.DESCRIBES, - spdx_element_id="SPDXRef-DOCUMENT", + spdx_element_id=DOCUMENT_SPDX_ID, ), Relationship( related_spdx_element_id="SPDXRef-File", relationship_type=RelationshipType.DESCRIBES, - spdx_element_id="SPDXRef-DOCUMENT", + spdx_element_id=DOCUMENT_SPDX_ID, ), ], ), @@ -140,7 +141,7 @@ def test_parse_document_describes_without_duplicating_relationships( ): relationship_parser = RelationshipParser() document_dict = { - "SPDXID": "SPDXRef-DOCUMENT", + "SPDXID": DOCUMENT_SPDX_ID, "documentDescribes": document_describes, "relationships": relationships, } diff --git a/tests/spdx/parser/rdf/test_creation_info_parser.py b/tests/spdx/parser/rdf/test_creation_info_parser.py index e5f17877c..9845dd0a7 100644 --- a/tests/spdx/parser/rdf/test_creation_info_parser.py +++ b/tests/spdx/parser/rdf/test_creation_info_parser.py @@ -9,6 +9,7 @@ from rdflib import RDF, Graph, URIRef from rdflib.term import Node +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.actor import Actor, ActorType from spdx.model.checksum import Checksum, ChecksumAlgorithm from spdx.model.version import Version @@ -24,7 +25,7 @@ def test_parse_creation_info(): graph = Graph().parse(os.path.join(os.path.dirname(__file__), "data/file_to_test_rdf_parser.rdf.xml")) creation_info, _ = parse_creation_info(graph) - assert creation_info.spdx_id == "SPDXRef-DOCUMENT" + assert creation_info.spdx_id == DOCUMENT_SPDX_ID assert creation_info.spdx_version == "SPDX-2.3" assert creation_info.name == "documentName" assert creation_info.document_namespace == "https://some.namespace" @@ -53,7 +54,7 @@ def test_parse_namespace_and_spdx_id(): r"No '#' found in the URI of SpdxDocument", ), ([(URIRef(""), RDF.type, URIRef(""))], r"No SpdxDocument found, can't parse rdf file."), - ([(URIRef("#SPDXRef-DOCUMENT"), RDF.type, SPDX_NAMESPACE.SpdxDocument)], "No namespace found"), + ([(URIRef(f"#{DOCUMENT_SPDX_ID}"), RDF.type, SPDX_NAMESPACE.SpdxDocument)], "No namespace found"), ( [ (URIRef("docNamespace1"), RDF.type, SPDX_NAMESPACE.SpdxDocument), @@ -80,7 +81,7 @@ def test_parse_external_document_refs(): graph = Graph().parse(os.path.join(os.path.dirname(__file__), "data/file_to_test_rdf_parser.rdf.xml")) doc_namespace = "https://some.namespace" external_doc_ref_node = graph.value( - subject=URIRef(f"{doc_namespace}#SPDXRef-DOCUMENT"), predicate=SPDX_NAMESPACE.externalDocumentRef + subject=URIRef(f"{doc_namespace}#{DOCUMENT_SPDX_ID}"), predicate=SPDX_NAMESPACE.externalDocumentRef ) assert isinstance(external_doc_ref_node, URIRef) diff --git a/tests/spdx/parser/rdf/test_relationship_parser.py b/tests/spdx/parser/rdf/test_relationship_parser.py index cf2a8b7df..cb7b4572f 100644 --- a/tests/spdx/parser/rdf/test_relationship_parser.py +++ b/tests/spdx/parser/rdf/test_relationship_parser.py @@ -6,6 +6,7 @@ import pytest from rdflib import RDF, Graph, URIRef +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.relationship import RelationshipType from spdx.parser.rdf.relationship_parser import parse_implicit_relationship, parse_relationship from spdx.rdfschema.namespace import SPDX_NAMESPACE @@ -20,7 +21,7 @@ def test_relationship_parser(): relationship = parse_relationship(relationship_node, graph, parent_node, doc_namespace) - assert relationship.spdx_element_id == "SPDXRef-DOCUMENT" + assert relationship.spdx_element_id == DOCUMENT_SPDX_ID assert relationship.relationship_type == RelationshipType.DESCRIBES assert relationship.related_spdx_element_id == "SPDXRef-File" assert relationship.comment == "relationshipComment" @@ -32,7 +33,7 @@ def test_relationship_parser(): ( SPDX_NAMESPACE.SpdxDocument, SPDX_NAMESPACE.describesPackage, - "SPDXRef-DOCUMENT", + DOCUMENT_SPDX_ID, RelationshipType.DESCRIBES, "SPDXRef-Package", ), diff --git a/tests/spdx/parser/tagvalue/test_annotation_parser.py b/tests/spdx/parser/tagvalue/test_annotation_parser.py index 2a0392295..d7d130476 100644 --- a/tests/spdx/parser/tagvalue/test_annotation_parser.py +++ b/tests/spdx/parser/tagvalue/test_annotation_parser.py @@ -5,6 +5,7 @@ import pytest +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.annotation import AnnotationType from spdx.parser.error import SPDXParsingError from spdx.parser.tagvalue.parser import Parser @@ -19,7 +20,7 @@ def test_parse_annotation(): "AnnotationDate: 2010-01-29T18:30:22Z", "AnnotationComment: Document level annotation", "AnnotationType: OTHER", - "SPDXREF: SPDXRef-DOCUMENT", + f"SPDXREF: {DOCUMENT_SPDX_ID}", ] ) document = parser.parse("\n".join([DOCUMENT_STR, annotation_str])) @@ -30,7 +31,7 @@ def test_parse_annotation(): 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 == "SPDXRef-DOCUMENT" + assert annotation.spdx_id == DOCUMENT_SPDX_ID @pytest.mark.parametrize( @@ -51,7 +52,7 @@ def test_parse_annotation(): ( "Annotator: Jane Doe()\nAnnotationDate: 201001-29T18:30:22Z\n" "AnnotationComment: Document level annotation\nAnnotationType: OTHER\n" - "SPDXREF: SPDXRef-DOCUMENT", + f"SPDXREF: {DOCUMENT_SPDX_ID}", "Error while parsing Annotation: ['Error while parsing Annotator: Token did " "not match specified grammar rule. Line: 1', 'Error while parsing " "AnnotationDate: Token did not match specified grammar rule. Line: 2']", diff --git a/tests/spdx/parser/tagvalue/test_creation_info_parser.py b/tests/spdx/parser/tagvalue/test_creation_info_parser.py index 4fb1993fa..e7b07d4bf 100644 --- a/tests/spdx/parser/tagvalue/test_creation_info_parser.py +++ b/tests/spdx/parser/tagvalue/test_creation_info_parser.py @@ -6,6 +6,7 @@ import pytest +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.actor import Actor, ActorType from spdx.model.checksum import Checksum, ChecksumAlgorithm from spdx.model.external_document_ref import ExternalDocumentRef @@ -18,7 +19,7 @@ "SPDXVersion: SPDX-2.3", "DataLicense: CC0-1.0", "DocumentName: Sample_Document-V2.3", - "SPDXID: SPDXRef-DOCUMENT", + f"SPDXID: {DOCUMENT_SPDX_ID}", "DocumentComment: Sample Comment", "DocumentNamespace: https://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301", "ExternalDocumentRef: DocumentRef-spdx-tool-1.2 " @@ -42,7 +43,7 @@ def test_parse_creation_info(): assert creation_info.spdx_version == "SPDX-2.3" assert creation_info.data_license == "CC0-1.0" assert creation_info.name == "Sample_Document-V2.3" - assert creation_info.spdx_id == "SPDXRef-DOCUMENT" + assert creation_info.spdx_id == DOCUMENT_SPDX_ID assert creation_info.document_comment == "Sample Comment" assert ( creation_info.document_namespace @@ -74,7 +75,7 @@ def test_parse_creation_info(): "SPDXVersion: SPDX-2.3", "DataLicense: CC0-1.0", "DocumentName: Sample_Document-V2.3", - "SPDXID: SPDXRef-DOCUMENT", + f"SPDXID: {DOCUMENT_SPDX_ID}", "DocumentComment: Sample Comment", "DocumentNamespace: Sample Comment", "ExternalDocumentRef: DocumentRef-spdx-tool-1.2:htp://spdx.org:SHA1: " @@ -102,7 +103,7 @@ def test_parse_creation_info(): "SPDXVersion: SPDX-2.3", "DataLicense: CC0-1.0", "DocumentName: Sample_Document-V2.3", - "SPDXID: SPDXRef-DOCUMENT", + f"SPDXID: {DOCUMENT_SPDX_ID}", ] ), r"__init__() missing 3 required positional arguments: 'document_namespace', 'creators', and 'created'", diff --git a/tests/spdx/parser/tagvalue/test_package_parser.py b/tests/spdx/parser/tagvalue/test_package_parser.py index dea9851d7..40794473d 100644 --- a/tests/spdx/parser/tagvalue/test_package_parser.py +++ b/tests/spdx/parser/tagvalue/test_package_parser.py @@ -7,6 +7,7 @@ import pytest from license_expression import get_spdx_licensing +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.package import ExternalPackageRef, ExternalPackageRefCategory, PackagePurpose from spdx.model.spdx_none import SpdxNone from spdx.parser.error import SPDXParsingError @@ -112,7 +113,7 @@ def test_parse_package(): "Error while parsing Package: ['Invalid ExternalPackageRefCategory: " "category. Line: 2']", ), ( - "SPDXID:SPDXRef-DOCUMENT\nPackageName: TestPackage\nSPDXID:SPDXRef-Package\n" + f"SPDXID:{DOCUMENT_SPDX_ID}\nPackageName: TestPackage\nSPDXID:SPDXRef-Package\n" "PackageDownloadLocation: download.com\nPackageVerificationCode: category reference locator", "Error while parsing Package: ['Error while parsing PackageVerificationCode: " "Value did not match expected format. Line: 5']", diff --git a/tests/spdx/parser/tagvalue/test_relationship_parser.py b/tests/spdx/parser/tagvalue/test_relationship_parser.py index 83a3d19d5..212d1c261 100644 --- a/tests/spdx/parser/tagvalue/test_relationship_parser.py +++ b/tests/spdx/parser/tagvalue/test_relationship_parser.py @@ -3,6 +3,7 @@ # SPDX-License-Identifier: Apache-2.0 import pytest +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.relationship import Relationship, RelationshipType from spdx.model.spdx_no_assertion import SpdxNoAssertion from spdx.model.spdx_none import SpdxNone @@ -16,13 +17,13 @@ [ ( "\n".join( - ["Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-File", "RelationshipComment: This is a comment."] + [f"Relationship: {DOCUMENT_SPDX_ID} DESCRIBES SPDXRef-File", "RelationshipComment: This is a comment."] ), - Relationship("SPDXRef-DOCUMENT", RelationshipType.DESCRIBES, "SPDXRef-File", "This is a comment."), + Relationship(DOCUMENT_SPDX_ID, RelationshipType.DESCRIBES, "SPDXRef-File", "This is a comment."), ), ( - "Relationship: SPDXRef-DOCUMENT PATCH_FOR NOASSERTION", - Relationship("SPDXRef-DOCUMENT", RelationshipType.PATCH_FOR, SpdxNoAssertion()), + f"Relationship: {DOCUMENT_SPDX_ID} PATCH_FOR NOASSERTION", + Relationship(DOCUMENT_SPDX_ID, RelationshipType.PATCH_FOR, SpdxNoAssertion()), ), ( "Relationship: SPDXRef-CarolCompression DEPENDS_ON NONE", diff --git a/tests/spdx/parser/tagvalue/test_tag_value_lexer.py b/tests/spdx/parser/tagvalue/test_tag_value_lexer.py index 6170062c5..8136a4c50 100644 --- a/tests/spdx/parser/tagvalue/test_tag_value_lexer.py +++ b/tests/spdx/parser/tagvalue/test_tag_value_lexer.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: Apache-2.0 import pytest +from spdx.constants import DOCUMENT_SPDX_ID from spdx.parser.tagvalue.lexer import SPDXLexer @@ -26,7 +27,7 @@ def test_tokenization_of_document(lexer): "SPDXVersion: SPDX-2.1", "DataLicense: CC0-1.0", "DocumentName: Sample_Document-V2.1", - "SPDXID: SPDXRef-DOCUMENT", + f"SPDXID: {DOCUMENT_SPDX_ID}", "DocumentComment: Sample Comment", "DocumentNamespace: https://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301", ] @@ -39,7 +40,7 @@ def test_tokenization_of_document(lexer): token_assert_helper(lexer.token(), "DOC_NAME", "DocumentName", 3) token_assert_helper(lexer.token(), "LINE", "Sample_Document-V2.1", 3) token_assert_helper(lexer.token(), "SPDX_ID", "SPDXID", 4) - token_assert_helper(lexer.token(), "LINE", "SPDXRef-DOCUMENT", 4) + token_assert_helper(lexer.token(), "LINE", DOCUMENT_SPDX_ID, 4) token_assert_helper(lexer.token(), "DOC_COMMENT", "DocumentComment", 5) token_assert_helper(lexer.token(), "TEXT", "Sample Comment", 5) token_assert_helper(lexer.token(), "DOC_NAMESPACE", "DocumentNamespace", 6) @@ -285,7 +286,7 @@ def test_tokenization_of_annotation(lexer): "AnnotationDate: 2010-01-29T18:30:22Z", "AnnotationComment: Document level annotation", "AnnotationType: OTHER", - "SPDXREF: SPDXRef-DOCUMENT", + f"SPDXREF: {DOCUMENT_SPDX_ID}", ] ) @@ -299,13 +300,13 @@ def test_tokenization_of_annotation(lexer): token_assert_helper(lexer.token(), "ANNOTATION_TYPE", "AnnotationType", 4) token_assert_helper(lexer.token(), "LINE", "OTHER", 4) token_assert_helper(lexer.token(), "ANNOTATION_SPDX_ID", "SPDXREF", 5) - token_assert_helper(lexer.token(), "LINE", "SPDXRef-DOCUMENT", 5) + token_assert_helper(lexer.token(), "LINE", DOCUMENT_SPDX_ID, 5) def test_tokenization_of_relationship(lexer): relationship_str = "\n".join( [ - "Relationship: SPDXRef-DOCUMENT DESCRIBES NONE", + f"Relationship: {DOCUMENT_SPDX_ID} DESCRIBES NONE", "RelationshipComment: This is a comment.", "Relationship: DocumentRef-extern:SPDXRef-Package DESCRIBES NONE", ] @@ -313,7 +314,7 @@ def test_tokenization_of_relationship(lexer): lexer.input(relationship_str) token_assert_helper(lexer.token(), "RELATIONSHIP", "Relationship", 1) - token_assert_helper(lexer.token(), "LINE", "SPDXRef-DOCUMENT DESCRIBES NONE", 1) + token_assert_helper(lexer.token(), "LINE", f"{DOCUMENT_SPDX_ID} DESCRIBES NONE", 1) token_assert_helper(lexer.token(), "RELATIONSHIP_COMMENT", "RelationshipComment", 2) token_assert_helper(lexer.token(), "LINE", "This is a comment.", 2) token_assert_helper(lexer.token(), "RELATIONSHIP", "Relationship", 3) diff --git a/tests/spdx/parser/tagvalue/test_tag_value_parser.py b/tests/spdx/parser/tagvalue/test_tag_value_parser.py index 47778d2df..f9b6d16cd 100644 --- a/tests/spdx/parser/tagvalue/test_tag_value_parser.py +++ b/tests/spdx/parser/tagvalue/test_tag_value_parser.py @@ -6,6 +6,7 @@ import pytest +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.document import Document from spdx.model.relationship import Relationship, RelationshipType from spdx.parser.error import SPDXParsingError @@ -75,7 +76,7 @@ def test_document_with_mixed_values(): parser = Parser() document_str = "\n".join( [ - "SPDXID:SPDXRef-DOCUMENT", + f"SPDXID:{DOCUMENT_SPDX_ID}", "FileName: File without package", "SPDXID: SPDXRef-File", "PackageDownloadLocation: https://download.com", diff --git a/tests/spdx/validation/test_actor_validator.py b/tests/spdx/validation/test_actor_validator.py index 313efa809..bd9803707 100644 --- a/tests/spdx/validation/test_actor_validator.py +++ b/tests/spdx/validation/test_actor_validator.py @@ -6,6 +6,7 @@ import pytest +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.actor import ActorType from spdx.validation.actor_validator import validate_actor from spdx.validation.validation_message import SpdxElementType, ValidationContext, ValidationMessage @@ -14,7 +15,7 @@ def test_valid_actor_person(): actor = actor_fixture() - validation_messages: List[ValidationMessage] = validate_actor(actor, "SPDXRef-DOCUMENT") + validation_messages: List[ValidationMessage] = validate_actor(actor, DOCUMENT_SPDX_ID) assert validation_messages == [] @@ -29,7 +30,7 @@ def test_valid_actor_person(): ], ) def test_invalid_actor(actor, expected_message): - parent_id = "SPDXRef-DOCUMENT" + parent_id = DOCUMENT_SPDX_ID validation_messages: List[ValidationMessage] = validate_actor(actor, parent_id) expected = ValidationMessage( diff --git a/tests/spdx/validation/test_creation_info_validator.py b/tests/spdx/validation/test_creation_info_validator.py index 2b4a65d5f..a015d258e 100644 --- a/tests/spdx/validation/test_creation_info_validator.py +++ b/tests/spdx/validation/test_creation_info_validator.py @@ -6,6 +6,7 @@ import pytest +from spdx.constants import DOCUMENT_SPDX_ID from spdx.validation.creation_info_validator import validate_creation_info from spdx.validation.validation_message import SpdxElementType, ValidationContext, ValidationMessage from tests.spdx.fixtures import creation_info_fixture @@ -24,12 +25,12 @@ def test_valid_creation_info(): ( creation_info_fixture(spdx_id="SPDXRef-doc"), "SPDXRef-doc", - 'spdx_id must be "SPDXRef-DOCUMENT", but is: SPDXRef-doc', + f"spdx_id must be {DOCUMENT_SPDX_ID}, but is: SPDXRef-doc", ), - (creation_info_fixture(data_license="MIT"), "SPDXRef-DOCUMENT", 'data_license must be "CC0-1.0", but is: MIT'), + (creation_info_fixture(data_license="MIT"), DOCUMENT_SPDX_ID, 'data_license must be "CC0-1.0", but is: MIT'), ( creation_info_fixture(document_namespace="some_namespace"), - "SPDXRef-DOCUMENT", + DOCUMENT_SPDX_ID, "document_namespace must be a valid URI specified in RFC-3986 and must contain no fragment (#), " "but is: some_namespace", ), diff --git a/tests/spdx/validation/test_document_validator.py b/tests/spdx/validation/test_document_validator.py index 6d829db79..c58916c43 100644 --- a/tests/spdx/validation/test_document_validator.py +++ b/tests/spdx/validation/test_document_validator.py @@ -6,6 +6,7 @@ import pytest +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.document import CreationInfo, Document from spdx.model.relationship import Relationship, RelationshipType from spdx.validation.document_validator import validate_full_spdx_document @@ -82,8 +83,8 @@ def test_spdx_version_handling(creation_info: CreationInfo, version_input: str, @pytest.mark.parametrize( "relationships", [ - [Relationship("SPDXRef-DOCUMENT", RelationshipType.DESCRIBES, "SPDXRef-File")], - [Relationship("SPDXRef-File", RelationshipType.DESCRIBED_BY, "SPDXRef-DOCUMENT")], + [Relationship(DOCUMENT_SPDX_ID, RelationshipType.DESCRIBES, "SPDXRef-File")], + [Relationship("SPDXRef-File", RelationshipType.DESCRIBED_BY, DOCUMENT_SPDX_ID)], ], ) def test_document_describes_at_least_one_element(relationships): @@ -101,9 +102,9 @@ def test_document_does_not_describe_an_element(): assert validation_messages == [ ValidationMessage( - 'there must be at least one relationship "SPDXRef-DOCUMENT DESCRIBES ..." or "... DESCRIBED_BY ' - 'SPDXRef-DOCUMENT"', - ValidationContext(spdx_id="SPDXRef-DOCUMENT", element_type=SpdxElementType.DOCUMENT), + f'there must be at least one relationship "{DOCUMENT_SPDX_ID} DESCRIBES ..." or "... DESCRIBED_BY ' + f'{DOCUMENT_SPDX_ID}"', + ValidationContext(spdx_id=DOCUMENT_SPDX_ID, element_type=SpdxElementType.DOCUMENT), ) ] @@ -115,7 +116,7 @@ def test_duplicated_spdx_ids(): file_fixture(spdx_id="SPDXRef-2"), file_fixture(spdx_id="SPDXRef-3"), ], - packages=[package_fixture(spdx_id="SPDXRef-2"), package_fixture(spdx_id="SPDXRef-DOCUMENT")], + packages=[package_fixture(spdx_id="SPDXRef-2"), package_fixture(spdx_id=DOCUMENT_SPDX_ID)], snippets=[snippet_fixture(spdx_id="SPDXRef-2"), snippet_fixture(spdx_id="SPDXRef-3")], ) @@ -126,7 +127,7 @@ def test_duplicated_spdx_ids(): assert validation_messages == [ ValidationMessage( "every spdx_id must be unique within the document, but found the following duplicates: ['SPDXRef-2', " - "'SPDXRef-3', 'SPDXRef-DOCUMENT']", + f"'SPDXRef-3', '{DOCUMENT_SPDX_ID}']", context, ) ] diff --git a/tests/spdx/validation/test_package_validator.py b/tests/spdx/validation/test_package_validator.py index 5ebca4672..02f4c3942 100644 --- a/tests/spdx/validation/test_package_validator.py +++ b/tests/spdx/validation/test_package_validator.py @@ -8,6 +8,7 @@ import pytest from license_expression import Licensing +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.relationship import Relationship, RelationshipType from spdx.model.spdx_no_assertion import SpdxNoAssertion from spdx.model.spdx_none import SpdxNone @@ -63,7 +64,7 @@ def test_invalid_package(package_input, expected_message): expected_message, ValidationContext( spdx_id=package_input.spdx_id, - parent_id="SPDXRef-DOCUMENT", + parent_id=DOCUMENT_SPDX_ID, element_type=SpdxElementType.PACKAGE, full_element=package_input, ), diff --git a/tests/spdx/validation/test_relationship_validator.py b/tests/spdx/validation/test_relationship_validator.py index 1d5a493c7..3b68df0c5 100644 --- a/tests/spdx/validation/test_relationship_validator.py +++ b/tests/spdx/validation/test_relationship_validator.py @@ -6,6 +6,7 @@ import pytest +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.document import Document from spdx.model.relationship import Relationship, RelationshipType from spdx.model.spdx_no_assertion import SpdxNoAssertion @@ -17,9 +18,7 @@ @pytest.mark.parametrize("related_spdx_element", ["SPDXRef-Package", SpdxNoAssertion(), SpdxNone()]) def test_valid_relationship(related_spdx_element): - relationship = Relationship( - "SPDXRef-DOCUMENT", RelationshipType.DESCRIBES, related_spdx_element, comment="comment" - ) + relationship = Relationship(DOCUMENT_SPDX_ID, RelationshipType.DESCRIBES, related_spdx_element, comment="comment") validation_messages: List[ValidationMessage] = validate_relationship(relationship, "SPDX-2.3", document_fixture()) assert validation_messages == [] @@ -57,11 +56,11 @@ def test_unknown_spdx_id(spdx_element_id, related_spdx_element_id, expected_mess "relationship, expected_message", [ ( - Relationship("SPDXRef-DOCUMENT", RelationshipType.SPECIFICATION_FOR, "SPDXRef-Package"), + Relationship(DOCUMENT_SPDX_ID, RelationshipType.SPECIFICATION_FOR, "SPDXRef-Package"), "RelationshipType.SPECIFICATION_FOR is not supported in SPDX-2.2", ), ( - Relationship("SPDXRef-DOCUMENT", RelationshipType.REQUIREMENT_DESCRIPTION_FOR, "SPDXRef-Package"), + Relationship(DOCUMENT_SPDX_ID, RelationshipType.REQUIREMENT_DESCRIPTION_FOR, "SPDXRef-Package"), "RelationshipType.REQUIREMENT_DESCRIPTION_FOR is not supported in SPDX-2.2", ), ], diff --git a/tests/spdx/validation/test_spdx_id_validators.py b/tests/spdx/validation/test_spdx_id_validators.py index 12696a4de..1a36f0b99 100644 --- a/tests/spdx/validation/test_spdx_id_validators.py +++ b/tests/spdx/validation/test_spdx_id_validators.py @@ -5,6 +5,7 @@ import pytest +from spdx.constants import DOCUMENT_SPDX_ID from spdx.validation.spdx_id_validators import ( get_list_of_all_spdx_ids, is_external_doc_ref_present_in_document, @@ -35,7 +36,7 @@ ) -@pytest.mark.parametrize("spdx_id", ["SPDXRef-DOCUMENT", "SPDXRef-File1", "SPDXRef-1.3-3.7"]) +@pytest.mark.parametrize("spdx_id", [DOCUMENT_SPDX_ID, "SPDXRef-File1", "SPDXRef-1.3-3.7"]) def test_valid_internal_spdx_ids(spdx_id): assert is_valid_internal_spdx_id(spdx_id) @@ -63,7 +64,7 @@ def test_is_spdx_id_present_in_document(): assert is_spdx_id_present_in_document("SPDXRef-File1", DOCUMENT) assert is_spdx_id_present_in_document("SPDXRef-Package2", DOCUMENT) assert is_spdx_id_present_in_document("SPDXRef-Snippet1", DOCUMENT) - assert is_spdx_id_present_in_document("SPDXRef-DOCUMENT", DOCUMENT) + assert is_spdx_id_present_in_document(DOCUMENT_SPDX_ID, DOCUMENT) assert not is_spdx_id_present_in_document("SPDXRef-file2", DOCUMENT) @@ -76,7 +77,7 @@ def test_list_of_all_spdx_ids(): TestCase().assertCountEqual( get_list_of_all_spdx_ids(DOCUMENT), [ - "SPDXRef-DOCUMENT", + DOCUMENT_SPDX_ID, "SPDXRef-File1", "SPDXRef-File2", "SPDXRef-Package1", @@ -146,7 +147,7 @@ def test_invalid_spdx_id(spdx_id, expected_messages): @pytest.mark.parametrize( "spdx_id", - ["DocumentRef-external:SPDXRef-File", "SPDXRef-DOCUMENT", "SPDXRef-File1", "SPDXRef-Package1", "SPDXRef-Snippet1"], + ["DocumentRef-external:SPDXRef-File", DOCUMENT_SPDX_ID, "SPDXRef-File1", "SPDXRef-Package1", "SPDXRef-Snippet1"], ) def test_valid_spdx_id_with_check_document(spdx_id): validation_messages = validate_spdx_id(spdx_id, DOCUMENT, check_document=True) diff --git a/tests/spdx/writer/rdf/test_relationship_writer.py b/tests/spdx/writer/rdf/test_relationship_writer.py index 483f0cbca..9257976e4 100644 --- a/tests/spdx/writer/rdf/test_relationship_writer.py +++ b/tests/spdx/writer/rdf/test_relationship_writer.py @@ -3,6 +3,7 @@ # SPDX-License-Identifier: Apache-2.0 from rdflib import RDFS, Graph, Literal, URIRef +from spdx.constants import DOCUMENT_SPDX_ID from spdx.rdfschema.namespace import SPDX_NAMESPACE from spdx.writer.rdf.relationship_writer import add_relationship_to_graph from tests.spdx.fixtures import relationship_fixture @@ -13,7 +14,7 @@ def test_add_relationship_to_graph(): graph = Graph() add_relationship_to_graph(relationship, graph, "docNamespace", {}) - assert (URIRef("docNamespace#SPDXRef-DOCUMENT"), SPDX_NAMESPACE.relationship, None) in graph + assert (URIRef(f"docNamespace#{DOCUMENT_SPDX_ID}"), SPDX_NAMESPACE.relationship, None) in graph assert (None, SPDX_NAMESPACE.relationshipType, SPDX_NAMESPACE.relationshipType_describes) in graph assert (None, SPDX_NAMESPACE.relatedSpdxElement, URIRef("docNamespace#SPDXRef-File")) in graph assert (None, RDFS.comment, Literal(relationship.comment)) in graph diff --git a/tests/spdx/writer/tagvalue/test_creation_info_writer.py b/tests/spdx/writer/tagvalue/test_creation_info_writer.py index 161d4047e..be5d023d1 100644 --- a/tests/spdx/writer/tagvalue/test_creation_info_writer.py +++ b/tests/spdx/writer/tagvalue/test_creation_info_writer.py @@ -6,6 +6,7 @@ import pytest +from spdx.constants import DOCUMENT_SPDX_ID from spdx.model.document import CreationInfo from spdx.writer.tagvalue.creation_info_writer import write_creation_info from tests.spdx.fixtures import actor_fixture, creation_info_fixture @@ -19,7 +20,7 @@ [ call("SPDXVersion: SPDX-2.3\n"), call("DataLicense: CC0-1.0\n"), - call("SPDXID: SPDXRef-DOCUMENT\n"), + call(f"SPDXID: {DOCUMENT_SPDX_ID}\n"), call("DocumentName: documentName\n"), call("DocumentNamespace: https://some.namespace\n"), call("DocumentComment: documentComment\n"), @@ -39,7 +40,7 @@ ( CreationInfo( spdx_version="SPDX-2.3", - spdx_id="SPDXRef-DOCUMENT", + spdx_id=DOCUMENT_SPDX_ID, creators=[actor_fixture()], name="Test document", document_namespace="https://namespace.com", @@ -48,7 +49,7 @@ [ call("SPDXVersion: SPDX-2.3\n"), call("DataLicense: CC0-1.0\n"), - call("SPDXID: SPDXRef-DOCUMENT\n"), + call(f"SPDXID: {DOCUMENT_SPDX_ID}\n"), call("DocumentName: Test document\n"), call("DocumentNamespace: https://namespace.com\n"), call("\n"),