MCPcopy Create free account
hub / github.com/aboutcode-org/vulnerablecode / insert_advisory_v2

Function insert_advisory_v2

vulnerabilities/pipes/advisory.py:292–419  ·  view source on GitHub ↗
(
    advisory: AdvisoryDataV2,
    pipeline_id: str,
    logger: Callable,
    datasource_id: str,
    precedence: int = 0,
)

Source from the content-addressed store, hash-verified

290
291@transaction.atomic
292def insert_advisory_v2(
293 advisory: AdvisoryDataV2,
294 pipeline_id: str,
295 logger: Callable,
296 datasource_id: str,
297 precedence: int = 0,
298):
299 from vulnerabilities.models import ImpactedPackage
300 from vulnerabilities.models import PackageV2
301 from vulnerabilities.utils import compute_content_id_v2
302
303 advisory_obj = None
304 created = False
305 content_id = compute_content_id_v2(advisory_data=advisory)
306 try:
307 default_data = {
308 "datasource_id": datasource_id,
309 "pipeline_id": pipeline_id,
310 "advisory_id": advisory.advisory_id,
311 "avid": f"{datasource_id}/{advisory.advisory_id}",
312 "summary": advisory.summary,
313 "date_published": advisory.date_published,
314 "original_advisory_text": advisory.original_advisory_text,
315 "url": advisory.url,
316 "precedence": precedence,
317 }
318
319 advisory_obj, created = AdvisoryV2.objects.get_or_create(
320 advisory_id=advisory.advisory_id,
321 datasource_id=datasource_id,
322 pipeline_id=pipeline_id,
323 unique_content_id=content_id,
324 defaults=default_data,
325 )
326 except AdvisoryV2.MultipleObjectsReturned:
327 logger(
328 f"Multiple Advisories returned: unique_content_id: {content_id}, url: {advisory.url}, advisory: {advisory!r}"
329 )
330 raise
331 except Exception as e:
332 logger(
333 f"Error while processing {advisory!r} with aliases {advisory.aliases!r}: {e!r} \n {traceback_format_exc()}",
334 level=logging.ERROR,
335 )
336 raise
337
338 if not created:
339 return advisory_obj
340
341 AdvisoryV2.objects.filter(
342 avid=f"{datasource_id}/{advisory.advisory_id}",
343 is_latest=True,
344 ).update(is_latest=False)
345 advisory_obj.is_latest = True
346 advisory_obj.save()
347
348 aliases = get_or_create_advisory_aliases(aliases=advisory.aliases)
349 references = get_or_create_advisory_references(references=advisory.references)

Callers 15

_createFunction · 0.90
setUpMethod · 0.90
setUpMethod · 0.90
setUpMethod · 0.90
setUpMethod · 0.90
setUpMethod · 0.90

Tested by 15

_createFunction · 0.72
setUpMethod · 0.72
setUpMethod · 0.72
setUpMethod · 0.72
setUpMethod · 0.72
setUpMethod · 0.72