2323from urllib .parse import urlencode
2424
2525from django .core .paginator import Paginator
26+ from django .db .models import Count
2627from django .http import HttpResponse
2728from django .shortcuts import render , redirect
2829from django .urls import reverse
@@ -81,8 +82,8 @@ class VulnerabilitySearchView(View):
8182 def get (self , request ):
8283 context = {"form" : forms .CVEForm (request .GET or None )}
8384 if request .GET :
84- vulnerabilities = self .request_to_queryset (request )
85- result_size = vulnerabilities . count ( )
85+ vulnerabilities = self .request_to_vulnerabilities (request )
86+ result_size = len ( vulnerabilities )
8687 pages = Paginator (vulnerabilities , 50 )
8788 vulnerabilities = pages .get_page (int (self .request .GET .get ("page" , 1 )))
8889 context ["vulnerabilities" ] = vulnerabilities
@@ -91,9 +92,14 @@ def get(self, request):
9192 return render (request , self .template_name , context )
9293
9394 @staticmethod
94- def request_to_queryset (request ):
95+ def request_to_vulnerabilities (request ):
9596 vuln_id = request .GET ["vuln_id" ]
96- return models .Vulnerability .objects .filter (vulnerability_id__icontains = vuln_id )
97+ return list (
98+ models .Vulnerability .objects .filter (vulnerability_id__icontains = vuln_id ).annotate (
99+ vulnerable_package_count = Count ("vulnerable_packages" ),
100+ patched_package_count = Count ("patched_packages" ),
101+ )
102+ )
97103
98104
99105class PackageUpdate (UpdateView ):
@@ -214,9 +220,10 @@ def relationship_already_exists(relationship):
214220 @staticmethod
215221 def create_relationship_instance (vulnerability_id , package_id , is_vulnerable ):
216222 package = models .Package .objects .get (id = package_id )
223+ # FIXME: Handle the case when vuln_created=True
217224 vulnerability , vuln_created = models .Vulnerability .objects .get_or_create (
218225 vulnerability_id = vulnerability_id
219- ) # nopep8
226+ )
220227 return models .PackageRelatedVulnerability (
221228 vulnerability = vulnerability , package = package , is_vulnerable = is_vulnerable
222229 )
0 commit comments