@@ -291,21 +291,16 @@ def insert_advisory(advisory: AdvisoryData, pipeline_id: str, logger: Callable =
291291def insert_advisory_v2 (
292292 advisory : AdvisoryDataV2 ,
293293 pipeline_id : str ,
294- logger : Callable = None ,
294+ logger : Callable ,
295295 precedence : int = 0 ,
296296):
297297 from vulnerabilities .models import ImpactedPackage
298298 from vulnerabilities .models import PackageV2
299299 from vulnerabilities .utils import compute_content_id_v2
300300
301301 advisory_obj = None
302- aliases = get_or_create_advisory_aliases (aliases = advisory .aliases )
303- references = get_or_create_advisory_references (references = advisory .references )
304- severities = get_or_create_advisory_severities (severities = advisory .severities )
305- patches = get_or_create_advisory_patches (patches = advisory .patches )
306- weaknesses = get_or_create_advisory_weaknesses (weaknesses = advisory .weaknesses )
307- content_id = compute_content_id_v2 (advisory_data = advisory )
308302 created = False
303+ content_id = compute_content_id_v2 (advisory_data = advisory )
309304 try :
310305 default_data = {
311306 "datasource_id" : pipeline_id ,
@@ -324,65 +319,73 @@ def insert_advisory_v2(
324319 unique_content_id = content_id ,
325320 defaults = default_data ,
326321 )
327- related_fields = {
328- "aliases" : aliases ,
329- "references" : references ,
330- "severities" : severities ,
331- "weaknesses" : weaknesses ,
332- "patches" : patches ,
333- }
334-
335- for field_name , values in related_fields .items ():
336- if values :
337- getattr (advisory_obj , field_name ).add (* values )
338-
339- except Advisory .MultipleObjectsReturned :
322+ except AdvisoryV2 .MultipleObjectsReturned :
340323 logger (
341324 f"Multiple Advisories returned: unique_content_id: { content_id } , url: { advisory .url } , advisory: { advisory !r} "
342325 )
343326 raise
344327 except Exception as e :
345- if logger :
346- logger (
347- f"Error while processing { advisory !r } with aliases { advisory . aliases !r } : { e !r } \n { traceback_format_exc () } " ,
348- level = logging . ERROR ,
349- )
328+ logger (
329+ f"Error while processing { advisory !r } with aliases { advisory . aliases !r } : { e !r } \n { traceback_format_exc () } " ,
330+ level = logging . ERROR ,
331+ )
332+ raise
350333
351- if created :
352- for affected_pkg in advisory .affected_packages :
353- impact = ImpactedPackage .objects .create (
354- advisory = advisory_obj ,
355- base_purl = str (affected_pkg .package ),
356- affecting_vers = str (affected_pkg .affected_version_range )
357- if affected_pkg .affected_version_range
358- else None ,
359- fixed_vers = str (affected_pkg .fixed_version_range )
360- if affected_pkg .fixed_version_range
361- else None ,
362- )
363- package_affected_purls , package_fixed_purls = get_exact_purls_v2 (
364- affected_package = affected_pkg ,
365- logger = logger ,
366- )
334+ if not created :
335+ return advisory_obj
367336
368- affected_packages_v2 = PackageV2 .objects .bulk_get_or_create_from_purls (
369- purls = package_affected_purls
370- )
371- fixed_packages_v2 = PackageV2 .objects .bulk_get_or_create_from_purls (
372- purls = package_fixed_purls
373- )
337+ aliases = get_or_create_advisory_aliases (aliases = advisory .aliases )
338+ references = get_or_create_advisory_references (references = advisory .references )
339+ severities = get_or_create_advisory_severities (severities = advisory .severities )
340+ patches = get_or_create_advisory_patches (patches = advisory .patches )
341+ weaknesses = get_or_create_advisory_weaknesses (weaknesses = advisory .weaknesses )
374342
375- impact .affecting_packages .add (* affected_packages_v2 )
376- impact .fixed_by_packages .add (* fixed_packages_v2 )
343+ related_fields = {
344+ "aliases" : aliases ,
345+ "references" : references ,
346+ "severities" : severities ,
347+ "weaknesses" : weaknesses ,
348+ "patches" : patches ,
349+ }
350+
351+ for field_name , values in related_fields .items ():
352+ if values :
353+ getattr (advisory_obj , field_name ).add (* values )
354+
355+ for affected_pkg in advisory .affected_packages :
356+ impact = ImpactedPackage .objects .create (
357+ advisory = advisory_obj ,
358+ base_purl = str (affected_pkg .package ),
359+ affecting_vers = str (affected_pkg .affected_version_range )
360+ if affected_pkg .affected_version_range
361+ else None ,
362+ fixed_vers = str (affected_pkg .fixed_version_range )
363+ if affected_pkg .fixed_version_range
364+ else None ,
365+ )
366+ package_affected_purls , package_fixed_purls = get_exact_purls_v2 (
367+ affected_package = affected_pkg ,
368+ logger = logger ,
369+ )
377370
378- introduced_commit_v2 = get_or_create_advisory_package_commit_patches (
379- affected_pkg .introduced_by_commit_patches
380- )
381- fixed_commit_v2 = get_or_create_advisory_package_commit_patches (
382- affected_pkg .fixed_by_commit_patches
383- )
384- impact .introduced_by_package_commit_patches .add (* introduced_commit_v2 )
385- impact .fixed_by_package_commit_patches .add (* fixed_commit_v2 )
371+ affected_packages_v2 = PackageV2 .objects .bulk_get_or_create_from_purls (
372+ purls = package_affected_purls
373+ )
374+ fixed_packages_v2 = PackageV2 .objects .bulk_get_or_create_from_purls (
375+ purls = package_fixed_purls
376+ )
377+
378+ impact .affecting_packages .add (* affected_packages_v2 )
379+ impact .fixed_by_packages .add (* fixed_packages_v2 )
380+
381+ introduced_commit_v2 = get_or_create_advisory_package_commit_patches (
382+ affected_pkg .introduced_by_commit_patches
383+ )
384+ fixed_commit_v2 = get_or_create_advisory_package_commit_patches (
385+ affected_pkg .fixed_by_commit_patches
386+ )
387+ impact .introduced_by_package_commit_patches .add (* introduced_commit_v2 )
388+ impact .fixed_by_package_commit_patches .add (* fixed_commit_v2 )
386389 return advisory_obj
387390
388391
0 commit comments