Skip to content

Commit 8d177c8

Browse files
committed
Minor Changes to Get Workflow tests corrected
Signed-off-by: Rishi Garg <rishigarg2503@gmail.com>
1 parent c465bbd commit 8d177c8

2 files changed

Lines changed: 59 additions & 63 deletions

File tree

vulnerabilities/forms.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,24 +46,53 @@ class BaseSearchForm(forms.Form):
4646
def clean_search(self):
4747
return self.cleaned_data.get("search", "")
4848

49+
def get_queryset(self, query=None):
50+
"""
51+
Get queryset with search/filter/ordering applied.
52+
Args:
53+
query (str, optional): Direct query for testing
54+
"""
55+
if query is not None:
56+
return self._search(query)
57+
58+
if not self.is_valid():
59+
return self.model.objects.none()
60+
61+
return self._search(self.clean_search())
62+
4963

5064
class PackageSearchForm(BaseSearchForm):
65+
model = Package
5166
search = forms.CharField(
5267
required=True,
5368
widget=forms.TextInput(
5469
attrs={"placeholder": "Package name, purl or purl fragment"},
5570
),
5671
)
5772

73+
def _search(self, query):
74+
"""Execute package-specific search logic."""
75+
return (
76+
self.model.objects.search(query)
77+
.with_vulnerability_counts()
78+
.prefetch_related()
79+
.order_by("package_url")
80+
)
81+
5882

5983
class VulnerabilitySearchForm(BaseSearchForm):
84+
model = Vulnerability
6085
search = forms.CharField(
6186
required=True,
6287
widget=forms.TextInput(
6388
attrs={"placeholder": "Vulnerability id or alias such as CVE or GHSA"}
6489
),
6590
)
6691

92+
def _search(self, query):
93+
"""Execute vulnerability-specific search logic."""
94+
return self.model.objects.search(query=query).with_package_counts()
95+
6796

6897
class ApiUserCreationForm(forms.ModelForm):
6998
"""
@@ -110,4 +139,4 @@ def clean_username(self):
110139
return username
111140

112141
def save_m2m(self):
113-
pass
142+
pass

vulnerabilities/views.py

Lines changed: 29 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515
from django.contrib import messages
1616
from django.core.exceptions import ValidationError
1717
from django.core.mail import send_mail
18-
from django.core.paginator import EmptyPage
19-
from django.core.paginator import PageNotAnInteger
20-
from django.core.paginator import Paginator
2118
from django.http.response import Http404
2219
from django.shortcuts import redirect
2320
from django.shortcuts import render
@@ -34,7 +31,6 @@
3431
from vulnerabilities.forms import PackageSearchForm
3532
from vulnerabilities.forms import PaginationForm
3633
from vulnerabilities.forms import VulnerabilitySearchForm
37-
from vulnerabilities.models import VulnerabilityStatusType
3834
from vulnerabilities.severity_systems import EPSS
3935
from vulnerabilities.severity_systems import SCORING_SYSTEMS
4036
from vulnerabilities.utils import get_severity_range
@@ -67,17 +63,17 @@ def get_purl_version_class(purl: models.Package):
6763
return purl_version_class
6864

6965

66+
7067
class BaseSearchView(ListView):
7168
"""Base view for implementing search functionality with pagination."""
7269

7370
paginate_by = PAGE_SIZE
7471
max_page_size = MAX_PAGE_SIZE
7572

76-
def get_paginate_by(self):
73+
def get_paginate_by(self, queryset=None):
7774
"""
78-
This function would get and validate the page size from request parameters.
79-
It returns a page size between 1 and max_page_size, defaulting to
80-
self.paginate_by for invalid inputs.
75+
Get and validate the requested page size.
76+
Required 2 positional_argument get_paginate_by(positional_argument1, positional_argument2)
8177
"""
8278
try:
8379
page_size = int(self.request.GET.get("page_size", self.paginate_by))
@@ -88,6 +84,7 @@ def get_paginate_by(self):
8884
return self.paginate_by
8985

9086
def get_context_data(self, **kwargs):
87+
"""Add pagination form to the template context."""
9188
context = super().get_context_data(**kwargs)
9289
context.update(
9390
{
@@ -104,47 +101,26 @@ class PackageSearch(BaseSearchView):
104101
ordering = ["type", "namespace", "name", "version"]
105102

106103
def get_queryset(self, query=None):
107-
"""
108-
Return a Package queryset based on search parameters.
109-
110-
Args:
111-
query (str, optional): Direct search query, mainly used for testing.
112-
If not provided, uses form data from request.
113-
Returns:
114-
QuerySet: Filtered and ordered package queryset
115-
"""
104+
"""Get queryset from form's search method."""
116105
if query is not None:
117-
# Handle direct query (used in tests)
118-
return (
119-
self.model.objects.search(query)
120-
.with_vulnerability_counts()
121-
.prefetch_related()
122-
.order_by("package_url")
123-
)
106+
form = self.form_class()
107+
return form.get_queryset(query=query)
124108

