(packages, max_advisories, base_url, reachability=False)
| 564 | |
| 565 | |
| 566 | def get_affected_advisories_bulk(packages, max_advisories, base_url, reachability=False): |
| 567 | package_ids = [] |
| 568 | package_ids_with_multiple_importers = [] |
| 569 | packages_without_multiple_importers = [] |
| 570 | |
| 571 | for p in packages: |
| 572 | package_ids.append(p.id) |
| 573 | |
| 574 | if p.type in TYPES_WITH_MULTIPLE_IMPORTERS: |
| 575 | package_ids_with_multiple_importers.append(p.id) |
| 576 | else: |
| 577 | packages_without_multiple_importers.append(p) |
| 578 | |
| 579 | result = {} |
| 580 | |
| 581 | impacts = ( |
| 582 | ImpactedPackageAffecting.objects.filter( |
| 583 | package_id__in=package_ids, |
| 584 | impacted_package__advisory__is_latest=True, |
| 585 | impacted_package__advisory___all_impacts_unfurled_at__isnull=False, |
| 586 | ) |
| 587 | .values( |
| 588 | "package_id", |
| 589 | "impacted_package__advisory_id", |
| 590 | ) |
| 591 | .annotate( |
| 592 | fixed_by_packages=ArrayAgg( |
| 593 | "impacted_package__fixed_by_packages__package_url", |
| 594 | distinct=True, |
| 595 | filter=Q(impacted_package__fixed_by_packages__package_url__isnull=False), |
| 596 | ) |
| 597 | ) |
| 598 | ) |
| 599 | |
| 600 | impact_by_package_and_advisory = { |
| 601 | ( |
| 602 | row["package_id"], |
| 603 | row["impacted_package__advisory_id"], |
| 604 | ): row["fixed_by_packages"] |
| 605 | or [] |
| 606 | for row in impacts |
| 607 | } |
| 608 | |
| 609 | # Package types with multiple importers |
| 610 | |
| 611 | advisory_sets = list( |
| 612 | AdvisorySet.objects.filter( |
| 613 | package_id__in=package_ids_with_multiple_importers, |
| 614 | relation_type="affecting", |
| 615 | ) |
| 616 | .select_related("primary_advisory") |
| 617 | .prefetch_related( |
| 618 | Prefetch( |
| 619 | "aliases", |
| 620 | queryset=AdvisoryAlias.objects.only("alias"), |
| 621 | ), |
| 622 | ) |
| 623 | .annotate( |
no test coverage detected