Skip to content

Commit ea463ce

Browse files
committed
feat: backfill latest advisory for existing v2 advisories
Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent 7798b96 commit ea463ce

1 file changed

Lines changed: 65 additions & 0 deletions

File tree

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# Generated by Django 5.2.11 on 2026-04-13 19:05
2+
3+
from django.db import migrations
4+
from django.db import models
5+
from django.db.models import F
6+
7+
8+
class Migration(migrations.Migration):
9+
def add_is_latest_on_existing_advisory(apps, schema_editor):
10+
Advisory = apps.get_model("vulnerabilities", "AdvisoryV2")
11+
12+
print(f"\nUpdating is_latest on existing V2 Advisory.")
13+
latest_qs = Advisory.objects.order_by(
14+
"avid",
15+
F("date_collected").desc(nulls_last=True),
16+
"-id",
17+
).distinct("avid")
18+
19+
Advisory.objects.filter(id__in=latest_qs.values("id")).update(is_latest=True)
20+
21+
dependencies = [
22+
("vulnerabilities", "0120_impactedpackage_last_range_unfurl_at_and_more"),
23+
]
24+
25+
operations = [
26+
migrations.AddField(
27+
model_name="advisoryv2",
28+
name="is_latest",
29+
field=models.BooleanField(
30+
db_index=True,
31+
default=False,
32+
help_text="Indicates whether this is the latest version of the advisory identified by its AVID.",
33+
),
34+
),
35+
migrations.AlterField(
36+
model_name="advisoryv2",
37+
name="advisory_id",
38+
field=models.CharField(
39+
db_index=True,
40+
help_text="An advisory is a unique vulnerability identifier in some database, such as PYSEC-2020-2233",
41+
max_length=500,
42+
),
43+
),
44+
migrations.AlterField(
45+
model_name="advisoryv2",
46+
name="datasource_id",
47+
field=models.CharField(
48+
db_index=True,
49+
help_text="Unique ID for the datasource used for this advisory .e.g.: nginx_importer_v2",
50+
max_length=200,
51+
),
52+
),
53+
migrations.AddConstraint(
54+
model_name="advisoryv2",
55+
constraint=models.UniqueConstraint(
56+
condition=models.Q(("is_latest", True)),
57+
fields=("avid",),
58+
name="unique_latest_per_avid",
59+
),
60+
),
61+
migrations.RunPython(
62+
code=add_is_latest_on_existing_advisory,
63+
reverse_code=migrations.RunPython.noop,
64+
),
65+
]

0 commit comments

Comments
 (0)