Skip to content

Commit 0e1df0a

Browse files
committed
[issue-564] add constant for "SPDXRef-DOCUMENT"
Signed-off-by: Meret Behrens <[email protected]>
1 parent 9d824c8 commit 0e1df0a

23 files changed

+104
-79
lines changed

src/spdx/constants.py

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# SPDX-FileCopyrightText: 2023 spdx contributors
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
DOCUMENT_SPDX_ID = "SPDXRef-DOCUMENT"

src/spdx/parser/rdf/creation_info_parser.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from rdflib.exceptions import UniquenessError
1111
from rdflib.term import URIRef
1212

13+
from spdx.constants import DOCUMENT_SPDX_ID
1314
from spdx.datetime_conversions import datetime_from_str
1415
from spdx.model.document import CreationInfo
1516
from spdx.model.external_document_ref import ExternalDocumentRef
@@ -98,15 +99,16 @@ def parse_namespace_and_spdx_id(graph: Graph) -> (str, str):
9899
if "#" not in subject:
99100
logging.error(
100101
"No '#' found in the URI of SpdxDocument, "
101-
"the URI for the SpdxDocument should be the namespace appended by '#SPDXRef-DOCUMENT."
102+
f"the URI for the SpdxDocument should be the namespace appended by '#{DOCUMENT_SPDX_ID}."
102103
)
103104
sys.exit(1)
104105

105106
namespace, spdx_id = urldefrag(str(subject))
106107

107108
if not namespace:
108109
logging.error(
109-
"No namespace found, the URI for the SpdxDocument should be the namespace appended by '#SPDXRef-DOCUMENT."
110+
f"No namespace found, the URI for the SpdxDocument should be the namespace appended by "
111+
f"'#{DOCUMENT_SPDX_ID}."
110112
)
111113
sys.exit(1)
112114

src/spdx/validation/creation_info_validator.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from typing import List
66

7+
from spdx.constants import DOCUMENT_SPDX_ID
78
from spdx.model.document import CreationInfo
89
from spdx.validation.actor_validator import validate_actors
910
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
1617

1718
context = ValidationContext(spdx_id=creation_info.spdx_id, element_type=SpdxElementType.DOCUMENT)
1819

19-
if creation_info.spdx_id != "SPDXRef-DOCUMENT":
20+
if creation_info.spdx_id != DOCUMENT_SPDX_ID:
2021
validation_messages.append(
21-
ValidationMessage(f'spdx_id must be "SPDXRef-DOCUMENT", but is: {creation_info.spdx_id}', context)
22+
ValidationMessage(f"spdx_id must be {DOCUMENT_SPDX_ID}, but is: {creation_info.spdx_id}", context)
2223
)
2324

2425
if creation_info.data_license != "CC0-1.0":

tests/spdx/fixtures.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from license_expression import get_spdx_licensing
77

