Skip to content

Commit 086fb51

Browse files
committed
add suggested improvements
Signed-off-by: Aayush Kumar <[email protected]>
1 parent f9e1159 commit 086fb51

File tree

5 files changed

+36
-14
lines changed

5 files changed

+36
-14
lines changed

scanpipe/models.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2384,17 +2384,16 @@ def macho_binaries(self):
23842384
def executable_binaries(self):
23852385
return self.union(self.win_exes(), self.macho_binaries(), self.elfs())
23862386

2387-
def with_children(self, project):
2387+
def with_has_children(self):
23882388
"""
23892389
Annotate the QuerySet with has_children field based on whether
23902390
each resource has any children (subdirectories/files).
23912391
"""
2392-
subdirs = CodebaseResource.objects.filter(
2393-
project=project,
2392+
children_qs = CodebaseResource.objects.filter(
23942393
parent_path=OuterRef("path"),
23952394
)
23962395

2397-
return self.annotate(has_children=Exists(subdirs))
2396+
return self.annotate(has_children=Exists(children_qs))
23982397

23992398

24002399
class ScanFieldsModelMixin(models.Model):

scanpipe/templates/scanpipe/resource_tree.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
target.classList.toggle("is-hidden");
5353
} else {
5454
target.classList.remove("is-hidden");
55-
const response = await fetch(url + "&tree=true");
55+
const response = await fetch(url + "&tree_panel=true");
5656
target.innerHTML = await response.text();
5757
target.dataset.loaded = "true";
5858
htmx.process(target);

scanpipe/tests/test_models.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3011,6 +3011,31 @@ def test_scanpipe_discovered_package_model_unique_package_uid_in_project(self):
30113011
self.assertTrue(package3.package_uid)
30123012
self.assertNotEqual(package.package_uid, package3.package_uid)
30133013

3014+
def test_scanpipe_codebase_resource_queryset_with_has_children(self):
3015+
project1 = make_project("Analysis")
3016+
3017+
CodebaseResource.objects.create(
3018+
project=project1,
3019+
type=CodebaseResource.Type.DIRECTORY,
3020+
path="parent",
3021+
)
3022+
CodebaseResource.objects.create(
3023+
project=project1,
3024+
type=CodebaseResource.Type.FILE,
3025+
path="parent/child.txt",
3026+
)
3027+
CodebaseResource.objects.create(
3028+
project=project1,
3029+
type=CodebaseResource.Type.DIRECTORY,
3030+
path="empty",
3031+
)
3032+
3033+
qs = CodebaseResource.objects.filter(project=project1).with_has_children()
3034+
results = {r.path: r.has_children for r in qs}
3035+
self.assertTrue(results["parent"])
3036+
self.assertFalse(results["parent/child.txt"])
3037+
self.assertFalse(results["empty"])
3038+
30143039
@skipIf(connection.vendor == "sqlite", "No max_length constraints on SQLite.")
30153040
def test_scanpipe_codebase_resource_create_and_add_package_warnings(self):
30163041
project1 = make_project("Analysis")

scanpipe/tests/test_views.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1577,27 +1577,26 @@ def test_project_codebase_resources_export_json(self):
15771577
for field in expected_fields:
15781578
self.assertIn(field, json_data[0])
15791579

1580-
def test_file_tree_base_url_lists_top_level_nodes(self):
1580+
def test_scanpipe_views_resource_tree_root_path(self):
15811581
make_resource_file(self.project1, path="child1.txt")
15821582
make_resource_file(self.project1, path="dir1")
15831583

15841584
url = reverse("codebase_resource_tree", kwargs={"slug": self.project1.slug})
15851585
response = self.client.get(url)
15861586
children = response.context["children"]
1587-
print(response.context)
15881587
child1 = children[0]
15891588
dir1 = children[1]
15901589

15911590
self.assertEqual(child1.path, "child1.txt")
15921591
self.assertEqual(dir1.path, "dir1")
15931592

1594-
def test_file_tree_nested_url_lists_only_children_of_given_path(self):
1593+
def test_scanpipe_views_resource_tree_children_path(self):
15951594
make_resource_file(self.project1, path="parent/child1.txt")
15961595
make_resource_file(self.project1, path="parent/dir1")
15971596
make_resource_file(self.project1, path="parent/dir1/child2.txt")
15981597

15991598
url = reverse("codebase_resource_tree", kwargs={"slug": self.project1.slug})
1600-
response = self.client.get(url + "?path=parent&tree=true")
1599+
response = self.client.get(url + "?path=parent&tree_panel=true")
16011600
children = response.context["children"]
16021601

16031602
child1 = children[0]

scanpipe/views.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2577,20 +2577,19 @@ def get(self, request, *args, **kwargs):
25772577
project = get_object_or_404(Project, slug=slug)
25782578
path = request.GET.get("path", "")
25792579

2580-
base_qs = (
2581-
CodebaseResource.objects.filter(project=project, parent_path=path)
2580+
children = (
2581+
project.codebaseresources.filter(parent_path=path)
2582+
.with_has_children()
25822583
.only("path", "name", "type")
25832584
.order_by("path")
25842585
)
25852586

2586-
children = base_qs.with_children(project)
2587-
25882587
context = {
25892588
"project": project,
25902589
"path": path,
25912590
"children": children,
25922591
}
25932592

2594-
if request.GET.get("tree") == "true":
2593+
if request.GET.get("tree_panel") == "true":
25952594
return render(request, "scanpipe/panels/codebase_tree_panel.html", context)
25962595
return render(request, self.template_name, context)

0 commit comments

Comments
 (0)