Skip to content

Commit d2424ec

Browse files
committed
Consolidate the migrations for DiscoveredDependency model #447
Signed-off-by: Thomas Druez <[email protected]>
1 parent 92179c7 commit d2424ec

6 files changed

+196
-148
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
# Generated by Django 4.1 on 2022-08-31 07:09
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
import scanpipe.models
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
("scanpipe", "0021_codebaseresource_package_data"),
12+
]
13+
14+
operations = [
15+
migrations.RenameField(
16+
model_name='discoveredpackage',
17+
old_name='dependencies',
18+
new_name='dependencies_data',
19+
),
20+
migrations.CreateModel(
21+
name="DiscoveredDependency",
22+
fields=[
23+
(
24+
"id",
25+
models.AutoField(
26+
auto_created=True,
27+
primary_key=True,
28+
serialize=False,
29+
verbose_name="ID",
30+
),
31+
),
32+
(
33+
"type",
34+
models.CharField(
35+
blank=True,
36+
help_text="A short code to identify the type of this package. For example: gem for a Rubygem, docker for a container, pypi for a Python Wheel or Egg, maven for a Maven Jar, deb for a Debian package, etc.",
37+
max_length=16,
38+
),
39+
),
40+
(
41+
"namespace",
42+
models.CharField(
43+
blank=True,
44+
help_text="Package name prefix, such as Maven groupid, Docker image owner, GitHub user or organization, etc.",
45+
max_length=255,
46+
),
47+
),
48+
(
49+
"name",
50+
models.CharField(
51+
blank=True, help_text="Name of the package.", max_length=100
52+
),
53+
),
54+
(
55+
"version",
56+
models.CharField(
57+
blank=True, help_text="Version of the package.", max_length=100
58+
),
59+
),
60+
(
61+
"qualifiers",
62+
models.CharField(
63+
blank=True,
64+
help_text="Extra qualifying data for a package such as the name of an OS, architecture, distro, etc.",
65+
max_length=1024,
66+
),
67+
),
68+
(
69+
"subpath",
70+
models.CharField(
71+
blank=True,
72+
help_text="Extra subpath within a package, relative to the package root.",
73+
max_length=200,
74+
),
75+
),
76+
(
77+
"dependency_uid",
78+
models.CharField(
79+
help_text="The unique identifier of this dependency.",
80+
max_length=1024,
81+
),
82+
),
83+
(
84+
"extracted_requirement",
85+
models.CharField(
86+
blank=True,
87+
help_text="The version requirements of this dependency.",
88+
max_length=64,
89+
),
90+
),
91+
(
92+
"scope",
93+
models.CharField(
94+
blank=True,
95+
help_text="The scope of this dependency, how it is used in a project.",
96+
max_length=64,
97+
),
98+
),
99+
(
100+
"datasource_id",
101+
models.CharField(
102+
blank=True,
103+
help_text="The identifier for the datafile handler used to obtain this dependency.",
104+
max_length=64,
105+
),
106+
),
107+
("is_runtime", models.BooleanField(default=False)),
108+
("is_optional", models.BooleanField(default=False)),
109+
("is_resolved", models.BooleanField(default=False)),
110+
(
111+
"datafile_resource",
112+
models.ForeignKey(
113+
blank=True,
114+
editable=False,
115+
null=True,
116+
on_delete=django.db.models.deletion.CASCADE,
117+
related_name="dependencies",
118+
to="scanpipe.codebaseresource",
119+
),
120+
),
121+
(
122+
"for_package",
123+
models.ForeignKey(
124+
blank=True,
125+
editable=False,
126+
null=True,
127+
on_delete=django.db.models.deletion.CASCADE,
128+
related_name="dependencies",
129+
to="scanpipe.discoveredpackage",
130+
),
131+
),
132+
(
133+
"project",
134+
models.ForeignKey(
135+
editable=False,
136+
on_delete=django.db.models.deletion.CASCADE,
137+
related_name="discovereddependencies",
138+
to="scanpipe.project",
139+
),
140+
),
141+
],
142+
options={
143+
"verbose_name": "discovered dependency",
144+
"verbose_name_plural": "discovered dependencies",
145+
"ordering": [
146+
"-is_runtime",
147+
"-is_resolved",
148+
"is_optional",
149+
"dependency_uid",
150+
"for_package",
151+
"datafile_resource",
152+
"datasource_id",
153+
],
154+
},
155+
bases=(
156+
scanpipe.models.SaveProjectErrorMixin,
157+
scanpipe.models.UpdateFromDataMixin,
158+
models.Model,
159+
),
160+
),
161+
migrations.AddConstraint(
162+
model_name="discovereddependency",
163+
constraint=models.UniqueConstraint(
164+
condition=models.Q(("dependency_uid", ""), _negated=True),
165+
fields=("project", "dependency_uid"),
166+
name="scanpipe_discovereddependency_unique_dependency_uid_within_project",
167+
),
168+
),
169+
]

scanpipe/migrations/0022_rename_dependencies_discoveredpackage_dependencies_data_and_more.py

-93
This file was deleted.

scanpipe/migrations/0023_migrate_dependencies.py

+10-3
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist
44
from django.db import migrations
55

6+
from packageurl import PackageURL
67

7-
def migrate_dependencies_to_discovereddependencies(apps, schema_editor):
8+
9+
def migrate_dependencies_data_to_discovereddependencies_model(apps, schema_editor):
810
DiscoveredPackage = apps.get_model('scanpipe', 'DiscoveredPackage')
911
DiscoveredDependency = apps.get_model('scanpipe', 'DiscoveredDependency')
1012

@@ -24,6 +26,11 @@ def migrate_dependencies_to_discovereddependencies(apps, schema_editor):
2426
if requirement:
2527
dependency_data["extracted_requirement"] = requirement
2628

29+
purl = dependency_data.pop("purl", None)
30+
if purl:
31+
purl_mapping = PackageURL.from_string(purl).to_dict(empty="")
32+
dependency_data.update(purl_mapping)
33+
2734
for_package_uid = dependency_data.pop("for_package_uid")
2835
try:
2936
for_package = project.discoveredpackages.get(package_uid=for_package_uid)
@@ -47,9 +54,9 @@ def migrate_dependencies_to_discovereddependencies(apps, schema_editor):
4754
class Migration(migrations.Migration):
4855

4956
dependencies = [
50-
('scanpipe', '0022_rename_dependencies_discoveredpackage_dependencies_data_and_more'),
57+
('scanpipe', '0022_create_discovereddependencies_model'),
5158
]
5259

5360
operations = [
54-
migrations.RunPython(migrate_dependencies_to_discovereddependencies),
61+
migrations.RunPython(migrate_dependencies_data_to_discovereddependencies_model),
5562
]

scanpipe/migrations/0024_migrate_dependency_uid_to_purl_fields.py

-31
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Generated by Django 4.1 on 2022-08-31 07:20
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("scanpipe", "0023_migrate_dependencies"),
10+
]
11+
12+
operations = [
13+
migrations.RemoveField(
14+
model_name="discoveredpackage",
15+
name="dependencies_data",
16+
),
17+
]

scanpipe/migrations/0025_remove_discovereddependency_purl_and_more.py

-21
This file was deleted.

0 commit comments

Comments
 (0)