From 457f37887c04775cc0d2df489c5d5d22ddaebaae Mon Sep 17 00:00:00 2001 From: tdruez Date: Thu, 23 Oct 2025 15:43:34 +0400 Subject: [PATCH 1/5] Prepare the HTML for proper HTMX content loading Signed-off-by: tdruez --- scancodeio/static/main.css | 2 - scanpipe/templates/scanpipe/base_htmx.html | 5 + .../scanpipe/panels/resource_table_panel.html | 230 +++++++++--------- .../templates/scanpipe/resource_detail.html | 14 +- .../templates/scanpipe/resource_tree.html | 5 + 5 files changed, 135 insertions(+), 121 deletions(-) create mode 100644 scanpipe/templates/scanpipe/base_htmx.html diff --git a/scancodeio/static/main.css b/scancodeio/static/main.css index bb1622b852..ceac90a17c 100644 --- a/scancodeio/static/main.css +++ b/scancodeio/static/main.css @@ -530,8 +530,6 @@ body.full-screen #resource-viewer .message-header { flex: 1; min-width: 0; transition: opacity 0.2s ease; - display: flex; - flex-direction: column; height: 100%; } #resource-tree-container .right-pane .table-scroll-area { diff --git a/scanpipe/templates/scanpipe/base_htmx.html b/scanpipe/templates/scanpipe/base_htmx.html new file mode 100644 index 0000000000..093920ac63 --- /dev/null +++ b/scanpipe/templates/scanpipe/base_htmx.html @@ -0,0 +1,5 @@ +{% block partial-content %} +{% endblock %} + +{% block scripts %} +{% endblock %} \ No newline at end of file diff --git a/scanpipe/templates/scanpipe/panels/resource_table_panel.html b/scanpipe/templates/scanpipe/panels/resource_table_panel.html index c0777fcadf..16a200a270 100644 --- a/scanpipe/templates/scanpipe/panels/resource_table_panel.html +++ b/scanpipe/templates/scanpipe/panels/resource_table_panel.html @@ -1,5 +1,5 @@ {% load humanize %} -
+
{% if path_segments %} @@ -29,123 +29,125 @@
-
- {% if resources %} - - - - - - - - - - - - {% if parent_path %} - - - - {% endif %} - {% for resource in resources %} +
+
+ {% if resources %} +
NameStatusLanguageLicenseAlert
-
- - - - .. -
-
+ - + + + + + + + + {% if parent_path %} + + + + {% endif %} + {% for resource in resources %} + + - - - - - - {% endfor %} - -
-
- - {% if resource.is_dir %} +
NameStatusLanguageLicenseAlert
+
+ + + .. +
+
+
+ + {% if resource.is_dir %} + + {% else %} + + {% endif %} + + {% if resource.is_dir %} + + {{ resource.name }} + {% else %} - + {{ resource.name }} {% endif %} - - {% if resource.is_dir %} - - {{ resource.name }} - - {% else %} - {{ resource.name }} - {% endif %} - {% if resource.tag %} - {{ resource.tag }} - {% endif %} -
-
- {{ resource.status }} - - {{ resource.programming_language }} - - {{ resource.detected_license_expression }} - - {{ resource.compliance_alert }} -
+ {% if resource.tag %} + {{ resource.tag }} + {% endif %} +
+ + + {{ resource.status }} + + + {{ resource.programming_language }} + + + {{ resource.detected_license_expression }} + + + {{ resource.compliance_alert }} + + + {% endfor %} + + - {% if is_paginated %} - - {% endif %} - {% else %} -
-
- + {% if is_paginated %} + + {% endif %} + {% else %} +
+
+ +
+

+ {% if path %} + No resources found in this directory. + {% else %} + Select a file or folder from the tree to view its contents. + {% endif %} +

-

- {% if path %} - No resources found in this directory. - {% else %} - Select a file or folder from the tree to view its contents. - {% endif %} -

