77# See https://aboutcode.org for more information about nexB OSS projects.
88#
99
10+ from typing import List
1011from urllib .parse import urlencode
1112
1213from django .db .models import Exists
2526from vulnerabilities .models import AdvisorySeverity
2627from vulnerabilities .models import AdvisoryV2
2728from vulnerabilities .models import AdvisoryWeakness
29+ from vulnerabilities .models import Group
30+ from vulnerabilities .models import GroupedAdvisory
2831from vulnerabilities .models import ImpactedPackageAffecting
2932from vulnerabilities .models import PackageV2
3033from vulnerabilities .throttling import PermissionBasedUserRateThrottle
@@ -273,15 +276,15 @@ def get_affected_by_vulnerabilities(self, package):
273276 )
274277
275278 affected_groups = [
276- (
277- list (adv .aliases .all ()),
278- adv .primary_advisory ,
279- [member .advisory for member in adv .secondary_members ],
279+ Group (
280+ aliases = list (adv .aliases .all ()),
281+ primary_advisory = adv .primary_advisory ,
282+ secondaries = [member .advisory for member in adv .secondary_members ],
280283 )
281284 for adv in affected_by_advisories_qs
282285 ]
283286
284- advisories = get_advisories_from_groups (affected_groups )
287+ advisories : List [ GroupedAdvisory ] = get_advisories_from_groups (affected_groups )
285288 return self .return_advisories_data (package , advisories_qs , advisories )
286289
287290 if package .type in TYPES_WITH_MULTIPLE_IMPORTERS :
@@ -290,7 +293,9 @@ def get_affected_by_vulnerabilities(self, package):
290293 "impacted_packages__affecting_packages" ,
291294 "impacted_packages__fixed_by_packages" ,
292295 )
293- advisories = merge_and_save_grouped_advisories (package , advisories_qs , "affecting" )
296+ advisories : List [GroupedAdvisory ] = merge_and_save_grouped_advisories (
297+ package , advisories_qs , "affecting"
298+ )
294299 return self .return_advisories_data (package , advisories_qs , advisories )
295300
296301 def get_fixing_vulnerabilities (self , package ):
@@ -333,15 +338,15 @@ def get_fixing_vulnerabilities(self, package):
333338 )
334339
335340 fixing_groups = [
336- (
337- list (adv .aliases .all ()),
338- adv .primary_advisory ,
339- [member .advisory for member in adv .secondary_members ],
341+ Group (
342+ aliases = list (adv .aliases .all ()),
343+ primary_advisory = adv .primary_advisory ,
344+ secondaries = [member .advisory for member in adv .secondary_members ],
340345 )
341346 for adv in fixing_advisories_qs
342347 ]
343348
344- advisories = get_advisories_from_groups (fixing_groups )
349+ advisories : List [ GroupedAdvisory ] = get_advisories_from_groups (fixing_groups )
345350 return self .return_fixing_advisories_data (advisories )
346351
347352 if package .type in TYPES_WITH_MULTIPLE_IMPORTERS :
@@ -350,15 +355,18 @@ def get_fixing_vulnerabilities(self, package):
350355 "impacted_packages__affecting_packages" ,
351356 "impacted_packages__fixed_by_packages" ,
352357 )
353- advisories = merge_and_save_grouped_advisories (package , advisories_qs , "fixing" )
358+ advisories : List [GroupedAdvisory ] = merge_and_save_grouped_advisories (
359+ package , advisories_qs , "fixing"
360+ )
354361 return self .return_fixing_advisories_data (advisories )
355362
356363 def return_fixing_advisories_data (self , advisories ):
357364 result = []
358365 for advisory in advisories :
366+ assert isinstance (advisory , GroupedAdvisory )
359367 result .append (
360368 {
361- "advisory_id" : advisory [ " identifier" ] ,
369+ "advisory_id" : advisory . identifier ,
362370 }
363371 )
364372
@@ -378,18 +386,19 @@ def return_advisories_data(self, package, advisories_qs, advisories):
378386
379387 result = []
380388 for advisory in advisories :
381- impact = impact_by_avid .get (advisory ["advisory" ].avid )
389+ assert isinstance (advisory , GroupedAdvisory )
390+ impact = impact_by_avid .get (advisory .advisory .avid )
382391 if not impact :
383392 continue
384393
385394 result .append (
386395 {
387- "advisory_id" : advisory [ " identifier" ] ,
388- "aliases" : [alias .alias for alias in advisory [ " aliases" ] ],
389- "weighted_severity" : advisory [ " weighted_severity" ] ,
390- "exploitability" : advisory [ " exploitability" ] ,
391- "risk_score" : advisory [ " risk_score" ] ,
392- "summary" : advisory [ " advisory" ] .summary ,
396+ "advisory_id" : advisory . identifier ,
397+ "aliases" : [alias .alias for alias in advisory . aliases ],
398+ "weighted_severity" : advisory . weighted_severity ,
399+ "exploitability" : advisory . exploitability ,
400+ "risk_score" : advisory . risk_score ,
401+ "summary" : advisory . advisory .summary ,
393402 "fixed_by_packages" : list (
394403 set ([pkg .purl for pkg in impact .fixed_by_packages .all ()])
395404 ),
0 commit comments