8000 [issue-403] change spdx version handling during validation · spdx/tools-python@23d7208 · GitHub
[go: up one dir, main page]

Skip to content

Commit 23d7208

Browse files
[issue-403] change spdx version handling during validation
Signed-off-by: Armin Tänzer <armin.taenzer@tngtech.com>
1 parent 48c4e72 commit 23d7208

File tree

7 files changed

+23
-14
lines changed

7 files changed

+23
-14
lines changed

src/validation/creation_info_validator.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from src.validation.validation_message import ValidationMessage, ValidationContext, SpdxElementType
2020

2121

22-
def validate_creation_info(creation_info: CreationInfo) -> List[ValidationMessage]:
22+
def validate_creation_info(creation_info: CreationInfo, spdx_version: str) -> List[ValidationMessage]:
2323
validation_messages: List[ValidationMessage] = []
2424

2525
context = ValidationContext(spdx_id=creation_info.spdx_id, element_type=SpdxElementType.DOCUMENT)
@@ -31,6 +31,11 @@ def validate_creation_info(creation_info: CreationInfo) -> List[ValidationMessag
3131
context
3232
)
3333
)
34+
elif spdx_version != creation_info.spdx_version:
35+
validation_messages.append(
36+
ValidationMessage(f"provided SPDX version {spdx_version} does not match "
37+
f"the document's SPDX version {creation_info.spdx_version}", context)
38+
)
3439

