@@ -207,11 +207,13 @@ def get_affected_by_vulnerabilities(self, package):
207207 """Return a dictionary with advisory as keys and their details, including fixed_by_packages."""
208208 advisories_qs = AdvisoryV2 .objects .latest_affecting_advisories_for_purl (package .package_url )
209209
210- advisories = list (advisories_qs [:101 ])
211- if len (advisories ) > 100 :
210+ advisories_ids = advisories_qs .only ("id" )
211+
212+ advisories_ids = list (advisories_ids [:101 ])
213+ if len (advisories_ids ) > 100 :
212214 return None
213215
214- advisory_by_avid = {adv .avid : adv for adv in advisories }
216+ advisory_by_avid = {adv .avid : adv for adv in advisories_qs }
215217 avids = advisory_by_avid .keys ()
216218
217219 impacts = (
@@ -222,7 +224,7 @@ def get_affected_by_vulnerabilities(self, package):
222224
223225 impact_by_avid = {impact .advisory .avid : impact for impact in impacts }
224226
225- grouped = group_advisories_by_content (advisories )
227+ grouped = group_advisories_by_content (advisories_qs )
226228
227229 result = []
228230 for entry in grouped .values ():
@@ -244,30 +246,17 @@ def get_affected_by_vulnerabilities(self, package):
244246 def get_fixing_vulnerabilities (self , package ):
245247 advisories_qs = AdvisoryV2 .objects .latest_fixed_by_advisories_for_purl (package .package_url )
246248
247- advisories = list (advisories_qs [:101 ])
248- if len (advisories ) > 100 :
249- return None
250-
251- advisory_by_avid = {adv .avid : adv for adv in advisories }
252- avids = advisory_by_avid .keys ()
253-
254- impacts = (
255- package .fixed_in_impacts .filter (advisory__avid__in = avids )
256- .select_related ("advisory" )
257- .prefetch_related ("fixed_by_packages" )
258- )
249+ advisories_ids = advisories_qs .only ("id" )
259250
260- impact_by_avid = {impact .advisory .avid : impact for impact in impacts }
251+ advisories_ids = list (advisories_ids [:101 ])
252+ if len (advisories_ids ) > 100 :
253+ return None
261254
262- grouped = group_advisories_by_content (advisories )
255+ grouped = group_advisories_by_content (advisories_qs )
263256
264257 result = []
265258 for entry in grouped .values ():
266259 primary = entry ["primary" ]
267- impact = impact_by_avid .get (primary .avid )
268- if not impact :
269- continue
270-
271260 result .append (
272261 {
273262 "advisory_id" : primary .avid ,
@@ -301,14 +290,24 @@ def create(self, request, *args, **kwargs):
301290 approximate = serializer .validated_data ["approximate" ]
302291
303292 if not purls :
304- vulnerable_purls = (
305- PackageV2 .objects .vulnerable ()
306- .only ("package_url" )
307- .distinct ()
293+ pkg_ids = (
294+ PackageV2 .objects .vulnerable ().values_list ("id" , flat = True )
295+ # .distinct()
296+ )
297+
298+ # vulnerable_purls = (
299+ # PackageV2.objects.vulnerable()
300+ # .only("package_url")
301+ # .values_list("package_url", flat=True)
302+ # .distinct()
303+ # .order_by("package_url")
304+ # )
305+ query = (
306+ PackageV2 .objects .filter (id__in = pkg_ids )
308307 .values_list ("package_url" , flat = True )
309308 .order_by ("package_url" )
310309 )
311- page = self .paginate_queryset (vulnerable_purls )
310+ page = self .paginate_queryset (query )
312311 return self .get_paginated_response (page )
313312
314313 plain_purls = None
0 commit comments