Skip to content

Commit 45e54ab

Browse files
committed
Rework the implementation of documentDescribes in SPDX module
Signed-off-by: tdruez <[email protected]>
1 parent 79bf654 commit 45e54ab

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

scanpipe/pipes/output.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -700,17 +700,18 @@ def to_spdx(project, include_files=False):
700700
Return the path of the generated output file.
701701
"""
702702
output_file = project.get_output_file_path("results", "spdx.json")
703+
document_spdx_id = f"SPDXRef-DOCUMENT-{project.uuid}"
703704

704705
discoveredpackage_qs = get_queryset(project, "discoveredpackage")
705706
discovereddependency_qs = get_queryset(project, "discovereddependency")
706707

707-
document_spdx_id = f"SPDXRef-DOCUMENT-{project.uuid}"
708708
project_as_root_package = spdx.Package(
709709
spdx_id=f"SPDXRef-scancodeio-project-{project.uuid}",
710710
name=project.name,
711711
files_analyzed=True,
712712
)
713-
packages_as_spdx = []
713+
714+
packages_as_spdx = [project_as_root_package]
714715
license_expressions = []
715716
relationships = []
716717

@@ -747,7 +748,7 @@ def to_spdx(project, include_files=False):
747748
spdx_id=document_spdx_id,
748749
name=f"scancodeio_{project.name}",
749750
namespace=f"https://scancode.io/spdxdocs/{project.uuid}",
750-
describe=project_as_root_package,
751+
describes=[project_as_root_package.spdx_id],
751752
creation_info=spdx.CreationInfo(tool=f"ScanCode.io-{scancodeio_version}"),
752753
packages=packages_as_spdx,
753754
files=files_as_spdx,

scanpipe/pipes/spdx.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
4444
Usage::
4545
46-
import pathlib
4746
from scanpipe.pipes import spdx
4847
4948
creation_info = spdx.CreationInfo(
@@ -53,6 +52,11 @@
5352
tool="SPDXCode-1.0",
5453
)
5554
55+
root_package = spdx.Package(
56+
spdx_id="SPDXRef-project1",
57+
name="project1",
58+
)
59+
5660
package1 = spdx.Package(
5761
spdx_id="SPDXRef-package1",
5862
name="lxml",
@@ -76,8 +80,9 @@
7680
document = spdx.Document(
7781
name="Document name",
7882
namespace="https://[CreatorWebsite]/[pathToSpdx]/[DocumentName]-[UUID]",
83+
describes=[root_package.spdx_id],
7984
creation_info=creation_info,
80-
packages=[package1],
85+
packages=[root_package, package1],
8186
extracted_licenses=[
8287
spdx.ExtractedLicensingInfo(
8388
license_id="LicenseRef-1",
@@ -93,7 +98,7 @@
9398
print(document.as_json())
9499
95100
# Validate document
96-
schema = pathlib.Path(spdx.SPDX_JSON_SCHEMA_LOCATION).read_text()
101+
schema = spdx.SPDX_SCHEMA_PATH.read_text()
97102
document.validate(schema)
98103
99104
# Write document to a file:
@@ -542,7 +547,7 @@ class Document:
542547

543548
name: str
544549
namespace: str
545-
describe: Package
550+
describes: list
546551
creation_info: CreationInfo
547552
packages: list[Package]
548553

@@ -557,18 +562,15 @@ class Document:
557562

558563
def as_dict(self):
559564
"""Return the SPDX document as a serializable dict."""
560-
packages = [self.describe.as_dict()]
561-
packages.extend([package.as_dict() for package in self.packages])
562-
563565
data = {
564566
"spdxVersion": f"SPDX-{self.version}",
565567
"dataLicense": self.data_license,
566568
"SPDXID": self.spdx_id,
567569
"name": self.safe_document_name(self.name),
568570
"documentNamespace": self.namespace,
569-
"documentDescribes": [self.describe.spdx_id],
571+
"documentDescribes": self.describes,
570572
"creationInfo": self.creation_info.as_dict(),
571-
"packages": packages,
573+
"packages": [package.as_dict() for package in self.packages],
572574
}
573575

574576
if self.files:
@@ -601,6 +603,7 @@ def from_data(cls, data):
601603
data_license=data.get("dataLicense"),
602604
name=data.get("name"),
603605
namespace=data.get("documentNamespace"),
606+
describes=data.get("documentDescribes"),
604607
creation_info=CreationInfo.from_data(data.get("creationInfo", {})),
605608
packages=[
606609
Package.from_data(package_data)

0 commit comments

Comments
 (0)