4848from vulnerabilities .models import VulnerabilitySeverity
4949from vulnerabilities .models import Weakness
5050from vulnerabilities .pipes .group_advisories import group_advisory_for_package
51- from vulnerabilities .pipes .risk_score import compute_advisory_risk_score
51+ from vulnerabilities .pipes .risk_score import compute_advisory_risk_score , compute_package_risk_score_bulk
5252from vulnerabilities .pipes .risk_score import compute_package_risk_score
5353from vulnerabilities .pipes .univers_utils import get_exact_purls_v2
5454
@@ -300,6 +300,7 @@ def insert_advisory_v2(
300300):
301301 from vulnerabilities .models import ImpactedPackage
302302 from vulnerabilities .models import PackageV2
303+ from vulnerabilities .utils import TYPES_WITH_MULTIPLE_IMPORTERS
303304 from vulnerabilities .utils import compute_content_id_v2
304305
305306 advisory_obj = None
@@ -398,9 +399,19 @@ def insert_advisory_v2(
398399 purls = package_fixed_purls
399400 )
400401
401- add_packages_to_advisory (
402- logger , advisory_obj , impact , affected_packages_v2 , fixed_packages_v2
403- )
402+ if affected_pkg .package .type in TYPES_WITH_MULTIPLE_IMPORTERS :
403+ group_advisories_for_package_with_lock (
404+ advisory_obj , impact , affected_packages_v2 , fixed_packages_v2 , logger = logger
405+ )
406+ else :
407+ impact .affecting_packages .add (* affected_packages_v2 )
408+ impact .fixed_by_packages .add (* fixed_packages_v2 )
409+
410+ compute_package_risk_score_bulk (affected_packages_v2 )
411+ if affected_packages_v2 :
412+ affected_packages_v2 [0 ].calculate_version_rank
413+ elif fixed_packages_v2 :
414+ fixed_packages_v2 [0 ].calculate_version_rank
404415
405416 introduced_commit_v2 = get_or_create_advisory_package_commit_patches (
406417 affected_pkg .introduced_by_commit_patches
@@ -414,7 +425,9 @@ def insert_advisory_v2(
414425
415426
416427@transaction .atomic
417- def add_packages_to_advisory (logger , advisory_obj , impact , affected_packages_v2 , fixed_packages_v2 ):
428+ def group_advisories_for_package_with_lock (
429+ advisory_obj , impact , affected_packages_v2 , fixed_packages_v2 , logger = print
430+ ):
418431 from vulnerabilities .models import PackageV2
419432
420433 all_packages = sorted (
@@ -453,35 +466,6 @@ def add_packages_to_advisory(logger, advisory_obj, impact, affected_packages_v2,
453466 f"Failed to group advisories for package { pkg .purl } : { e !r} \n { traceback_format_exc ()} " ,
454467 level = logging .ERROR ,
455468 )
456- try :
457- risk_score = compute_package_risk_score (
458- pkg , current_advisory_risk_score = advisory_obj .risk_score
459- )
460- logger (f"Computed risk score { risk_score } for package { pkg .purl } " )
461- pkg .risk_score = risk_score
462- pkg .save ()
463- pkg .calculate_version_rank
464- except Exception as e :
465- logger (
466- f"Failed to compute risk score for package { pkg .purl } : { e !r} \n { traceback_format_exc ()} " ,
467- level = logging .ERROR ,
468- )
469-
470- for pkg in list (fixed_packages_v2 ):
471- logger (f"Grouping advisories for package: { pkg .purl } " )
472- try :
473- group_advisory_for_package (
474- pkg ,
475- logger = logger ,
476- current_advisory = advisory_obj ,
477- current_advisory_relation = "fixing" ,
478- )
479- except Exception as e :
480- logger (
481- f"Failed to group advisories for package { pkg .purl } : { e !r} \n { traceback_format_exc ()} " ,
482- level = logging .ERROR ,
483- )
484- pkg .calculate_version_rank
485469
486470
487471@transaction .atomic
0 commit comments