diff --git a/spdx/parsers/rdfbuilders.py b/spdx/parsers/rdfbuilders.py index 3affb7329..12d0078b6 100644 --- a/spdx/parsers/rdfbuilders.py +++ b/spdx/parsers/rdfbuilders.py @@ -467,6 +467,27 @@ def set_file_notice(self, doc, text): else: raise OrderError("File::Notice") + def set_file_spdx_id(self, doc, spdx_id): + """ + Set the file SPDX Identifier. + Raise OrderError if no package or no file defined. + Raise SPDXValueError if malformed value. + Raise CardinalityError if more than one spdx_id set. + """ + if self.has_package(doc) and self.has_file(doc): + if not self.file_spdx_id_set: + self.file_spdx_id_set = True + spdx_id = spdx_id.split("#")[-1] + if validations.validate_file_spdx_id(spdx_id): + self.file(doc).spdx_id = spdx_id + return True + else: + raise SPDXValueError("File::SPDXID") + else: + raise CardinalityError("File::SPDXID") + else: + raise OrderError("File::SPDXID") + class SnippetBuilder(tagvaluebuilders.SnippetBuilder): def __init__(self): diff --git a/spdx/parsers/validations.py b/spdx/parsers/validations.py index a788569f2..6b99d77c4 100644 --- a/spdx/parsers/validations.py +++ b/spdx/parsers/validations.py @@ -219,7 +219,6 @@ def validate_pkg_lics_comment(value, optional=False): def validate_file_spdx_id(value, optional=False): - value = value.split("#")[-1] TEXT_RE = re.compile(r"SPDXRef-([A-Za-z0-9.\-]+)", re.UNICODE) if value is None: return optional diff --git a/tests/data/doc_parse/spdx-expected.json b/tests/data/doc_parse/spdx-expected.json index 3514bfcc6..7012f02ce 100644 --- a/tests/data/doc_parse/spdx-expected.json +++ b/tests/data/doc_parse/spdx-expected.json @@ -103,7 +103,7 @@ }, "files": [ { - "id": "https://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-File1", + "id": "SPDXRef-File1", "name": "Jenna-2.6.3/jena-2.6.3-sources.jar", "type": 3, "comment": "This file belongs to Jena", @@ -137,7 +137,7 @@ "artifactOfProjectURI": [] }, { - "id": "https://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-File2", + "id": "SPDXRef-File2", "name": "src/org/spdx/parser/DOAPProject.java", "type": 1, "comment": null,