Skip to content

Commit 2640c2f

Browse files
committed
Add dependency detail view #447
Signed-off-by: Jono Yang <[email protected]>
1 parent f240333 commit 2640c2f

File tree

6 files changed

+75
-2
lines changed

6 files changed

+75
-2
lines changed

scanpipe/models.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1980,6 +1980,12 @@ class DiscoveredDependency(
19801980
),
19811981
)
19821982

1983+
def __str__(self):
1984+
return self.purl or str(self.uuid)
1985+
1986+
def get_absolute_url(self):
1987+
return reverse("dependency_detail", args=[self.project_id, self.pk])
1988+
19831989
@classmethod
19841990
def create_from_data(cls, project, dependency_data):
19851991
"""
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
{% extends "scanpipe/base.html" %}
2+
{% load static humanize %}
3+
4+
{% block title %}ScanCode.io: {{ project.name }} - {{ object.name }}{% endblock %}
5+
6+
{% block content %}
7+
<div class="container is-max-desktop">
8+
{% include 'scanpipe/includes/navbar_header.html' %}
9+
<div class="mx-5 mb-2">{% include 'scanpipe/includes/messages.html' %}</div>
10+
11+
<section class="mx-5 mb-3">
12+
<nav class="breadcrumb is-medium mb-1" aria-label="breadcrumbs">
13+
<ul>
14+
<li><a href="{% url 'project_list' %}">Projects</a></li>
15+
<li><a href="{{ project.get_absolute_url }}">{{ project.name }}</a></li>
16+
<li><a href="{% url 'project_dependencies' project.uuid %}">Discovered Dependencies</a></li>
17+
</ul>
18+
</nav>
19+
<div class="tags has-addons my-3">
20+
<span class="tag is-dark">Package URL</span>
21+
<span class="tag is-info">{{ object }}</span>
22+
</div>
23+
</section>
24+
25+
<div class="tabs is-boxed mx-5">
26+
<ul>
27+
<li class="is-active">
28+
<a data-target="tab-details">
29+
<span class="icon is-small"><i class="fas fa-info-circle"></i></span>
30+
<span>Details</span>
31+
</a>
32+
</li>
33+
</ul>
34+
</div>
35+
36+
<section id="tab-details" class="tab-content is-active mx-5">
37+
<dl>
38+
{% for field, value in dependency_data.items %}
39+
<dt class="has-text-weight-semibold">
40+
{{ field }}
41+
</dt>
42+
<dd class="mb-4">
43+
<pre>{{ value|default_if_none:'' }}</pre>
44+
</dd>
45+
{% endfor %}
46+
</dl>
47+
</section>
48+
</div>
49+
{% endblock %}

scanpipe/templates/scanpipe/dependency_list.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
{% for dependency in object_list %}
3535
<tr class="break-word">
3636
<td style="min-width: 500px;" title="{{ dependency.purl }}">
37-
{{ dependency.purl }}
37+
<a href="{{ dependency.get_absolute_url }}">{{ dependency.purl }}</a>
3838
</td>
3939
<td>
4040
{{ dependency.extracted_requirement }}

scanpipe/templates/scanpipe/package_list.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
<tbody>
2828
{% for package in object_list %}
2929
<tr class="break-word">
30-
<td style="min-width: 500px;" title="{{ package.package_uid }}">
30+
<td style="min-width: 500px;" title="{{ package.package_url }}">
3131
<a href="{{ package.get_absolute_url }}">{{ package.package_url }}</a>
3232
</td>
3333
<td style="min-width: 300px; max-width: 400px;">

scanpipe/urls.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@
4141
views.DiscoveredPackageDetailsView.as_view(),
4242
name="package_detail",
4343
),
44+
path(
45+
"project/<uuid:uuid>/dependencies/<int:pk>/",
46+
views.DiscoveredDependencyDetailsView.as_view(),
47+
name="dependency_detail",
48+
),
4449
path(
4550
"project/<uuid:uuid>/resources/",
4651
views.CodebaseResourceListView.as_view(),

scanpipe/views.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343

4444
from scancodeio.auth import ConditionalLoginRequired
4545
from scancodeio.auth import conditional_login_required
46+
from scanpipe.api.serializers import DiscoveredDependencySerializer
4647
from scanpipe.api.serializers import DiscoveredPackageSerializer
4748
from scanpipe.filters import DependencyFilterSet
4849
from scanpipe.filters import ErrorFilterSet
@@ -702,6 +703,18 @@ def get_context_data(self, **kwargs):
702703
return context
703704

704705

706+
class DiscoveredDependencyDetailsView(
707+
ConditionalLoginRequired, ProjectRelatedViewMixin, generic.DetailView
708+
):
709+
model = DiscoveredDependency
710+
template_name = "scanpipe/dependency_detail.html"
711+
712+
def get_context_data(self, **kwargs):
713+
context = super().get_context_data(**kwargs)
714+
context["dependency_data"] = DiscoveredDependencySerializer(self.object).data
715+
return context
716+
717+
705718
@conditional_login_required
706719
def run_detail_view(request, uuid):
707720
template = "scanpipe/includes/run_modal_content.html"

0 commit comments

Comments
 (0)