Skip to content

Commit b5b1ab4

Browse files
committed
Work around PostgreSQL index issue Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent 33e083c commit b5b1ab4

8 files changed

Lines changed: 578 additions & 3 deletions
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 4.0.2 on 2022-03-25 08:43
2+
3+
from django.db import migrations
4+
from django.db import models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("vulnerabilities", "0003_alter_advisory_created_by"),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name="advisory",
16+
name="summary_md5",
17+
field=models.CharField(blank=True, max_length=32, null=True),
18+
),
19+
]
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 4.0.2 on 2022-03-25 08:44
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("vulnerabilities", "0004_advisory_summary_md5"),
10+
]
11+
12+
operations = [
13+
migrations.AlterUniqueTogether(
14+
name="advisory",
15+
unique_together={
16+
("aliases", "summary_md5", "affected_packages", "references", "date_published")
17+
},
18+
),
19+
]
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 4.0.2 on 2022-03-25 12:58
2+
3+
from django.db import migrations
4+
from django.db import models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("vulnerabilities", "0005_alter_advisory_unique_together"),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name="advisory",
16+
name="affected_packages_md5",
17+
field=models.CharField(blank=True, max_length=32),
18+
),
19+
]
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 4.0.2 on 2022-03-25 12:58
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("vulnerabilities", "0006_advisory_affected_packages_md5"),
10+
]
11+
12+
operations = [
13+
migrations.AlterUniqueTogether(
14+
name="advisory",
15+
unique_together={
16+
("aliases", "summary_md5", "affected_packages_md5", "references", "date_published")
17+
},
18+
),
19+
]
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 4.0.2 on 2022-03-25 12:59
2+
3+
from django.db import migrations
4+
from django.db import models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("vulnerabilities", "0007_alter_advisory_unique_together"),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name="advisory",
16+
name="references_md5",
17+
field=models.CharField(blank=True, max_length=32),
18+
),
19+
]
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Generated by Django 4.0.2 on 2022-03-25 12:59
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("vulnerabilities", "0008_advisory_references_md5"),
10+
]
11+
12+
operations = [
13+
migrations.AlterUniqueTogether(
14+
name="advisory",
15+
unique_together={
16+
(
17+
"aliases",
18+
"summary_md5",
19+
"affected_packages_md5",
20+
"references_md5",
21+
"date_published",
22+
)
23+
},
24+
),
25+
]

vulnerabilities/models.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
# Visit https://github.com/nexB/vulnerablecode/ for support and download.
2222

2323
import dataclasses
24+
import hashlib
2425
import importlib
2526
import json
2627
import logging
@@ -326,17 +327,39 @@ class Advisory(models.Model):
326327
into structured data
327328
"""
328329

330+
def save(self, *args, **kwargs):
331+
if self.summary:
332+
self.summary_md5 = hashlib.md5(self.summary.encode("utf-8")).hexdigest()
333+
if self.affected_packages:
334+
self.affected_packages_md5 = hashlib.md5(
335+
json.dumps(self.affected_packages).encode("utf-8")
336+
).hexdigest()
337+
if self.references:
338+
self.references_md5 = hashlib.md5(
339+
json.dumps(self.references).encode("utf-8")
340+
).hexdigest()
341+
super(Advisory, self).save(*args, **kwargs)
342+
329343
aliases = models.JSONField(blank=True, default=list, help_text="A list of alias strings")
330344
summary = models.TextField(blank=True, null=True)
345+
summary_md5 = models.CharField(blank=True, null=True, max_length=32)
331346
# we use a JSON field here to avoid creating a complete relational model for data that
332347
# is never queried directly; instead it is only retrieved and processed as a whole by
333348
# an improver
334349
affected_packages = models.JSONField(
335350
blank=True, default=list, help_text="A list of serializable AffectedPackage objects"
336351
)
352+
affected_packages_md5 = models.CharField(
353+
blank=True,
354+
max_length=32,
355+
)
337356
references = models.JSONField(
338357
blank=True, default=list, help_text="A list of serializable Reference objects"
339358
)
359+
references_md5 = models.CharField(
360+
blank=True,
361+
max_length=32,
362+
)
340363
date_published = models.DateTimeField(
341364
blank=True, null=True, help_text="UTC Date of publication of the advisory"
342365
)
@@ -356,9 +379,9 @@ class Advisory(models.Model):
356379
class Meta:
357380
unique_together = (
358381
"aliases",
359-
"summary",
360-
"affected_packages",
361-
"references",
382+
"summary_md5",
383+
"affected_packages_md5",
384+
"references_md5",
362385
"date_published",
363386
)
364387

0 commit comments

Comments
 (0)