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"),