Skip to content

Commit 3d1c4b7

Browse files
committed
implement suggested changes
Signed-off-by: Aayush Kumar <aayush214.kumar@gmail.com>
1 parent e63c0f9 commit 3d1c4b7

File tree

5 files changed

+28
-25
lines changed

5 files changed

+28
-25
lines changed

scanpipe/models.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
from django.db import transaction
4747
from django.db.models import Case
4848
from django.db.models import Count
49+
from django.db.models import Exists
4950
from django.db.models import IntegerField
5051
from django.db.models import OuterRef
5152
from django.db.models import Prefetch
@@ -2383,6 +2384,18 @@ def macho_binaries(self):
23832384
def executable_binaries(self):
23842385
return self.union(self.win_exes(), self.macho_binaries(), self.elfs())
23852386

2387+
def with_children(self, project):
2388+
"""
2389+
Annotate the QuerySet with has_children field based on whether
2390+
each resource has any children (subdirectories/files).
2391+
"""
2392+
subdirs = CodebaseResource.objects.filter(
2393+
project=project,
2394+
parent_path=OuterRef("path"),
2395+
)
2396+
2397+
return self.annotate(has_children=Exists(subdirs))
2398+
23862399

23872400
class ScanFieldsModelMixin(models.Model):
23882401
"""Fields returned by the ScanCode-toolkit scans."""

scanpipe/templates/scanpipe/panels/file_tree_panel.html renamed to scanpipe/templates/scanpipe/panels/codebase_tree_panel.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
{% for node in children %}
33
<li class="mb-1">
44
{% if node.is_dir %}
5-
<div class="tree-node is-flex is-align-items-center has-text-weight-semibold is-clickable px-1" data-folder{% if node.has_children %} data-target="{{ node.path|slugify }}" data-url="{% url 'file_tree' slug=project.slug %}?path={{ node.path }}"{% endif %}>
6-
<span class="icon is-small chevron mr-1" data-chevron{% if not node.has_children %} style="visibility: hidden;"{% endif %}>
5+
<div class="tree-node is-flex is-align-items-center has-text-weight-semibold is-clickable px-1" data-folder{% if node.has_children %} data-target="{{ node.path|slugify }}" data-url="{% url 'codebase_resource_tree' slug=project.slug %}?path={{ node.path }}"{% endif %}>
6+
<span class="icon is-small chevron mr-1{% if not node.has_children %} is-invisible{% endif %}" data-chevron>
77
<i class="fas fa-chevron-right"></i>
88
</span>
99
<span class="is-flex is-align-items-center folder-meta">
@@ -14,12 +14,12 @@
1414
</span>
1515
</div>
1616
{% if node.has_children %}
17-
<div id="dir-{{ node.path|slugify }}" class="ml-4 hidden" data-loaded="false"></div>
17+
<div id="dir-{{ node.path|slugify }}" class="ml-4 is-hidden" data-loaded="false"></div>
1818
{% endif %}
1919
{% else %}
2020
<div class="is-flex is-align-items-center ml-5 is-clickable">
2121
<span class="icon is-small mr-1">
22-
<i class="fas fa-file"></i>
22+
<i class="far fa-file"></i>
2323
</span>
2424
<span>{{ node.name }}</span>
2525
</div>

scanpipe/templates/scanpipe/resource_tree.html

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@
44

55
{% block extrahead %}
66
<style>
7-
.hidden {
8-
display: none;
9-
}
107
.chevron {
118
transition: transform 0.2s ease;
129
display: inline-block;
@@ -29,8 +26,8 @@
2926

3027
<div class="columns is-gapless is-mobile" style="height: 80vh; margin: 0;">
3128
<div class="column is-one-third p-4" style="border-right: 1px solid #ccc; overflow-y: auto;">
32-
<div id="file-tree">
33-
{% include "scanpipe/panels/file_tree_panel.html" with children=children path=path %}
29+
<div id="resource-tree">
30+
{% include "scanpipe/panels/codebase_tree_panel.html" with children=children path=path %}
3431
</div>
3532
</div>
3633
<div class="column p-4" style="overflow-y: auto;">
@@ -52,9 +49,9 @@
5249
const target = document.getElementById("dir-" + targetId);
5350

5451
if (target.dataset.loaded === "true") {
55-
target.classList.toggle("hidden");
52+
target.classList.toggle("is-hidden");
5653
} else {
57-
target.classList.remove("hidden");
54+
target.classList.remove("is-hidden");
5855
const response = await fetch(url + "&tree=true");
5956
target.innerHTML = await response.text();
6057
target.dataset.loaded = "true";

scanpipe/urls.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,11 @@
121121
views.ProjectCodebaseView.as_view(),
122122
name="project_codebase",
123123
),
124+
path(
125+
"project/<slug:slug>/codebase_tree/",
126+
views.CodebaseResourceTreeView.as_view(),
127+
name="codebase_resource_tree",
128+
),
124129
path(
125130
"run/<uuid:uuid>/",
126131
views.run_detail_view,
@@ -241,10 +246,5 @@
241246
views.LicenseListView.as_view(),
242247
name="license_list",
243248
),
244-
path(
245-
"project/<slug:slug>/codebase_tree/",
246-
views.CodebaseResourceTreeView.as_view(),
247-
name="file_tree",
248-
),
249249
path("monitor/", include("django_rq.urls")),
250250
]

scanpipe/views.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@
3737
from django.core.exceptions import ValidationError
3838
from django.core.files.storage.filesystem import FileSystemStorage
3939
from django.core.serializers.json import DjangoJSONEncoder
40-
from django.db.models import Exists
41-
from django.db.models import OuterRef
4240
from django.db.models import Prefetch
4341
from django.db.models.manager import Manager
4442
from django.http import FileResponse
@@ -2585,12 +2583,7 @@ def get(self, request, *args, **kwargs):
25852583
.order_by("path")
25862584
)
25872585

2588-
subdirs = CodebaseResource.objects.filter(
2589-
project=project,
2590-
parent_path=OuterRef("path"),
2591-
)
2592-
2593-
children = base_qs.annotate(has_children=Exists(subdirs))
2586+
children = base_qs.with_children(project)
25942587

25952588
context = {
25962589
"project": project,
@@ -2599,5 +2592,5 @@ def get(self, request, *args, **kwargs):
25992592
}
26002593

26012594
if request.GET.get("tree") == "true":
2602-
return render(request, "scanpipe/panels/file_tree_panel.html", context)
2595+
return render(request, "scanpipe/panels/codebase_tree_panel.html", context)
26032596
return render(request, self.template_name, context)

0 commit comments

Comments
 (0)