(packages, max_advisories, base_url)
| 889 | |
| 890 | |
| 891 | def get_fixing_advisories_bulk(packages, max_advisories, base_url): |
| 892 | package_ids = [] |
| 893 | package_ids_with_multiple_importers = [] |
| 894 | packages_without_multiple_importers = [] |
| 895 | |
| 896 | for p in packages: |
| 897 | package_ids.append(p.id) |
| 898 | |
| 899 | if p.type in TYPES_WITH_MULTIPLE_IMPORTERS: |
| 900 | package_ids_with_multiple_importers.append(p.id) |
| 901 | else: |
| 902 | packages_without_multiple_importers.append(p) |
| 903 | |
| 904 | advisory_sets = list( |
| 905 | AdvisorySet.objects.filter( |
| 906 | package_id__in=package_ids_with_multiple_importers, |
| 907 | relation_type="fixing", |
| 908 | ) |
| 909 | .select_related("primary_advisory") |
| 910 | .only( |
| 911 | "id", |
| 912 | "package_id", |
| 913 | "primary_advisory__advisory_id", |
| 914 | ) |
| 915 | ) |
| 916 | |
| 917 | package_map = defaultdict(list) |
| 918 | |
| 919 | for adv in advisory_sets: |
| 920 | package_map[adv.package_id].append(adv.primary_advisory) |
| 921 | |
| 922 | result = {} |
| 923 | |
| 924 | for package in packages: |
| 925 | groups = package_map.get(package.id, []) |
| 926 | grouped = [] |
| 927 | |
| 928 | for advisory in groups: |
| 929 | resource_url = None |
| 930 | advisory_url = advisory.get_absolute_url() |
| 931 | |
| 932 | if base_url and advisory_url: |
| 933 | resource_url = f"{base_url}{advisory_url}" |
| 934 | grouped.append( |
| 935 | { |
| 936 | "advisory_id": advisory.advisory_id.split("/")[-1], |
| 937 | "resource_url": resource_url, |
| 938 | "advisory_uid": advisory.avid, |
| 939 | } |
| 940 | ) |
| 941 | |
| 942 | result[package.id] = grouped |
| 943 | |
| 944 | packages = list(packages_without_multiple_importers) |
| 945 | |
| 946 | if not packages: |
| 947 | return result |
| 948 |
no test coverage detected