Skip to content

Commit d3dfb4d

Browse files
committed
Add package_content PurlDB field on Package model
Signed-off-by: tdruez <[email protected]>
1 parent fd1b980 commit d3dfb4d

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 5.2.8 on 2025-11-24 12:00
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('component_catalog', '0012_alter_component_children'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='package',
15+
name='package_content',
16+
field=models.IntegerField(blank=True, choices=[(1, 'curation'), (2, 'patch'), (3, 'source_repo'), (4, 'source_archive'), (5, 'binary'), (6, 'test'), (7, 'doc')], help_text='Content of this Package as one of: curation, patch, source_repo, source_archive, binary, test, doc', null=True),
17+
),
18+
]

component_catalog/models.py

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1653,6 +1653,44 @@ def __str__(self):
16531653
return self.label
16541654

16551655

1656+
class PackageContentFieldMixin(models.Model):
1657+
"""
1658+
Field extracted from the `purldb.packagedb.models.Package` model.
1659+
It need to stay aligned with its upstream PurlDB implementation.
1660+
"""
1661+
1662+
class PackageContentType(models.IntegerChoices):
1663+
CURATION = 1, "curation"
1664+
PATCH = 2, "patch"
1665+
SOURCE_REPO = 3, "source_repo"
1666+
SOURCE_ARCHIVE = 4, "source_archive"
1667+
BINARY = 5, "binary"
1668+
TEST = 6, "test"
1669+
DOC = 7, "doc"
1670+
1671+
package_content = models.IntegerField(
1672+
null=True,
1673+
blank=True,
1674+
choices=PackageContentType.choices,
1675+
help_text=_(
1676+
"Content of this Package as one of: {}".format(", ".join(PackageContentType.labels))
1677+
),
1678+
)
1679+
1680+
class Meta:
1681+
abstract = True
1682+
1683+
@classmethod
1684+
def get_package_content_value_from_label(cls, label):
1685+
"""Convert a package_content string label to its integer value."""
1686+
if not label:
1687+
return None
1688+
try:
1689+
return cls.PackageContentType[label.upper()].value
1690+
except (KeyError, AttributeError):
1691+
return None
1692+
1693+
16561694
PACKAGE_URL_FIELDS = ["type", "namespace", "name", "version", "qualifiers", "subpath"]
16571695

16581696

@@ -1792,6 +1830,7 @@ class Package(
17921830
URLFieldsMixin,
17931831
HashFieldsMixin,
17941832
PackageURLMixin,
1833+
PackageContentFieldMixin,
17951834
DataspacedModel,
17961835
):
17971836
filename = models.CharField(
@@ -2558,7 +2597,7 @@ def get_purldb_entries(self, user, max_request_call=0, timeout=10):
25582597
if self.download_url:
25592598
payloads.append({"download_url": self.download_url})
25602599
if package_url:
2561-
payloads.append({"purl": package_url})
2600+
payloads.append({"purl": package_url, "sort": "package_content"})
25622601

25632602
purldb = PurlDB(user.dataspace)
25642603
for index, payload in enumerate(payloads):

0 commit comments

Comments
 (0)