3540
if creation_info.spdx_id != "SPDXRef-DOCUMENT":
3641
validation_messages.append(

src/validation/document_validator.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,13 @@
2424
from src.validation.validation_message import ValidationMessage, ValidationContext, SpdxElementType
2525

2626

27-
def validate_full_spdx_document(document: Document, spdx_version: str) -> List[ValidationMessage]:
27+
def validate_full_spdx_document(document: Document, spdx_version: str = None) -> List[ValidationMessage]:
2828
validation_messages: List[ValidationMessage] = []
2929

30-
validation_messages.extend(validate_creation_info(document.creation_info))
30+
if not spdx_version:
31+
spdx_version = document.creation_info.spdx_version
32+
33+
validation_messages.extend(validate_creation_info(document.creation_info, spdx_version))
3134
validation_messages.extend(validate_packages(document.packages, document))
3235
validation_messages.extend(validate_files(document.files, document))
3336
validation_messages.extend(validate_snippets(document.snippets, document))

src/validation/relationship_validator.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ def validate_relationship(relationship: Relationship, document: Document, spdx_v
4343
for message in messages:
4444
validation_messages.append(ValidationMessage(message, context))
4545

46-
if spdx_version != "2.3":
46+
if spdx_version != "SPDX-2.3":
4747
if relationship_type == RelationshipType.SPECIFICATION_FOR or relationship_type == RelationshipType.REQUIREMENT_DESCRIPTION_FOR:
4848
validation_messages.append(
49-
ValidationMessage(f"{relationship_type} is not supported for SPDX versions below 2.3", context))
49+
ValidationMessage(f"{relationship_type} is not supported for SPDX versions below SPDX-2.3", context))
5050

5151
return validation_messages

src/writer/json/json_writer.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ def write_document(document: Document, file_name: str, validate: bool = True, co
2424
a new one is created.
2525
"""
2626
if validate:
27-
validation_messages: List[ValidationMessage] = validate_full_spdx_document(document,
28-
document.creation_info.spdx_version)
27+
validation_messages: List[ValidationMessage] = validate_full_spdx_document(document)
2928
if validation_messages:
3029
raise ValueError(f"Document is not valid. The following errors were detected: {validation_messages}")
3130
if converter is None:

tests/validation/test_creation_info_validator.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def test_valid_creation_info():
2626
[get_actor(), get_actor()], datetime(2022, 1, 1), "creator_comment",
2727
"CC0-1.0", [get_external_document_ref(), get_external_document_ref()], Version(6, 3),
2828
"doc_comment")
29-
validation_messages: List[ValidationMessage] = validate_creation_info(creation_info)
29+
validation_messages: List[ValidationMessage] = validate_creation_info(creation_info, "SPDX-2.3")
3030

3131
assert validation_messages == []
3232

@@ -35,6 +35,8 @@ def test_valid_creation_info():
3535
("creation_info_input, spdx_id, expected_message",
3636
[(get_creation_info(spdx_version="version-2.3"), "SPDXRef-DOCUMENT",
3737
'spdx_version must be of the form "SPDX-[major].[minor]" but is: version-2.3'),
38+
(get_creation_info(spdx_version="SPDX-2.2"), "SPDXRef-DOCUMENT",
39+
f"provided SPDX version SPDX-2.3 does not match the document's SPDX version SPDX-2.2"),
3840
(get_creation_info(spdx_id="SPDXRef-doc"), "SPDXRef-doc",
3941
'spdx_id must be "SPDXRef-DOCUMENT", but is: SPDXRef-doc'),
4042
(get_creation_info(data_license="MIT"), "SPDXRef-DOCUMENT",
@@ -43,7 +45,7 @@ def test_valid_creation_info():
4345
"document_namespace must be a valid URI specified in RFC-3986, but is: some_namespace"),
4446
])
4547
def test_invalid_creation_info(creation_info_input, expected_message, spdx_id):
46-
validation_messages: List[ValidationMessage] = validate_creation_info(creation_info_input)
48+
validation_messages: List[ValidationMessage] = validate_creation_info(creation_info_input, "SPDX-2.3")
4749

4850
expected = ValidationMessage(expected_message, ValidationContext(spdx_id, None, SpdxElementType.DOCUMENT))
4951

tests/validation/test_document_validator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def test_valid_document():
2323
[get_snippet(), get_snippet()], [get_annotation(), get_annotation()],
2424
[get_relationship(), get_relationship()],
2525
[get_extracted_licensing_info(), get_extracted_licensing_info()])
26-
validation_messages: List[ValidationMessage] = validate_full_spdx_document(document, "2.3")
26+
validation_messages: List[ValidationMessage] = validate_full_spdx_document(document)
2727

2828
assert validation_messages == []
2929

tests/validation/test_relationship_validator.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def test_unknown_spdx_id(spdx_element_id, related_spdx_element_id, expected_mess
4343
relationship: Relationship = get_relationship(spdx_element_id=spdx_element_id,
4444
related_spdx_element_id=related_spdx_element_id)
4545
document: Document = get_document(files=[get_file(spdx_id="SPDXRef-File")])
46-
validation_messages: List[ValidationMessage] = validate_relationship(relationship, document, "2.3")
46+
validation_messages: List[ValidationMessage] = validate_relationship(relationship, document, "SPDX-2.3")
4747

4848
expected = ValidationMessage(expected_message,
4949
ValidationContext(element_type=SpdxElementType.RELATIONSHIP,
@@ -54,14 +54,14 @@ def test_unknown_spdx_id(spdx_element_id, related_spdx_element_id, expected_mess
5454

5555
@pytest.mark.parametrize("relationship, expected_message",
5656
[(Relationship("SPDXRef-DOCUMENT", RelationshipType.SPECIFICATION_FOR, "SPDXRef-Package"),
57-
"RelationshipType.SPECIFICATION_FOR is not supported for SPDX versions below 2.3"),
57+
"RelationshipType.SPECIFICATION_FOR is not supported for SPDX versions below SPDX-2.3"),
5858
(Relationship("SPDXRef-DOCUMENT", RelationshipType.REQUIREMENT_DESCRIPTION_FOR,
5959
"SPDXRef-Package"),
60-
"RelationshipType.REQUIREMENT_DESCRIPTION_FOR is not supported for SPDX versions below 2.3")])
60+
"RelationshipType.REQUIREMENT_DESCRIPTION_FOR is not supported for SPDX versions below SPDX-2.3")])
6161
def test_v2_3_only_types(relationship, expected_message):
6262
document: Document = get_document(packages=[get_package(spdx_id="SPDXRef-Package")])
6363

64-
validation_message: List[ValidationMessage] = validate_relationship(relationship, document, "2.2")
64+
validation_message: List[ValidationMessage] = validate_relationship(relationship, document, "SPDX-2.2")
6565

6666
expected = [ValidationMessage(expected_message,
6767
ValidationContext(element_type=SpdxElementType.RELATIONSHIP,

0 commit comments

Comments
 (0)
0