From f310bec319649a073355c865259e82f717c2188a Mon Sep 17 00:00:00 2001 From: Gerrod Ubben Date: Tue, 27 Jan 2026 15:16:05 -0500 Subject: [PATCH] Add pulp_labels to Namespaces fixes: #2139 Generated by: claude-4.5-sonnet --- CHANGES/2139.feature | 1 + .../0047_containernamespace_pulp_labels.py | 19 +++++++++++++++++++ pulp_container/app/models.py | 3 +++ pulp_container/app/serializers.py | 4 +++- 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 CHANGES/2139.feature create mode 100644 pulp_container/app/migrations/0047_containernamespace_pulp_labels.py diff --git a/CHANGES/2139.feature b/CHANGES/2139.feature new file mode 100644 index 000000000..c1cfc06b6 --- /dev/null +++ b/CHANGES/2139.feature @@ -0,0 +1 @@ +Added pulp_labels field to ContainerNamespace for labeling and organizing namespaces diff --git a/pulp_container/app/migrations/0047_containernamespace_pulp_labels.py b/pulp_container/app/migrations/0047_containernamespace_pulp_labels.py new file mode 100644 index 000000000..b6453f4dd --- /dev/null +++ b/pulp_container/app/migrations/0047_containernamespace_pulp_labels.py @@ -0,0 +1,19 @@ +# Generated by Django 5.2.6 on 2026-01-27 00:00 + +from django.contrib.postgres.fields import HStoreField +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('container', '0046_alter_manifest_listed_manifests'), + ] + + operations = [ + migrations.AddField( + model_name='containernamespace', + name='pulp_labels', + field=HStoreField(default=dict), + ), + ] diff --git a/pulp_container/app/models.py b/pulp_container/app/models.py index d4e440a63..d4d26f834 100644 --- a/pulp_container/app/models.py +++ b/pulp_container/app/models.py @@ -10,6 +10,7 @@ from django.db import models from django.conf import settings from django.contrib.postgres import fields +from django.contrib.postgres.fields import HStoreField from django.shortcuts import redirect from django_lifecycle import hook, AFTER_CREATE, AFTER_DELETE, AFTER_UPDATE @@ -438,10 +439,12 @@ class ContainerNamespace(BaseModel, AutoAddObjPermsMixin): Fields: name (models.TextField): The name of the namespace. + pulp_labels (HStoreField): Key-value pairs for labeling and organizing namespaces. """ name = models.TextField(db_index=True) pulp_domain = models.ForeignKey("core.Domain", default=get_domain_pk, on_delete=models.PROTECT) + pulp_labels = HStoreField(default=dict) class Meta: unique_together = ("name", "pulp_domain") diff --git a/pulp_container/app/serializers.py b/pulp_container/app/serializers.py index 6ebca247b..cabdeb99c 100644 --- a/pulp_container/app/serializers.py +++ b/pulp_container/app/serializers.py @@ -26,6 +26,7 @@ RepositoryVersionRelatedField, SingleArtifactContentSerializer, ValidateFieldsMixin, + pulp_labels_validator, ) from pulpcore.plugin.util import get_domain @@ -241,9 +242,10 @@ class ContainerNamespaceSerializer(ModelSerializer, GetOrCreateSerializerMixin): """ pulp_href = IdentityField(view_name="pulp_container/namespaces-detail") + pulp_labels = serializers.HStoreField(required=False, validators=[pulp_labels_validator]) class Meta: - fields = ModelSerializer.Meta.fields + ("name",) + fields = ModelSerializer.Meta.fields + ("name", "pulp_labels") model = models.ContainerNamespace