-
- {% endif %} + {% endif %} +
\ No newline at end of file diff --git a/scanpipe/templates/scanpipe/resource_detail.html b/scanpipe/templates/scanpipe/resource_detail.html index 1ba3ac1bf8..ad7f0e8051 100644 --- a/scanpipe/templates/scanpipe/resource_detail.html +++ b/scanpipe/templates/scanpipe/resource_detail.html @@ -1,20 +1,25 @@ -{% extends "scanpipe/base.html" %} +{% extends request.htmx|yesno:"scanpipe/base_htmx.html,scanpipe/base.html" %} {% load static %} {% block title %}ScanCode.io: {{ project.name }} - {{ object.name }}{% endblock %} +{% block extrahead %} + + +{% endblock %} + {% block content %}
{% include 'scanpipe/includes/navbar_header.html' %}
{% include 'scanpipe/includes/messages.html' %}
{% include 'scanpipe/includes/breadcrumb_detail_view.html' with template_title="scanpipe/includes/resource_path_links.html" url_name="project_resources" %} - {% include 'scanpipe/tabset/tabset.html' %} + {% block partial-content %} + {% include 'scanpipe/tabset/tabset.html' %} + {% endblock %}
{% endblock %} {% block scripts %} - - {{ detected_values|json_script:"detected_values" }} {% endblock %} \ No newline at end of file diff --git a/scanpipe/templates/scanpipe/resource_tree.html b/scanpipe/templates/scanpipe/resource_tree.html index 660db165cf..59f3f44604 100644 --- a/scanpipe/templates/scanpipe/resource_tree.html +++ b/scanpipe/templates/scanpipe/resource_tree.html @@ -2,6 +2,11 @@ {% load static humanize %} {% block title %}ScanCode.io: {{ project.name }} - Resources tree{% endblock %} +{% block extrahead %} + + +{% endblock %} + {% block content %}
{% include 'scanpipe/includes/navbar_header.html' %} From 4442c5d684aee3a744cec97abc93e6875e1d70b1 Mon Sep 17 00:00:00 2001 From: tdruez Date: Thu, 23 Oct 2025 16:12:50 +0400 Subject: [PATCH 2/5] Load the resource details in the tree browser view Signed-off-by: tdruez --- .../scanpipe/panels/codebase_tree_panel.html | 4 +- .../scanpipe/panels/resource_table_panel.html | 244 +++++++++--------- .../templates/scanpipe/resource_tree.html | 2 +- 3 files changed, 128 insertions(+), 122 deletions(-) diff --git a/scanpipe/templates/scanpipe/panels/codebase_tree_panel.html b/scanpipe/templates/scanpipe/panels/codebase_tree_panel.html index fbd58e4915..c680cb235b 100644 --- a/scanpipe/templates/scanpipe/panels/codebase_tree_panel.html +++ b/scanpipe/templates/scanpipe/panels/codebase_tree_panel.html @@ -27,8 +27,8 @@ class="tree-node-file is-flex is-align-items-center pl-5 is-clickable is-file" data-file data-path="{{ node.path }}" - hx-get="{% url 'codebase_resource_table' project.slug %}?path={{ node.path }}" - hx-target="#right-pane" + hx-get="{% url 'resource_detail' project.slug node.path %}" + hx-target="#right-pane-content" hx-push-url="{% url 'codebase_resource_tree' project.slug %}?path={{ node.path }}"> diff --git a/scanpipe/templates/scanpipe/panels/resource_table_panel.html b/scanpipe/templates/scanpipe/panels/resource_table_panel.html index 16a200a270..7f85c8fde4 100644 --- a/scanpipe/templates/scanpipe/panels/resource_table_panel.html +++ b/scanpipe/templates/scanpipe/panels/resource_table_panel.html @@ -5,7 +5,9 @@ {% spaceless %} {% for subpath, segment in path_segments %} - {% if not forloop.first %}/{% endif %} + {% if not forloop.first %} + / + {% endif %} {% if not forloop.last %} - {{ segment }} - + hx-push-url="{% url 'codebase_resource_tree' project.slug %}?path={{ subpath }}" + {# WARNING: spaceless is not working properly so keep the label without spaces #} + >{{ segment }} {% else %} {{ segment }} {% endif %} @@ -29,125 +31,129 @@
-
-
- {% if resources %} - - - - - - - - +
+ {% if resources %} +
NameStatusLanguageLicenseAlert
+ + + + + + + + + + + {% if parent_path %} + + - - - {% if parent_path %} - - - - {% endif %} - {% for resource in resources %} - - + - - - - - - {% endfor %} - -
NameStatusLanguageLicenseAlert
+
+ + + + .. +
+
-
- - - - .. -
-
-
- - {% if resource.is_dir %} - - {% else %} - - {% endif %} - + {% endif %} + {% for resource in resources %} +
+
+ {% if resource.is_dir %} - - {{ resource.name }} - + {% else %} - {{ resource.name }} - {% endif %} - {% if resource.tag %} - {{ resource.tag }} + {% endif %} -
-
- {{ resource.status }} - - {{ resource.programming_language }} - - {{ resource.detected_license_expression }} - - {{ resource.compliance_alert }} -
+ + {% if resource.is_dir %} + + {{ resource.name }} + + {% else %} + + {{ resource.name }} + + {% endif %} + {% if resource.tag %} + {{ resource.tag }} + {% endif %} +
+ + + {{ resource.status }} + + + {{ resource.programming_language }} + + + {{ resource.detected_license_expression }} + + + {{ resource.compliance_alert }} + + + {% endfor %} + + - {% if is_paginated %} - - {% endif %} - {% else %} -
-
- -
-

- {% if path %} - No resources found in this directory. - {% else %} - Select a file or folder from the tree to view its contents. - {% endif %} -

-
+ {% if is_paginated %} + {% endif %} -
+ {% else %} +
+
+ +
+

+ {% if path %} + No resources found in this directory. + {% else %} + Select a file or folder from the tree to view its contents. + {% endif %} +

+
+ {% endif %} \ No newline at end of file diff --git a/scanpipe/templates/scanpipe/resource_tree.html b/scanpipe/templates/scanpipe/resource_tree.html index 59f3f44604..42a08d58ab 100644 --- a/scanpipe/templates/scanpipe/resource_tree.html +++ b/scanpipe/templates/scanpipe/resource_tree.html @@ -25,7 +25,7 @@
-
+
{% if path %}
Date: Thu, 23 Oct 2025 16:19:08 +0400 Subject: [PATCH 3/5] Refine margin rendering of tabsets Signed-off-by: tdruez --- scanpipe/templates/scanpipe/dependency_detail.html | 2 +- scanpipe/templates/scanpipe/license_detail.html | 2 +- scanpipe/templates/scanpipe/license_detection_detail.html | 2 +- scanpipe/templates/scanpipe/package_detail.html | 2 +- scanpipe/templates/scanpipe/resource_detail.html | 8 +++++--- scanpipe/templates/scanpipe/tabset/tabset.html | 4 ++-- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/scanpipe/templates/scanpipe/dependency_detail.html b/scanpipe/templates/scanpipe/dependency_detail.html index 6ccaed1f8b..e89aec3ab1 100644 --- a/scanpipe/templates/scanpipe/dependency_detail.html +++ b/scanpipe/templates/scanpipe/dependency_detail.html @@ -8,6 +8,6 @@ {% include 'scanpipe/includes/navbar_header.html' %}
{% include 'scanpipe/includes/messages.html' %}
{% include 'scanpipe/includes/breadcrumb_detail_view.html' with object_title=object.package_url url_name="project_dependencies" %} - {% include 'scanpipe/tabset/tabset.html' %} +
{% include 'scanpipe/tabset/tabset.html' %}
{% endblock %} \ No newline at end of file diff --git a/scanpipe/templates/scanpipe/license_detail.html b/scanpipe/templates/scanpipe/license_detail.html index 2d7b58d0dd..e118847dcb 100644 --- a/scanpipe/templates/scanpipe/license_detail.html +++ b/scanpipe/templates/scanpipe/license_detail.html @@ -16,6 +16,6 @@ - {% include 'scanpipe/tabset/tabset.html' %} +
{% include 'scanpipe/tabset/tabset.html' %}
{% endblock %} \ No newline at end of file diff --git a/scanpipe/templates/scanpipe/license_detection_detail.html b/scanpipe/templates/scanpipe/license_detection_detail.html index eec34ad59d..b8c3166cf6 100644 --- a/scanpipe/templates/scanpipe/license_detection_detail.html +++ b/scanpipe/templates/scanpipe/license_detection_detail.html @@ -8,6 +8,6 @@ {% include 'scanpipe/includes/navbar_header.html' %}
{% include 'scanpipe/includes/messages.html' %}
{% include 'scanpipe/includes/breadcrumb_detail_view.html' with object_title=object.identifier url_name="project_licenses" %} - {% include 'scanpipe/tabset/tabset.html' %} +
{% include 'scanpipe/tabset/tabset.html' %}
{% endblock %} \ No newline at end of file diff --git a/scanpipe/templates/scanpipe/package_detail.html b/scanpipe/templates/scanpipe/package_detail.html index d54840b785..fbc63bcc5b 100644 --- a/scanpipe/templates/scanpipe/package_detail.html +++ b/scanpipe/templates/scanpipe/package_detail.html @@ -8,6 +8,6 @@ {% include 'scanpipe/includes/navbar_header.html' %}
{% include 'scanpipe/includes/messages.html' %}
{% include 'scanpipe/includes/breadcrumb_detail_view.html' with object_title=object.package_url url_name="project_packages" %} - {% include 'scanpipe/tabset/tabset.html' %} +
{% include 'scanpipe/tabset/tabset.html' %}
{% endblock %} \ No newline at end of file diff --git a/scanpipe/templates/scanpipe/resource_detail.html b/scanpipe/templates/scanpipe/resource_detail.html index ad7f0e8051..9380d8743a 100644 --- a/scanpipe/templates/scanpipe/resource_detail.html +++ b/scanpipe/templates/scanpipe/resource_detail.html @@ -13,9 +13,11 @@ {% include 'scanpipe/includes/navbar_header.html' %}
{% include 'scanpipe/includes/messages.html' %}
{% include 'scanpipe/includes/breadcrumb_detail_view.html' with template_title="scanpipe/includes/resource_path_links.html" url_name="project_resources" %} - {% block partial-content %} - {% include 'scanpipe/tabset/tabset.html' %} - {% endblock %} +
+ {% block partial-content %} + {% include 'scanpipe/tabset/tabset.html' %} + {% endblock %} +
{% endblock %} diff --git a/scanpipe/templates/scanpipe/tabset/tabset.html b/scanpipe/templates/scanpipe/tabset/tabset.html index 2778deced7..6b9f1f218b 100644 --- a/scanpipe/templates/scanpipe/tabset/tabset.html +++ b/scanpipe/templates/scanpipe/tabset/tabset.html @@ -1,5 +1,5 @@ {% load humanize %} -
+
    {% for tab_id, tab_data in tabset_data.items %} @@ -25,7 +25,7 @@ {% for tab_id, tab_data in tabset_data.items %} {% if not tab_data.disabled %} -
    +
    {% if tab_data.template %} {% include tab_data.template with tab_data=tab_data %} {% else %} From 7290d353c15c61ca2ac584747d87d63b597d101b Mon Sep 17 00:00:00 2001 From: tdruez Date: Thu, 23 Oct 2025 16:26:35 +0400 Subject: [PATCH 4/5] Minor HTML adjustments Signed-off-by: tdruez --- .../scanpipe/panels/resource_table_panel.html | 2 +- .../templates/scanpipe/resource_tree.html | 36 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/scanpipe/templates/scanpipe/panels/resource_table_panel.html b/scanpipe/templates/scanpipe/panels/resource_table_panel.html index 7f85c8fde4..7945f2c14e 100644 --- a/scanpipe/templates/scanpipe/panels/resource_table_panel.html +++ b/scanpipe/templates/scanpipe/panels/resource_table_panel.html @@ -19,7 +19,7 @@ {# WARNING: spaceless is not working properly so keep the label without spaces #} >{{ segment }} {% else %} - {{ segment }} + {{ segment }} {% endif %} {% endfor %} {% endspaceless %} diff --git a/scanpipe/templates/scanpipe/resource_tree.html b/scanpipe/templates/scanpipe/resource_tree.html index 42a08d58ab..a3c05e98d7 100644 --- a/scanpipe/templates/scanpipe/resource_tree.html +++ b/scanpipe/templates/scanpipe/resource_tree.html @@ -17,27 +17,27 @@
-
-
-
-
- {% include "scanpipe/panels/codebase_tree_panel.html" with children=children path=path %} -
-
-
-
- {% if path %} -
+
+
+
+
+ {% include "scanpipe/panels/codebase_tree_panel.html" with children=children path=path %}
- {% else %} - {% include "scanpipe/panels/resource_table_panel.html" %} - {% endif %} +
+
+
+ {% if path %} +
+
+ {% else %} + {% include "scanpipe/panels/resource_table_panel.html" %} + {% endif %} +
-
{% endblock %} {% block scripts %} From f960c82fe5b40b13e0a2c16ff98754b5c49ebc8b Mon Sep 17 00:00:00 2001 From: tdruez Date: Thu, 23 Oct 2025 16:44:36 +0400 Subject: [PATCH 5/5] Rename views and templates for consistency and clarity Signed-off-by: tdruez --- ...endency_tree.html => dependency_tree.html} | 0 .../includes/project_summary_level.html | 2 +- .../scanpipe/panels/project_codebase.html | 2 +- .../templates/scanpipe/resource_list.html | 2 +- .../templates/scanpipe/resource_tree.html | 6 +-- .../scanpipe/tables/project_list_table.html | 2 +- .../resource_left_pane_tree.html} | 8 ++-- .../resource_right_pane_table.html} | 26 ++++++------ scanpipe/tests/test_views.py | 42 ++++++++++++------- scanpipe/urls.py | 12 +++--- scanpipe/views.py | 12 +++--- 11 files changed, 64 insertions(+), 50 deletions(-) rename scanpipe/templates/scanpipe/{project_dependency_tree.html => dependency_tree.html} (100%) rename scanpipe/templates/scanpipe/{panels/codebase_tree_panel.html => tree/resource_left_pane_tree.html} (77%) rename scanpipe/templates/scanpipe/{panels/resource_table_panel.html => tree/resource_right_pane_table.html} (79%) diff --git a/scanpipe/templates/scanpipe/project_dependency_tree.html b/scanpipe/templates/scanpipe/dependency_tree.html similarity index 100% rename from scanpipe/templates/scanpipe/project_dependency_tree.html rename to scanpipe/templates/scanpipe/dependency_tree.html diff --git a/scanpipe/templates/scanpipe/includes/project_summary_level.html b/scanpipe/templates/scanpipe/includes/project_summary_level.html index a9aee18f88..f942ebb418 100644 --- a/scanpipe/templates/scanpipe/includes/project_summary_level.html +++ b/scanpipe/templates/scanpipe/includes/project_summary_level.html @@ -70,7 +70,7 @@ {{ project.resource_count|intcomma }} {% if project.resource_count > 1 %} - + diff --git a/scanpipe/templates/scanpipe/panels/project_codebase.html b/scanpipe/templates/scanpipe/panels/project_codebase.html index 0f05c7c25a..b8c80f9312 100644 --- a/scanpipe/templates/scanpipe/panels/project_codebase.html +++ b/scanpipe/templates/scanpipe/panels/project_codebase.html @@ -21,7 +21,7 @@ {% endif %}
- + Tree view
diff --git a/scanpipe/templates/scanpipe/resource_list.html b/scanpipe/templates/scanpipe/resource_list.html index 90cb444e89..44091f4baa 100644 --- a/scanpipe/templates/scanpipe/resource_list.html +++ b/scanpipe/templates/scanpipe/resource_list.html @@ -17,7 +17,7 @@
- + diff --git a/scanpipe/templates/scanpipe/resource_tree.html b/scanpipe/templates/scanpipe/resource_tree.html index a3c05e98d7..2a174f41a4 100644 --- a/scanpipe/templates/scanpipe/resource_tree.html +++ b/scanpipe/templates/scanpipe/resource_tree.html @@ -21,19 +21,19 @@
- {% include "scanpipe/panels/codebase_tree_panel.html" with children=children path=path %} + {% include "scanpipe/tree/resource_left_pane_tree.html" with children=children path=path %}
{% if path %}
{% else %} - {% include "scanpipe/panels/resource_table_panel.html" %} + {% include "scanpipe/tree/resource_right_pane_table.html" %} {% endif %}
diff --git a/scanpipe/templates/scanpipe/tables/project_list_table.html b/scanpipe/templates/scanpipe/tables/project_list_table.html index 5ab588c6b8..728e324090 100644 --- a/scanpipe/templates/scanpipe/tables/project_list_table.html +++ b/scanpipe/templates/scanpipe/tables/project_list_table.html @@ -54,7 +54,7 @@ {{ project.codebaseresources_count|intcomma }}
{% if project.codebaseresources_count > 1 %} - + diff --git a/scanpipe/templates/scanpipe/panels/codebase_tree_panel.html b/scanpipe/templates/scanpipe/tree/resource_left_pane_tree.html similarity index 77% rename from scanpipe/templates/scanpipe/panels/codebase_tree_panel.html rename to scanpipe/templates/scanpipe/tree/resource_left_pane_tree.html index c680cb235b..6e3d697317 100644 --- a/scanpipe/templates/scanpipe/panels/codebase_tree_panel.html +++ b/scanpipe/templates/scanpipe/tree/resource_left_pane_tree.html @@ -2,7 +2,7 @@ {% for node in children %}
  • {% if node.is_dir %} -
    +
    @@ -10,9 +10,9 @@ class="is-flex is-align-items-center folder-meta is-clickable" data-folder-click data-path="{{ node.path }}" - hx-get="{% url 'codebase_resource_table' project.slug %}?path={{ node.path }}" + hx-get="{% url 'project_resource_tree_table' project.slug %}?path={{ node.path }}" hx-target="#right-pane" - hx-push-url="{% url 'codebase_resource_tree' project.slug %}?path={{ node.path }}"> + hx-push-url="{% url 'project_resource_tree' project.slug %}?path={{ node.path }}"> @@ -29,7 +29,7 @@ data-path="{{ node.path }}" hx-get="{% url 'resource_detail' project.slug node.path %}" hx-target="#right-pane-content" - hx-push-url="{% url 'codebase_resource_tree' project.slug %}?path={{ node.path }}"> + hx-push-url="{% url 'project_resource_tree' project.slug %}?path={{ node.path }}"> diff --git a/scanpipe/templates/scanpipe/panels/resource_table_panel.html b/scanpipe/templates/scanpipe/tree/resource_right_pane_table.html similarity index 79% rename from scanpipe/templates/scanpipe/panels/resource_table_panel.html rename to scanpipe/templates/scanpipe/tree/resource_right_pane_table.html index 7945f2c14e..2436b06c19 100644 --- a/scanpipe/templates/scanpipe/panels/resource_table_panel.html +++ b/scanpipe/templates/scanpipe/tree/resource_right_pane_table.html @@ -10,12 +10,12 @@ {% endif %} {% if not forloop.last %} {{ segment }} {% else %} @@ -48,9 +48,9 @@ + hx-push-url="{% url 'project_resource_tree' project.slug %}{% if parent_path %}?path={{ parent_path }}{% endif %}">
    @@ -75,11 +75,11 @@ {% if resource.is_dir %} + hx-push-url="{% url 'project_resource_tree' project.slug %}?path={{ resource.path }}"> {{ resource.name }} {% else %} @@ -87,7 +87,7 @@ href="{% url 'resource_detail' project.slug resource.path %}" hx-get="{% url 'resource_detail' project.slug resource.path %}" hx-target="#right-pane-content" - hx-push-url="{% url 'codebase_resource_tree' project.slug %}?path={{ resource.path }}"> + hx-push-url="{% url 'project_resource_tree' project.slug %}?path={{ resource.path }}"> {{ resource.name }} {% endif %} @@ -118,18 +118,18 @@ {% if page_obj.has_previous %} + hx-push-url="{% url 'project_resource_tree' project.slug %}?path={{ path }}&page={{ page_obj.previous_page_number }}"> Previous {% endif %} {% if page_obj.has_next %} + hx-push-url="{% url 'project_resource_tree' project.slug %}?path={{ path }}&page={{ page_obj.next_page_number }}"> Next page {% endif %} diff --git a/scanpipe/tests/test_views.py b/scanpipe/tests/test_views.py index 19829e4ad1..ad2e1c56b4 100644 --- a/scanpipe/tests/test_views.py +++ b/scanpipe/tests/test_views.py @@ -1636,7 +1636,7 @@ def test_scanpipe_views_resource_tree_root_path(self): make_resource_file(self.project1, path="child1.txt") make_resource_file(self.project1, path="dir1") - url = reverse("codebase_resource_tree", kwargs={"slug": self.project1.slug}) + url = reverse("project_resource_tree", kwargs={"slug": self.project1.slug}) response = self.client.get(url) children = response.context["children"] child1 = children[0] @@ -1650,7 +1650,7 @@ def test_scanpipe_views_resource_tree_children_path(self): make_resource_file(self.project1, path="parent/dir1") make_resource_file(self.project1, path="parent/dir1/child2.txt") - url = reverse("codebase_resource_tree", kwargs={"slug": self.project1.slug}) + url = reverse("project_resource_tree", kwargs={"slug": self.project1.slug}) response = self.client.get(url + "?path=parent&tree_panel=true") children = response.context["children"] @@ -1663,12 +1663,14 @@ def test_scanpipe_views_resource_tree_children_path(self): self.assertFalse(child1.has_children) self.assertTrue(dir1.has_children) - def test_scanpipe_views_codebase_resource_table_view_with_path_directory(self): + def test_scanpipe_views_project_resource_tree_table_view_with_path_directory(self): make_resource_directory(self.project1, path="parent") make_resource_file(self.project1, path="parent/child1.txt") make_resource_file(self.project1, path="parent/child2.py") - url = reverse("codebase_resource_table", kwargs={"slug": self.project1.slug}) + url = reverse( + "project_resource_tree_table", kwargs={"slug": self.project1.slug} + ) response = self.client.get(url + "?path=parent") self.assertEqual(200, response.status_code) @@ -1679,10 +1681,12 @@ def test_scanpipe_views_codebase_resource_table_view_with_path_directory(self): resource_paths = [r.path for r in resources] self.assertEqual(["parent/child1.txt", "parent/child2.py"], resource_paths) - def test_scanpipe_views_codebase_resource_table_view_with_path_file(self): + def test_scanpipe_views_project_resource_tree_table_view_with_path_file(self): make_resource_file(self.project1, path="specific_file.txt") - url = reverse("codebase_resource_table", kwargs={"slug": self.project1.slug}) + url = reverse( + "project_resource_tree_table", kwargs={"slug": self.project1.slug} + ) response = self.client.get(url + "?path=specific_file.txt") self.assertEqual(200, response.status_code) @@ -1691,10 +1695,12 @@ def test_scanpipe_views_codebase_resource_table_view_with_path_file(self): self.assertEqual(1, len(resources)) self.assertEqual("specific_file.txt", resources[0].path) - def test_scanpipe_views_codebase_resource_table_view_empty_directory(self): + def test_scanpipe_views_project_resource_tree_table_view_empty_directory(self): make_resource_directory(self.project1, path="empty_dir") - url = reverse("codebase_resource_table", kwargs={"slug": self.project1.slug}) + url = reverse( + "project_resource_tree_table", kwargs={"slug": self.project1.slug} + ) response = self.client.get(url + "?path=empty_dir") self.assertEqual(200, response.status_code) @@ -1702,12 +1708,14 @@ def test_scanpipe_views_codebase_resource_table_view_empty_directory(self): resources = list(response.context["resources"]) self.assertEqual(0, len(resources)) - def test_scanpipe_views_codebase_resource_table_view_with_packages(self): + def test_scanpipe_views_project_resource_tree_table_view_with_packages(self): resource1 = make_resource_file(self.project1, path="file_with_package.txt") package1 = DiscoveredPackage.create_from_data(self.project1, package_data1) package1.add_resources([resource1]) - url = reverse("codebase_resource_table", kwargs={"slug": self.project1.slug}) + url = reverse( + "project_resource_tree_table", kwargs={"slug": self.project1.slug} + ) response = self.client.get(url + "?path=file_with_package.txt") self.assertEqual(200, response.status_code) @@ -1717,14 +1725,16 @@ def test_scanpipe_views_codebase_resource_table_view_with_packages(self): resource = resources[0] self.assertTrue(resource.discovered_packages.exists()) - @mock.patch("scanpipe.views.CodebaseResourceTableView.paginate_by", 2) - def test_scanpipe_views_codebase_resource_table_view_pagination(self): + @mock.patch("scanpipe.views.ProjectResourceTreeTableView.paginate_by", 2) + def test_scanpipe_views_project_resource_tree_table_view_pagination(self): make_resource_directory(self.project1, path="parent") make_resource_file(self.project1, path="parent/file1.txt", parent_path="parent") make_resource_file(self.project1, path="parent/file2.txt", parent_path="parent") make_resource_file(self.project1, path="parent/file3.txt", parent_path="parent") - url = reverse("codebase_resource_table", kwargs={"slug": self.project1.slug}) + url = reverse( + "project_resource_tree_table", kwargs={"slug": self.project1.slug} + ) response = self.client.get(url + "?path=parent") self.assertEqual(200, response.status_code) @@ -1739,7 +1749,7 @@ def test_scanpipe_views_codebase_resource_table_view_pagination(self): self.assertFalse(response.context["page_obj"].has_next()) self.assertTrue(response.context["page_obj"].has_previous()) - def test_scanpipe_views_codebase_resource_table_view_field_selection(self): + def test_scanpipe_views_project_resource_tree_table_view_field_selection(self): resource = make_resource_file( self.project1, path="test_file.py", @@ -1748,7 +1758,9 @@ def test_scanpipe_views_codebase_resource_table_view_field_selection(self): detected_license_expression="MIT", ) - url = reverse("codebase_resource_table", kwargs={"slug": self.project1.slug}) + url = reverse( + "project_resource_tree_table", kwargs={"slug": self.project1.slug} + ) response = self.client.get(url + "?path=test_file.py") self.assertEqual(200, response.status_code) diff --git a/scanpipe/urls.py b/scanpipe/urls.py index 67a457f94d..0979bb4a5a 100644 --- a/scanpipe/urls.py +++ b/scanpipe/urls.py @@ -132,14 +132,14 @@ name="project_codebase", ), path( - "project//codebase_tree/", - views.CodebaseResourceTreeView.as_view(), - name="codebase_resource_tree", + "project//resource_tree/", + views.ProjectResourceTreeView.as_view(), + name="project_resource_tree", ), path( - "project//resource_table/", - views.CodebaseResourceTableView.as_view(), - name="codebase_resource_table", + "project//resource_tree_table/", + views.ProjectResourceTreeTableView.as_view(), + name="project_resource_tree_table", ), path( "run//", diff --git a/scanpipe/views.py b/scanpipe/views.py index bfd18ca158..8291d810f6 100644 --- a/scanpipe/views.py +++ b/scanpipe/views.py @@ -2708,7 +2708,7 @@ def get_object(self, queryset=None): class ProjectDependencyTreeView(ConditionalLoginRequired, generic.DetailView): model = Project - template_name = "scanpipe/project_dependency_tree.html" + template_name = "scanpipe/dependency_tree.html" def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) @@ -2768,7 +2768,7 @@ def get_node(self, package): return node -class CodebaseResourceTreeView(ConditionalLoginRequired, generic.DetailView): +class ProjectResourceTreeView(ConditionalLoginRequired, generic.DetailView): template_name = "scanpipe/resource_tree.html" def get(self, request, *args, **kwargs): @@ -2791,17 +2791,19 @@ def get(self, request, *args, **kwargs): } if request.GET.get("tree_panel") == "true": - return render(request, "scanpipe/panels/codebase_tree_panel.html", context) + return render( + request, "scanpipe/tree/resource_left_pane_tree.html", context + ) return render(request, self.template_name, context) -class CodebaseResourceTableView( +class ProjectResourceTreeTableView( ConditionalLoginRequired, ProjectRelatedViewMixin, generic.ListView, ): model = CodebaseResource - template_name = "scanpipe/panels/resource_table_panel.html" + template_name = "scanpipe/tree/resource_right_pane_table.html" paginate_by = settings.SCANCODEIO_PAGINATE_BY.get("resource", 100) context_object_name = "resources"