Skip to content

Commit f84e7a4

Browse files
authored
Merge pull request #553 from aboutcode-org/551-resources-filter-by-checksums
551 resources filter by checksums
2 parents 32d87d7 + d57cc24 commit f84e7a4

File tree

5 files changed

+124
-8
lines changed

5 files changed

+124
-8
lines changed

Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright (c) nexB Inc. and others. All rights reserved.
22
# SPDX-License-Identifier: Apache-2.0
33

4-
FROM --platform=linux/amd64 python:3.12-slim
4+
FROM python:3.12-slim
55

66
LABEL org.opencontainers.image.source="https://github.com/aboutcode-org/purldb"
77
LABEL org.opencontainers.image.description="PurlDB"

minecode/ls.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -182,10 +182,7 @@ def parse_directory_listing(dir_listing, from_find=False):
182182
# this is likely a directory line from an ls -LR listing. Strip
183183
# trailing colon and keep track of the base directory
184184
if not line.endswith(":"):
185-
raise Exception(
186-
"Unknown directory listing line format: #%(ln)d: %(line)r"
187-
% locals()
188-
)
185+
raise Exception(f"Unknown directory listing line format: #{ln}: {line}")
189186
base_dir = line.strip(":")
190187
continue
191188

packagedb/api.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -258,12 +258,18 @@ def filter_by_checksums(self, request, *args, **kwargs):
258258
d = {f"{field}__in": value}
259259
lookups |= Q(**d)
260260

261-
qs = Resource.objects.filter(lookups).prefetch_related("package")
261+
qs = (
262+
Resource.objects.filter(lookups)
263+
.select_related("package")
264+
.only("package__uuid")
265+
.order_by()
266+
)
262267
paginated_qs = self.paginate_queryset(qs)
263268
serializer = ResourceAPISerializer(
264269
paginated_qs, many=True, context={"request": request}
265270
)
266-
return self.get_paginated_response(serializer.data)
271+
paginated_response = self.get_paginated_response(serializer.data)
272+
return paginated_response
267273

268274

269275
class MultiplePackageURLFilter(MultipleCharFilter):
@@ -485,7 +491,7 @@ def filter_by_checksums(self, request, *args, **kwargs):
485491
)
486492

487493
# Query to get the full Package objects with the earliest release_date for each sha1
488-
qs = Package.objects.filter(lookups)
494+
qs = Package.objects.filter(lookups).order_by()
489495
paginated_qs = self.paginate_queryset(qs)
490496
if enhance_package_data:
491497
serialized_package_data = [
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
# Generated by Django 5.1.2 on 2024-12-05 00:15
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("packagedb", "0087_rename_discovered_dependency_attribute"),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name="package",
15+
name="md5",
16+
field=models.CharField(
17+
blank=True,
18+
db_index=True,
19+
help_text="MD5 checksum hex-encoded, as in md5sum.",
20+
max_length=32,
21+
null=True,
22+
verbose_name="MD5",
23+
),
24+
),
25+
migrations.AlterField(
26+
model_name="package",
27+
name="sha1",
28+
field=models.CharField(
29+
blank=True,
30+
db_index=True,
31+
help_text="SHA1 checksum hex-encoded, as in sha1sum.",
32+
max_length=40,
33+
null=True,
34+
verbose_name="SHA1",
35+
),
36+
),
37+
migrations.AlterField(
38+
model_name="package",
39+
name="sha256",
40+
field=models.CharField(
41+
blank=True,
42+
db_index=True,
43+
help_text="SHA256 checksum hex-encoded, as in sha256sum.",
44+
max_length=64,
45+
null=True,
46+
verbose_name="SHA256",
47+
),
48+
),
49+
migrations.AlterField(
50+
model_name="package",
51+
name="sha512",
52+
field=models.CharField(
53+
blank=True,
54+
db_index=True,
55+
help_text="SHA512 checksum hex-encoded, as in sha512sum.",
56+
max_length=128,
57+
null=True,
58+
verbose_name="SHA512",
59+
),
60+
),
61+
migrations.AlterField(
62+
model_name="resource",
63+
name="md5",
64+
field=models.CharField(
65+
blank=True,
66+
db_index=True,
67+
help_text="MD5 checksum hex-encoded, as in md5sum.",
68+
max_length=32,
69+
null=True,
70+
verbose_name="MD5",
71+
),
72+
),
73+
migrations.AlterField(
74+
model_name="resource",
75+
name="sha1",
76+
field=models.CharField(
77+
blank=True,
78+
db_index=True,
79+
help_text="SHA1 checksum hex-encoded, as in sha1sum.",
80+
max_length=40,
81+
null=True,
82+
verbose_name="SHA1",
83+
),
84+
),
85+
migrations.AlterField(
86+
model_name="resource",
87+
name="sha256",
88+
field=models.CharField(
89+
blank=True,
90+
db_index=True,
91+
help_text="SHA256 checksum hex-encoded, as in sha256sum.",
92+
max_length=64,
93+
null=True,
94+
verbose_name="SHA256",
95+
),
96+
),
97+
migrations.AlterField(
98+
model_name="resource",
99+
name="sha512",
100+
field=models.CharField(
101+
blank=True,
102+
db_index=True,
103+
help_text="SHA512 checksum hex-encoded, as in sha512sum.",
104+
max_length=128,
105+
null=True,
106+
verbose_name="SHA512",
107+
),
108+
),
109+
]

packagedb/models.py

+4
Original file line numberDiff line numberDiff line change
@@ -174,27 +174,31 @@ class Meta:
174174
max_length=32,
175175
blank=True,
176176
null=True,
177+
db_index=True,
177178
help_text=_("MD5 checksum hex-encoded, as in md5sum."),
178179
)
179180
sha1 = models.CharField(
180181
_("SHA1"),
181182
max_length=40,
182183
blank=True,
183184
null=True,
185+
db_index=True,
184186
help_text=_("SHA1 checksum hex-encoded, as in sha1sum."),
185187
)
186188
sha256 = models.CharField(
187189
_("SHA256"),
188190
max_length=64,
189191
blank=True,
190192
null=True,
193+
db_index=True,
191194
help_text=_("SHA256 checksum hex-encoded, as in sha256sum."),
192195
)
193196
sha512 = models.CharField(
194197
_("SHA512"),
195198
max_length=128,
196199
blank=True,
197200
null=True,
201+
db_index=True,
198202
help_text=_("SHA512 checksum hex-encoded, as in sha512sum."),
199203
)
200204

0 commit comments

Comments
 (0)