125-
# Handle form submission
126-
self.form = self.form_class(self.request.GET)
127-
if not self.form.is_valid():
128-
return self.model.objects.none()
129-
130-
search_query = self.form.cleaned_data.get("search", "")
131-
return (
132-
self.model.objects.search(search_query)
133-
.with_vulnerability_counts()
134-
.prefetch_related()
135-
.order_by("package_url")
136-
)
109+
if hasattr(self, "request"):
110+
self.form = self.form_class(self.request.GET)
111+
return self.form.get_queryset()
112+
113+
return self.model.objects.none()
137114

138115
def get_context_data(self, **kwargs):
139-
"""
140-
Get the context data for template rendering.
141-
Adds form and search parameters to context.
142-
"""
116+
"""Extends the template context with search form and search query for Packages."""
143117
context = super().get_context_data(**kwargs)
118+
if not hasattr(self, "form"):
119+
self.form = self.form_class()
144120
context.update(
145121
{
146122
"package_search_form": self.form,
147-
"search": self.request.GET.get("search"),
123+
"search": getattr(self.request, "GET", {}).get("search"),
148124
}
149125
)
150126
return context
@@ -157,35 +133,26 @@ class VulnerabilitySearch(BaseSearchView):
157133
ordering = ["vulnerability_id"]
158134

159135
def get_queryset(self, query=None):
160-
"""
161-
Return a Vulnerability queryset based on search parameters.
162-
163-
Args:
164-
query (str, optional): Direct search query, mainly used for testing.
165-
If not provided, uses form data from request.
166-
Returns:
167-
QuerySet: Filtered vulnerability queryset
168-
"""
136+
"""Get queryset from form's search method."""
169137
if query is not None:
170-
return self.model.objects.search(query=query).with_package_counts()
138+
form = self.form_class()
139+
return form.get_queryset(query=query)
171140

172-
self.form = self.form_class(self.request.GET)
173-
if not self.form.is_valid():
174-
return self.model.objects.none()
141+
if hasattr(self, "request"):
142+
self.form = self.form_class(self.request.GET)
143+
return self.form.get_queryset()
175144

176-
search_query = self.form.cleaned_data.get("search", "")
177-
return self.model.objects.search(query=search_query).with_package_counts()
145+
return self.model.objects.none()
178146

179147
def get_context_data(self, **kwargs):
180-
"""
181-
Get the context data for template rendering.
182-
Adds form and search parameters to context.
183-
"""
148+
"""Extends the template context with search form and search query for Vulnerability."""
184149
context = super().get_context_data(**kwargs)
150+
if not hasattr(self, "form"):
151+
self.form = self.form_class()
185152
context.update(
186153
{
187154
"vulnerability_search_form": self.form,
188-
"search": self.request.GET.get("search"),
155+
"search": getattr(self.request, "GET", {}).get("search"),
189156
}
190157
)
191158
return context
@@ -383,4 +350,4 @@ def form_valid(self, form):
383350
return response
384351

385352
def get_success_url(self):
386-
return reverse_lazy("api_user_request")
353+
return reverse_lazy("api_user_request")

0 commit comments

Comments
 (0)