Skip to content

Commit 296792a

Browse files
authored
Merge branch 'main' into add-cwe-support-in-multiple-importers
2 parents 4ea7f63 + 3cee771 commit 296792a

File tree

2 files changed

+116
-11
lines changed

2 files changed

+116
-11
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# Generated by Django 4.2.16 on 2024-12-18 10:09
2+
3+
import aboutcode.hashid
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("vulnerabilities", "0084_alter_package_options_package_version_rank"),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name="package",
16+
name="is_ghost",
17+
field=models.BooleanField(
18+
db_index=True,
19+
default=False,
20+
help_text="True if the package does not exist in the upstream package manager or its repository.",
21+
),
22+
),
23+
migrations.AlterField(
24+
model_name="package",
25+
name="version_rank",
26+
field=models.IntegerField(
27+
db_index=True,
28+
default=0,
29+
help_text="Rank of the version to support ordering by version. Rank zero means the rank has not been defined yet",
30+
),
31+
),
32+
migrations.AlterField(
33+
model_name="vulnerability",
34+
name="vulnerability_id",
35+
field=models.CharField(
36+
blank=True,
37+
db_index=True,
38+
default=aboutcode.hashid.build_vcid,
39+
help_text="Unique identifier for a vulnerability in the external representation. It is prefixed with VCID-",
40+
max_length=20,
41+
unique=True,
42+
),
43+
),
44+
migrations.AlterField(
45+
model_name="vulnerabilityreference",
46+
name="reference_id",
47+
field=models.CharField(
48+
blank=True,
49+
db_index=True,
50+
help_text="An optional reference ID, such as DSA-4465-1 when available",
51+
max_length=200,
52+
),
53+
),
54+
migrations.AlterField(
55+
model_name="vulnerabilityseverity",
56+
name="url",
57+
field=models.URLField(
58+
db_index=True,
59+
help_text="URL to the vulnerability severity",
60+
max_length=1024,
61+
null=True,
62+
),
63+
),
64+
migrations.AddIndex(
65+
model_name="package",
66+
index=models.Index(
67+
fields=["type", "namespace", "name"], name="vulnerabili_type_825918_idx"
68+
),
69+
),
70+
migrations.AddIndex(
71+
model_name="package",
72+
index=models.Index(
73+
fields=["type", "namespace", "name", "qualifiers", "subpath"],
74+
name="vulnerabili_type_8e6aff_idx",
75+
),
76+
),
77+
migrations.AddIndex(
78+
model_name="package",
79+
index=models.Index(
80+
fields=["type", "namespace", "name", "version"], name="vulnerabili_type_f6687a_idx"
81+
),
82+
),
83+
]

vulnerabilities/models.py

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ class VulnerabilitySeverity(models.Model):
161161
max_length=1024,
162162
null=True,
163163
help_text="URL to the vulnerability severity",
164+
db_index=True,
164165
)
165166

166167
scoring_system_choices = tuple(
@@ -212,6 +213,7 @@ class Vulnerability(models.Model):
212213
default=utils.build_vcid,
213214
help_text="Unique identifier for a vulnerability in the external representation. "
214215
"It is prefixed with VCID-",
216+
db_index=True,
215217
)
216218

217219
summary = models.TextField(
@@ -453,6 +455,7 @@ class VulnerabilityReference(models.Model):
453455
max_length=200,
454456
help_text="An optional reference ID, such as DSA-4465-1 when available",
455457
blank=True,
458+
db_index=True,
456459
)
457460

458461
objects = VulnerabilityReferenceQuerySet.as_manager()
@@ -509,6 +512,7 @@ def get_fixed_by_package_versions(self, purl: PackageURL, fix=True):
509512
if fix:
510513
filter_dict["fixing_vulnerabilities__isnull"] = False
511514

515+
# TODO: why do we need distinct
512516
return Package.objects.filter(**filter_dict).distinct()
513517

514518
def get_or_create_from_purl(self, purl: Union[PackageURL, str]):
@@ -695,6 +699,7 @@ class Package(PackageURLMixin):
695699
is_ghost = models.BooleanField(
696700
default=False,
697701
help_text="True if the package does not exist in the upstream package manager or its repository.",
702+
db_index=True,
698703
)
699704

700705
risk_score = models.DecimalField(
@@ -709,10 +714,36 @@ class Package(PackageURLMixin):
709714
help_text="Rank of the version to support ordering by version. Rank "
710715
"zero means the rank has not been defined yet",
711716
default=0,
717+
db_index=True,
712718
)
713719

714720
objects = PackageQuerySet.as_manager()
715721

722+
class Meta:
723+
unique_together = ["type", "namespace", "name", "version", "qualifiers", "subpath"]
724+
ordering = ["type", "namespace", "name", "version_rank", "version", "qualifiers", "subpath"]
725+
indexes = [
726+
# Index for getting al versions of a package
727+
models.Index(fields=["type", "namespace", "name"]),
728+
models.Index(fields=["type", "namespace", "name", "qualifiers", "subpath"]),
729+
# Index for getting a specific version of a package
730+
models.Index(
731+
fields=[
732+
"type",
733+
"namespace",
734+
"name",
735+
"version",
736+
]
737+
),
738+
]
739+
740+
def __str__(self):
741+
return self.package_url
742+
743+
@property
744+
def purl(self):
745+
return self.package_url
746+
716747
def save(self, *args, **kwargs):
717748
"""
718749
Save, normalizing PURL fields.
@@ -738,17 +769,6 @@ def save(self, *args, **kwargs):
738769
self.plain_package_url = str(plain_purl)
739770
super().save(*args, **kwargs)
740771

741-
@property
742-
def purl(self):
743-
return self.package_url
744-
745-
class Meta:
746-
unique_together = ["type", "namespace", "name", "version", "qualifiers", "subpath"]
747-
ordering = ["type", "namespace", "name", "version_rank", "version", "qualifiers", "subpath"]
748-
749-
def __str__(self):
750-
return self.package_url
751-
752772
@property
753773
def calculate_version_rank(self):
754774
"""
@@ -981,12 +1001,14 @@ class PackageRelatedVulnerabilityBase(models.Model):
9811001
package = models.ForeignKey(
9821002
Package,
9831003
on_delete=models.CASCADE,
1004+
db_index=True,
9841005
# related_name="%(class)s_set", # Unique related_name per subclass
9851006
)
9861007

9871008
vulnerability = models.ForeignKey(
9881009
Vulnerability,
9891010
on_delete=models.CASCADE,
1011+
db_index=True,
9901012
# related_name="%(class)s_set", # Unique related_name per subclass
9911013
)
9921014

0 commit comments

Comments
 (0)