Skip to content

Commit 2ff2906

Browse files
authored
Merge pull request #2183 from aboutcode-org/export-v3
Export incremental updates on subsequent runs of FederatedCode pipeline
2 parents b5a4445 + 1b92de4 commit 2ff2906

File tree

12 files changed

+439
-166
lines changed

12 files changed

+439
-166
lines changed
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
# Generated by Django 5.2.11 on 2026-02-19 11:12
2+
3+
import django.db.models.deletion
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("vulnerabilities", "0114_advisoryv2_related_advisory_severities"),
11+
]
12+
13+
operations = [
14+
migrations.RemoveField(
15+
model_name="impactedpackage",
16+
name="affecting_packages",
17+
),
18+
migrations.RemoveField(
19+
model_name="impactedpackage",
20+
name="fixed_by_packages",
21+
),
22+
migrations.AlterField(
23+
model_name="advisoryv2",
24+
name="date_collected",
25+
field=models.DateTimeField(
26+
auto_now_add=True,
27+
db_index=True,
28+
help_text="UTC Date on which the advisory was collected",
29+
),
30+
),
31+
migrations.CreateModel(
32+
name="ImpactedPackageAffecting",
33+
fields=[
34+
(
35+
"id",
36+
models.AutoField(
37+
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
38+
),
39+
),
40+
("created_at", models.DateTimeField(auto_now_add=True, db_index=True)),
41+
(
42+
"impacted_package",
43+
models.ForeignKey(
44+
on_delete=django.db.models.deletion.CASCADE,
45+
to="vulnerabilities.impactedpackage",
46+
),
47+
),
48+
(
49+
"package",
50+
models.ForeignKey(
51+
on_delete=django.db.models.deletion.CASCADE, to="vulnerabilities.packagev2"
52+
),
53+
),
54+
],
55+
options={
56+
"unique_together": {("impacted_package", "package")},
57+
},
58+
),
59+
migrations.AddField(
60+
model_name="impactedpackage",
61+
name="affecting_packages",
62+
field=models.ManyToManyField(
63+
help_text="Packages vulnerable to this impact.",
64+
related_name="affected_in_impacts",
65+
through="vulnerabilities.ImpactedPackageAffecting",
66+
to="vulnerabilities.packagev2",
67+
),
68+
),
69+
migrations.CreateModel(
70+
name="ImpactedPackageFixedBy",
71+
fields=[
72+
(
73+
"id",
74+
models.AutoField(
75+
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
76+
),
77+
),
78+
("created_at", models.DateTimeField(auto_now_add=True, db_index=True)),
79+
(
80+
"impacted_package",
81+
models.ForeignKey(
82+
on_delete=django.db.models.deletion.CASCADE,
83+
to="vulnerabilities.impactedpackage",
84+
),
85+
),
86+
(
87+
"package",
88+
models.ForeignKey(
89+
on_delete=django.db.models.deletion.CASCADE, to="vulnerabilities.packagev2"
90+
),
91+
),
92+
],
93+
options={
94+
"unique_together": {("impacted_package", "package")},
95+
},
96+
),
97+
migrations.AddField(
98+
model_name="impactedpackage",
99+
name="fixed_by_packages",
100+
field=models.ManyToManyField(
101+
help_text="Packages fixing the vulnerable packages in this impact.",
102+
related_name="fixed_in_impacts",
103+
through="vulnerabilities.ImpactedPackageFixedBy",
104+
to="vulnerabilities.packagev2",
105+
),
106+
),
107+
]

vulnerabilities/models.py

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2961,9 +2961,15 @@ class AdvisoryV2(models.Model):
29612961
)
29622962

29632963
date_published = models.DateTimeField(
2964-
blank=True, null=True, help_text="UTC Date of publication of the advisory"
2964+
blank=True,
2965+
null=True,
2966+
help_text="UTC Date of publication of the advisory",
2967+
)
2968+
date_collected = models.DateTimeField(
2969+
auto_now_add=True,
2970+
db_index=True,
2971+
help_text="UTC Date on which the advisory was collected",
29652972
)
2966-
date_collected = models.DateTimeField(help_text="UTC Date on which the advisory was collected")
29672973

29682974
original_advisory_text = models.TextField(
29692975
blank=True,
@@ -3137,13 +3143,15 @@ class ImpactedPackage(models.Model):
31373143
affecting_packages = models.ManyToManyField(
31383144
"PackageV2",
31393145
related_name="affected_in_impacts",
3146+
through="ImpactedPackageAffecting",
31403147
help_text="Packages vulnerable to this impact.",
31413148
)
31423149

31433150
fixed_by_packages = models.ManyToManyField(
31443151
"PackageV2",
31453152
related_name="fixed_in_impacts",
3146-
help_text="Packages vulnerable to this impact.",
3153+
through="ImpactedPackageFixedBy",
3154+
help_text="Packages fixing the vulnerable packages in this impact.",
31473155
)
31483156

31493157
introduced_by_package_commit_patches = models.ManyToManyField(
@@ -3491,6 +3499,44 @@ def current_version(self):
34913499
return self.version_class(self.version)
34923500

34933501

3502+
class ImpactedPackageAffecting(models.Model):
3503+
impacted_package = models.ForeignKey(
3504+
ImpactedPackage,
3505+
on_delete=models.CASCADE,
3506+
)
3507+
package = models.ForeignKey(
3508+
PackageV2,
3509+
on_delete=models.CASCADE,
3510+
)
3511+
3512+
created_at = models.DateTimeField(
3513+
auto_now_add=True,
3514+
db_index=True,
3515+
)
3516+
3517+
class Meta:
3518+
unique_together = ("impacted_package", "package")
3519+
3520+
3521+
class ImpactedPackageFixedBy(models.Model):
3522+
impacted_package = models.ForeignKey(
3523+
ImpactedPackage,
3524+
on_delete=models.CASCADE,
3525+
)
3526+
package = models.ForeignKey(
3527+
PackageV2,
3528+
on_delete=models.CASCADE,
3529+
)
3530+
3531+
created_at = models.DateTimeField(
3532+
auto_now_add=True,
3533+
db_index=True,
3534+
)
3535+
3536+
class Meta:
3537+
unique_together = ("impacted_package", "package")
3538+
3539+
34943540
class AdvisoryExploit(models.Model):
34953541
"""
34963542
A vulnerability exploit is code used to

0 commit comments

Comments
 (0)