Skip to content

Commit 79bf654

Browse files
committed
Set documentDescribes to reference the root SPDX element(s) only
Signed-off-by: tdruez <[email protected]>
1 parent 473c6fe commit 79bf654

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

scanpipe/pipes/output.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -705,15 +705,29 @@ def to_spdx(project, include_files=False):
705705
discovereddependency_qs = get_queryset(project, "discovereddependency")
706706

707707
document_spdx_id = f"SPDXRef-DOCUMENT-{project.uuid}"
708+
project_as_root_package = spdx.Package(
709+
spdx_id=f"SPDXRef-scancodeio-project-{project.uuid}",
710+
name=project.name,
711+
files_analyzed=True,
712+
)
708713
packages_as_spdx = []
709714
license_expressions = []
710715
relationships = []
711716

712717
for package in discoveredpackage_qs:
713-
packages_as_spdx.append(package.as_spdx())
718+
spdx_package = package.as_spdx()
719+
packages_as_spdx.append(spdx_package)
720+
714721
if license_expression := package.declared_license_expression:
715722
license_expressions.append(license_expression)
716723

724+
spdx_relationship = spdx.Relationship(
725+
spdx_id=project_as_root_package.spdx_id,
726+
related_spdx_id=spdx_package.spdx_id,
727+
relationship="DEPENDS_ON",
728+
)
729+
relationships.append(spdx_relationship)
730+
717731
for dependency in discovereddependency_qs:
718732
spdx_relationship = get_dependency_as_spdx_relationship(
719733
dependency,
@@ -733,6 +747,7 @@ def to_spdx(project, include_files=False):
733747
spdx_id=document_spdx_id,
734748
name=f"scancodeio_{project.name}",
735749
namespace=f"https://scancode.io/spdxdocs/{project.uuid}",
750+
describe=project_as_root_package,
736751
creation_info=spdx.CreationInfo(tool=f"ScanCode.io-{scancodeio_version}"),
737752
packages=packages_as_spdx,
738753
files=files_as_spdx,

scanpipe/pipes/spdx.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ class ExtractedLicensingInfo:
267267
"""
268268

269269
license_id: str
270-
extracted_text: str
270+
extracted_text: str = "NOASSERTION"
271271

272272
name: str = ""
273273
comment: str = ""
@@ -542,6 +542,7 @@ class Document:
542542

543543
name: str
544544
namespace: str
545+
describe: Package
545546
creation_info: CreationInfo
546547
packages: list[Package]
547548

@@ -556,15 +557,18 @@ class Document:
556557

557558
def as_dict(self):
558559
"""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+
559563
data = {
560564
"spdxVersion": f"SPDX-{self.version}",
561565
"dataLicense": self.data_license,
562566
"SPDXID": self.spdx_id,
563567
"name": self.safe_document_name(self.name),
564568
"documentNamespace": self.namespace,
569+
"documentDescribes": [self.describe.spdx_id],
565570
"creationInfo": self.creation_info.as_dict(),
566-
"packages": [package.as_dict() for package in self.packages],
567-
"documentDescribes": [package.spdx_id for package in self.packages],
571+
"packages": packages,
568572
}
569573

570574
if self.files:

0 commit comments

Comments
 (0)