8+
from spdx.constants import DOCUMENT_SPDX_ID
89
from spdx.model.actor import Actor, ActorType
910
from spdx.model.annotation import Annotation, AnnotationType
1011
from spdx.model.checksum import Checksum, ChecksumAlgorithm
@@ -46,7 +47,7 @@ def package_verification_code_fixture(
4647

4748
def creation_info_fixture(
4849
spdx_version="SPDX-2.3",
49-
spdx_id="SPDXRef-DOCUMENT",
50+
spdx_id=DOCUMENT_SPDX_ID,
5051
name="documentName",
5152
document_namespace="https://some.namespace",
5253
creators=None,
@@ -264,7 +265,7 @@ def extracted_licensing_info_fixture(
264265

265266

266267
def relationship_fixture(
267-
spdx_element_id="SPDXRef-DOCUMENT",
268+
spdx_element_id=DOCUMENT_SPDX_ID,
268269
relationship_type=RelationshipType.DESCRIBES,
269270
related_spdx_element_id="SPDXRef-File",
270271
comment="relationshipComment",

tests/spdx/parser/jsonlikedict/test_annotation_parser.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import pytest
88

9+
from spdx.constants import DOCUMENT_SPDX_ID
910
from spdx.model.actor import Actor, ActorType
1011
from spdx.model.annotation import Annotation, AnnotationType
1112
from spdx.parser.error import SPDXParsingError
@@ -21,19 +22,19 @@ def test_parse_annotation():
2122
"comment": "Document level annotation",
2223
}
2324

24-
annotation = annotation_parser.parse_annotation(annotation_dict, spdx_id="SPDXRef-DOCUMENT")
25+
annotation = annotation_parser.parse_annotation(annotation_dict, spdx_id=DOCUMENT_SPDX_ID)
2526

2627
assert annotation.annotator == Actor(ActorType.PERSON, name="Jane Doe")
2728
assert annotation.annotation_type == AnnotationType.OTHER
2829
assert annotation.annotation_date == datetime.datetime(2010, 1, 29, 18, 30, 22)
2930
assert annotation.annotation_comment == "Document level annotation"
30-
assert annotation.spdx_id == "SPDXRef-DOCUMENT"
31+
assert annotation.spdx_id == DOCUMENT_SPDX_ID
3132

3233

3334
def test_parse_all_annotations():
3435
annotation_parser = AnnotationParser()
3536
doc_dict = {
36-
"SPDXID": "SPDXRef-DOCUMENT",
37+
"SPDXID": DOCUMENT_SPDX_ID,
3738
"packages": [
3839
{
3940
"SPDXID": "SPDXRef-Package",
@@ -87,7 +88,7 @@ def test_parse_all_annotations():
8788
annotations,
8889
[
8990
Annotation(
90-
spdx_id="SPDXRef-DOCUMENT",
91+
spdx_id=DOCUMENT_SPDX_ID,
9192
annotation_type=AnnotationType.REVIEW,
9293
annotator=Actor(actor_type=ActorType.PERSON, name="Jane Doe", email=None),
9394
annotation_date=datetime.datetime(2010, 1, 29, 18, 30, 22),

tests/spdx/parser/jsonlikedict/test_creation_info_parser.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import pytest
88

9+
from spdx.constants import DOCUMENT_SPDX_ID
910
from spdx.model.actor import Actor, ActorType
1011
from spdx.model.checksum import Checksum, ChecksumAlgorithm
1112
from spdx.model.external_document_ref import ExternalDocumentRef
@@ -18,7 +19,7 @@ def test_parse_creation_info():
1819
creation_info_parser = CreationInfoParser()
1920
doc_dict = {
2021
"spdxVersion": "2.3",
21-
"SPDXID": "SPDXRef-DOCUMENT",
22+
"SPDXID": DOCUMENT_SPDX_ID,
2223
"name": "Example Document",
2324
"dataLicense": "CC0-1.0",
2425
"documentNamespace": "namespace",
@@ -39,7 +40,7 @@ def test_parse_creation_info():
3940
creation_info = creation_info_parser.parse_creation_info(doc_dict)
4041

4142
assert creation_info.spdx_version == "2.3"
42-
assert creation_info.spdx_id == "SPDXRef-DOCUMENT"
43+
assert creation_info.spdx_id == DOCUMENT_SPDX_ID
4344
assert creation_info.name == "Example Document"
4445
assert creation_info.document_namespace == "namespace"
4546
assert creation_info.created == datetime(2010, 1, 29, 18, 30, 22)
@@ -65,7 +66,7 @@ def test_parse_creation_info():
6566
"incomplete_dict,expected_message",
6667
[
6768
(
68-
{"spdxVersion": "2.3", "SPDXID": "SPDXRef-DOCUMENT", "name": "Example Document"},
69+
{"spdxVersion": "2.3", "SPDXID": DOCUMENT_SPDX_ID, "name": "Example Document"},
6970
["Error while parsing document Example Document: ['CreationInfo does not exist.']"],
7071
),
7172
(
@@ -98,7 +99,7 @@ def test_parse_invalid_creation_info():
9899
creation_info_parser = CreationInfoParser()
99100
doc_dict = {
100101
"spdxVersion": "2.3",
101-
"SPDXID": "SPDXRef-DOCUMENT",
102+
"SPDXID": DOCUMENT_SPDX_ID,
102103
"name": "Example Document",
103104
"creationInfo": {
104105
"created": "2010-01-29T18:30:22Z",

tests/spdx/parser/jsonlikedict/test_relationship_parser.py

+16-15
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import pytest
77

8+
from spdx.constants import DOCUMENT_SPDX_ID
89
from spdx.model.relationship import Relationship, RelationshipType
910
from spdx.model.spdx_no_assertion import SpdxNoAssertion
1011
from spdx.parser.error import SPDXParsingError
@@ -15,7 +16,7 @@ def test_parse_relationship():
1516
relationship_parser = RelationshipParser()
1617

1718
relationship_dict = {
18-
"spdxElementId": "SPDXRef-DOCUMENT",
19+
"spdxElementId": DOCUMENT_SPDX_ID,
1920
"relationshipType": "CONTAINS",
2021
"relatedSpdxElement": "NOASSERTION",
2122
"comment": "Comment.",
@@ -24,15 +25,15 @@ def test_parse_relationship():
2425
relationship = relationship_parser.parse_relationship(relationship_dict)
2526

2627
assert relationship.relationship_type == RelationshipType.CONTAINS
27-
assert relationship.spdx_element_id == "SPDXRef-DOCUMENT"
28+
assert relationship.spdx_element_id == DOCUMENT_SPDX_ID
2829
assert relationship.related_spdx_element_id == SpdxNoAssertion()
2930
assert relationship.comment == "Comment."
3031

3132

3233
def test_parse_incomplete_relationship():
3334
relationship_parser = RelationshipParser()
3435
relationship_dict = {
35-
"spdxElementId": "SPDXRef-DOCUMENT",
36+
"spdxElementId": DOCUMENT_SPDX_ID,
3637
"relatedSpdxElement": "SPDXRef-Package",
3738
"comment": "Comment.",
3839
}
@@ -62,12 +63,12 @@ def test_parse_document_describes():
6263
relationship_parser = RelationshipParser()
6364

6465
document_dict = {
65-
"SPDXID": "SPDXRef-DOCUMENT",
66+
"SPDXID": DOCUMENT_SPDX_ID,
6667
"documentDescribes": ["SPDXRef-Package", "SPDXRef-File", "SPDXRef-Snippet"],
6768
}
6869

6970
relationships = relationship_parser.parse_document_describes(
70-
doc_spdx_id="SPDXRef-DOCUMENT",
71+
doc_spdx_id=DOCUMENT_SPDX_ID,
7172
described_spdx_ids=document_dict.get("documentDescribes"),
7273
existing_relationships=[],
7374
)
@@ -76,9 +77,9 @@ def test_parse_document_describes():
7677
TestCase().assertCountEqual(
7778
relationships,
7879
[
79-
Relationship("SPDXRef-DOCUMENT", RelationshipType.DESCRIBES, "SPDXRef-Package"),
80-
Relationship("SPDXRef-DOCUMENT", RelationshipType.DESCRIBES, "SPDXRef-File"),
81-
Relationship("SPDXRef-DOCUMENT", RelationshipType.DESCRIBES, "SPDXRef-Snippet"),
80+
Relationship(DOCUMENT_SPDX_ID, RelationshipType.DESCRIBES, "SPDXRef-Package"),
81+
Relationship(DOCUMENT_SPDX_ID, RelationshipType.DESCRIBES, "SPDXRef-File"),
82+
Relationship(DOCUMENT_SPDX_ID, RelationshipType.DESCRIBES, "SPDXRef-Snippet"),
8283
],
8384
)
8485

@@ -90,14 +91,14 @@ def test_parse_document_describes():
9091
["SPDXRef-Package", "SPDXRef-File"],
9192
[
9293
{
93-
"spdxElementId": "SPDXRef-DOCUMENT",
94+
"spdxElementId": DOCUMENT_SPDX_ID,
9495
"relatedSpdxElement": "SPDXRef-Package",
9596
"relationshipType": "DESCRIBES",
9697
"comment": "This relationship has a comment.",
9798
},
9899
{
99100
"spdxElementId": "SPDXRef-File",
100-
"relatedSpdxElement": "SPDXRef-DOCUMENT",
101+
"relatedSpdxElement": DOCUMENT_SPDX_ID,
101102
"relationshipType": "DESCRIBED_BY",
102103
"comment": "This relationship has a comment.",
103104
},
@@ -106,11 +107,11 @@ def test_parse_document_describes():
106107
Relationship(
107108
related_spdx_element_id="SPDXRef-Package",
108109
relationship_type=RelationshipType.DESCRIBES,
109-
spdx_element_id="SPDXRef-DOCUMENT",
110+
spdx_element_id=DOCUMENT_SPDX_ID,
110111
comment="This relationship has a comment.",
111112
),
112113
Relationship(
113-
related_spdx_element_id="SPDXRef-DOCUMENT",
114+
related_spdx_element_id=DOCUMENT_SPDX_ID,
114115
relationship_type=RelationshipType.DESCRIBED_BY,
115116
spdx_element_id="SPDXRef-File",
116117
comment="This relationship has a comment.",
@@ -124,12 +125,12 @@ def test_parse_document_describes():
124125
Relationship(
125126
related_spdx_element_id="SPDXRef-Package",
126127
relationship_type=RelationshipType.DESCRIBES,
127-
spdx_element_id="SPDXRef-DOCUMENT",
128+
spdx_element_id=DOCUMENT_SPDX_ID,
128129
),
129130
Relationship(
130131
related_spdx_element_id="SPDXRef-File",
131132
relationship_type=RelationshipType.DESCRIBES,
132-
spdx_element_id="SPDXRef-DOCUMENT",
133+
spdx_element_id=DOCUMENT_SPDX_ID,
133134
),
134135
],
135136
),
@@ -140,7 +141,7 @@ def test_parse_document_describes_without_duplicating_relationships(
140141
):
141142
relationship_parser = RelationshipParser()
142143
document_dict = {
143-
"SPDXID": "SPDXRef-DOCUMENT",
144+
"SPDXID": DOCUMENT_SPDX_ID,
144145
"documentDescribes": document_describes,
145146
"relationships": relationships,
146147
}

tests/spdx/parser/rdf/test_creation_info_parser.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from rdflib import RDF, Graph, URIRef
1010
from rdflib.term import Node
1111

12+
from spdx.constants import DOCUMENT_SPDX_ID
1213
from spdx.model.actor import Actor, ActorType
1314
from spdx.model.checksum import Checksum, ChecksumAlgorithm
1415
from spdx.model.version import Version
@@ -24,7 +25,7 @@ def test_parse_creation_info():
2425
graph = Graph().parse(os.path.join(os.path.dirname(__file__), "data/file_to_test_rdf_parser.rdf.xml"))
2526

2627
creation_info, _ = parse_creation_info(graph)
27-
assert creation_info.spdx_id == "SPDXRef-DOCUMENT"
28+
assert creation_info.spdx_id == DOCUMENT_SPDX_ID
2829
assert creation_info.spdx_version == "SPDX-2.3"
2930
assert creation_info.name == "documentName"
3031
assert creation_info.document_namespace == "https://some.namespace"
@@ -53,7 +54,7 @@ def test_parse_namespace_and_spdx_id():
5354
r"No '#' found in the URI of SpdxDocument",
5455
),
5556
([(URIRef(""), RDF.type, URIRef(""))], r"No SpdxDocument found, can't parse rdf file."),
56-
([(URIRef("#SPDXRef-DOCUMENT"), RDF.type, SPDX_NAMESPACE.SpdxDocument)], "No namespace found"),
57+
([(URIRef(f"#{DOCUMENT_SPDX_ID}"), RDF.type, SPDX_NAMESPACE.SpdxDocument)], "No namespace found"),
5758
(
5859
[
5960
(URIRef("docNamespace1"), RDF.type, SPDX_NAMESPACE.SpdxDocument),
@@ -80,7 +81,7 @@ def test_parse_external_document_refs():
8081
graph = Graph().parse(os.path.join(os.path.dirname(__file__), "data/file_to_test_rdf_parser.rdf.xml"))
8182
doc_namespace = "https://some.namespace"
8283
external_doc_ref_node = graph.value(
83-
subject=URIRef(f"{doc_namespace}#SPDXRef-DOCUMENT"), predicate=SPDX_NAMESPACE.externalDocumentRef
84+
subject=URIRef(f"{doc_namespace}#{DOCUMENT_SPDX_ID}"), predicate=SPDX_NAMESPACE.externalDocumentRef
8485
)
8586
assert isinstance(external_doc_ref_node, URIRef)
8687

tests/spdx/parser/rdf/test_relationship_parser.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import pytest
77
from rdflib import RDF, Graph, URIRef
88

9+
from spdx.constants import DOCUMENT_SPDX_ID
910
from spdx.model.relationship import RelationshipType
1011
from spdx.parser.rdf.relationship_parser import parse_implicit_relationship, parse_relationship
1112
from spdx.rdfschema.namespace import SPDX_NAMESPACE
@@ -20,7 +21,7 @@ def test_relationship_parser():
2021

2122
relationship = parse_relationship(relationship_node, graph, parent_node, doc_namespace)
2223

23-
assert relationship.spdx_element_id == "SPDXRef-DOCUMENT"
24+
assert relationship.spdx_element_id == DOCUMENT_SPDX_ID
2425
assert relationship.relationship_type == RelationshipType.DESCRIBES
2526
assert relationship.related_spdx_element_id == "SPDXRef-File"
2627
assert relationship.comment == "relationshipComment"
@@ -32,7 +33,7 @@ def test_relationship_parser():
3233
(
3334
SPDX_NAMESPACE.SpdxDocument,
3435
SPDX_NAMESPACE.describesPackage,
35-
"SPDXRef-DOCUMENT",
36+
DOCUMENT_SPDX_ID,
3637
RelationshipType.DESCRIBES,
3738
"SPDXRef-Package",
3839
),

tests/spdx/parser/tagvalue/test_annotation_parser.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import pytest
77

8+
from spdx.constants import DOCUMENT_SPDX_ID
89
from spdx.model.annotation import AnnotationType
910
from spdx.parser.error import SPDXParsingError
1011
from spdx.parser.tagvalue.parser import Parser
@@ -19,7 +20,7 @@ def test_parse_annotation():
1920
"AnnotationDate: 2010-01-29T18:30:22Z",
2021
"AnnotationComment: <text>Document level annotation</text>",
2122
"AnnotationType: OTHER",
22-
"SPDXREF: SPDXRef-DOCUMENT",
23+
f"SPDXREF: {DOCUMENT_SPDX_ID}",
2324
]
2425
)
2526
document = parser.parse("\n".join([DOCUMENT_STR, annotation_str]))
@@ -30,7 +31,7 @@ def test_parse_annotation():
3031
assert annotation.annotation_date == datetime(2010, 1, 29, 18, 30, 22)
3132
assert annotation.annotation_comment == "Document level annotation"
3233
assert annotation.annotation_type == AnnotationType.OTHER
33-
assert annotation.spdx_id == "SPDXRef-DOCUMENT"
34+
assert annotation.spdx_id == DOCUMENT_SPDX_ID
3435

3536

3637
@pytest.mark.parametrize(
@@ -51,7 +52,7 @@ def test_parse_annotation():
5152
(
5253
"Annotator: Jane Doe()\nAnnotationDate: 201001-29T18:30:22Z\n"
5354
"AnnotationComment: <text>Document level annotation</text>\nAnnotationType: OTHER\n"
54-
"SPDXREF: SPDXRef-DOCUMENT",
55+
f"SPDXREF: {DOCUMENT_SPDX_ID}",
5556
"Error while parsing Annotation: ['Error while parsing Annotator: Token did "
5657
"not match specified grammar rule. Line: 1', 'Error while parsing "
5758
"AnnotationDate: Token did not match specified grammar rule. Line: 2']",

0 commit comments

Comments
 (0)