Skip to content

Commit

Permalink
Add all package and dependencies to the tree view #1145
Browse files Browse the repository at this point in the history
Signed-off-by: tdruez <tdruez@nexb.com>
  • Loading branch information
tdruez committed Jul 31, 2024
1 parent bcc4221 commit 1a9849f
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
12 changes: 12 additions & 0 deletions scanpipe/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3546,6 +3546,18 @@ def as_cyclonedx(self):
class DiscoveredDependencyQuerySet(
PackageURLQuerySetMixin, VulnerabilityQuerySetMixin, ProjectRelatedQuerySet
):
def project_dependencies(self):
return self.filter(for_package__isnull=True)

def package_dependencies(self):
return self.filter(for_package__isnull=False)

def resolved(self):
return self.filter(resolved_to_package__isnull=False)

def unresolved(self):
return self.filter(resolved_to_package__isnull=True)

def prefetch_for_serializer(self):
"""
Optimized prefetching for a QuerySet to be consumed by the
Expand Down
12 changes: 12 additions & 0 deletions scanpipe/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2303,6 +2303,11 @@ def get_dependency_tree(self, project):
root_packages = project.discoveredpackages.root_packages().order_by("name")
project_children = [self.get_node(package) for package in root_packages]

# Dependencies with no assigned `for_packages`.
project_dependencies = project.discovereddependencies.project_dependencies()
for dependency in project_dependencies:
project_children.append({"name": dependency.package_url})

project_tree = {
"name": project.name,
"children": project_children,
Expand All @@ -2312,10 +2317,17 @@ def get_dependency_tree(self, project):

def get_node(self, package):
node = {"name": str(package)}
# Resolved dependencies
children = [
self.get_node(child_package)
for child_package in package.children_packages.all()
]

unresolved_dependencies = package.declared_dependencies.unresolved()
for dependency in unresolved_dependencies:
children.append({"name": dependency.package_url})

if children:
node["children"] = children

return node

0 comments on commit 1a9849f

Please sign in to comment.