Skip to content

Commit b4f7066

Browse files
committed
Add an UUID field on the DiscoveredDependency model #1651
Signed-off-by: tdruez <[email protected]>
1 parent 759e306 commit b4f7066

File tree

4 files changed

+81
-3
lines changed

4 files changed

+81
-3
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 5.1.8 on 2025-04-16 06:49
2+
3+
import uuid
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('scanpipe', '0069_project_purl'),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name='discovereddependency',
16+
name='uuid',
17+
field=models.UUIDField(null=True, editable=False, verbose_name='UUID'),
18+
),
19+
]
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Generated by Django 5.1.8 on 2025-04-16 06:57
2+
3+
import uuid
4+
from django.db import migrations
5+
6+
7+
def gen_uuid_bulk(apps, schema_editor):
8+
DiscoveredDependency = apps.get_model("scanpipe", "DiscoveredDependency")
9+
batch_size = 10000
10+
objs = []
11+
for obj in DiscoveredDependency.objects.filter(uuid__isnull=True).iterator():
12+
obj.uuid = uuid.uuid4()
13+
objs.append(obj)
14+
if len(objs) >= batch_size:
15+
DiscoveredDependency.objects.bulk_update(objs, ['uuid'])
16+
objs = []
17+
if objs:
18+
DiscoveredDependency.objects.bulk_update(objs, ['uuid'])
19+
20+
21+
class Migration(migrations.Migration):
22+
23+
dependencies = [
24+
('scanpipe', '0070_discovereddependency_uuid'),
25+
]
26+
27+
operations = [
28+
migrations.RunPython(gen_uuid_bulk, reverse_code=migrations.RunPython.noop),
29+
]
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 5.1.8 on 2025-04-16 07:00
2+
3+
import uuid
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('scanpipe', '0071_discovereddependency_uuid_populate'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='discovereddependency',
16+
name='uuid',
17+
field=models.UUIDField(default=uuid.uuid4, editable=False, unique=True, verbose_name='UUID'),
18+
),
19+
]

scanpipe/models.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,18 @@ def short_uuid(self):
129129
return str(self.uuid)[0:8]
130130

131131

132+
class UUIDFieldMixin(models.Model):
133+
uuid = models.UUIDField(
134+
verbose_name=_("UUID"),
135+
default=uuid.uuid4,
136+
editable=False,
137+
unique=True,
138+
)
139+
140+
class Meta:
141+
abstract = True
142+
143+
132144
class HashFieldsMixin(models.Model):
133145
"""
134146
The hash fields are not indexed by default, use the `indexes` in Meta as needed:
@@ -3400,6 +3412,7 @@ class Meta:
34003412

34013413
class DiscoveredPackage(
34023414
ProjectRelatedModel,
3415+
UUIDFieldMixin,
34033416
ExtraDataFieldMixin,
34043417
SaveProjectMessageMixin,
34053418
UpdateFromDataMixin,
@@ -3421,9 +3434,6 @@ class DiscoveredPackage(
34213434

34223435
license_expression_field = "declared_license_expression"
34233436

3424-
uuid = models.UUIDField(
3425-
verbose_name=_("UUID"), default=uuid.uuid4, unique=True, editable=False
3426-
)
34273437
codebase_resources = models.ManyToManyField(
34283438
"CodebaseResource", related_name="discovered_packages"
34293439
)
@@ -3769,6 +3779,7 @@ def only_package_url_fields(self, extra=None):
37693779

37703780
class DiscoveredDependency(
37713781
ProjectRelatedModel,
3782+
UUIDFieldMixin,
37723783
SaveProjectMessageMixin,
37733784
UpdateFromDataMixin,
37743785
VulnerabilityMixin,

0 commit comments

Comments
 (0)