Skip to content

Commit

Permalink
DRAFT pulp_labels POC
Browse files Browse the repository at this point in the history
  • Loading branch information
ggainey committed Sep 11, 2024
1 parent 91d1587 commit 85b3c87
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 5 deletions.
2 changes: 1 addition & 1 deletion pulp_file/app/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ class FileContentViewSet(SingleArtifactContentUploadViewSet):
"effect": "allow",
},
{
"action": ["create"],
"action": ["create", "set_label", "unset_label"],
"principal": "authenticated",
"effect": "allow",
"condition": [
Expand Down
19 changes: 19 additions & 0 deletions pulpcore/app/migrations/0123_content_pulp_labels.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 4.2.15 on 2024-09-08 23:15

import django.contrib.postgres.fields.hstore
from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('core', '0122_record_last_replication_timestamp'),
]

operations = [
migrations.AddField(
model_name='content',
name='pulp_labels',
field=django.contrib.postgres.fields.hstore.HStoreField(default=dict),
),
]
3 changes: 3 additions & 0 deletions pulpcore/app/models/content.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from itertools import chain

from django.conf import settings
from django.contrib.postgres.fields import HStoreField
from django.core import validators
from django.db import IntegrityError, models, transaction
from django.forms.models import model_to_dict
Expand Down Expand Up @@ -515,6 +516,7 @@ class Content(MasterModel, QueryMixin):
Fields:
upstream_id (models.UUIDField) : identifier of content imported from an 'upstream' Pulp
timestamp_of_interest (models.DateTimeField): timestamp that prevents orphan cleanup
pulp_labels (HStoreField): Dictionary of string values.
Relations:
Expand All @@ -528,6 +530,7 @@ class Content(MasterModel, QueryMixin):
TYPE = "content"
repo_key_fields = () # Used by pulpcore.plugin.repo_version_utils.remove_duplicates
upstream_id = models.UUIDField(null=True) # Used by PulpImport/Export processing
pulp_labels = HStoreField(default=dict)

_artifacts = models.ManyToManyField(Artifact, through="ContentArtifact")
timestamp_of_interest = models.DateTimeField(auto_now=True)
Expand Down
9 changes: 7 additions & 2 deletions pulpcore/app/serializers/content.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
from rest_framework.validators import UniqueValidator

from pulpcore.app import models
from pulpcore.app.serializers import base, fields, DetailRelatedField
from pulpcore.app.serializers import base, fields, pulp_labels_validator, DetailRelatedField
from pulpcore.app.util import get_domain


class NoArtifactContentSerializer(base.ModelSerializer):
pulp_href = base.DetailIdentityField(view_name_pattern=r"contents(-.*/.*)-detail")
pulp_labels = serializers.HStoreField(required=False, validators=[pulp_labels_validator])

repository = DetailRelatedField(
help_text=_("A URI of a repository the new content unit should be associated with."),
required=False,
Expand Down Expand Up @@ -104,7 +106,10 @@ def create(self, validated_data):

class Meta:
model = models.Content
fields = base.ModelSerializer.Meta.fields + ("repository",)
fields = base.ModelSerializer.Meta.fields + (
"repository",
"pulp_labels",
)


class SingleArtifactContentSerializer(NoArtifactContentSerializer):
Expand Down
12 changes: 10 additions & 2 deletions pulpcore/app/viewsets/content.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
SigningServiceSerializer,
)
from pulpcore.app.util import get_viewset_for_model
from pulpcore.app.viewsets.base import NamedModelViewSet
from pulpcore.app.viewsets.base import NamedModelViewSet, LabelsMixin
from pulpcore.app.viewsets.custom_filters import LabelFilter

from .custom_filters import (
ArtifactRepositoryVersionFilter,
Expand Down Expand Up @@ -127,6 +128,8 @@ class ContentFilter(BaseFilterSet):
orphaned_for:
Return Content which has been orphaned for a given number of minutes;
-1 uses ORPHAN_PROTECTION_TIME value.
pulp_label_select:
Return Content which has has the specified label
"""

repository_version = ContentRepositoryVersionFilter()
Expand All @@ -135,6 +138,7 @@ class ContentFilter(BaseFilterSet):
orphaned_for = OrphanedFilter(
help_text="Minutes Content has been orphaned for. -1 uses ORPHAN_PROTECTION_TIME."
)
pulp_label_select = LabelFilter()


class BaseContentViewSet(NamedModelViewSet):
Expand Down Expand Up @@ -199,7 +203,11 @@ def routable(cls):


class ContentViewSet(
BaseContentViewSet, mixins.CreateModelMixin, mixins.RetrieveModelMixin, mixins.ListModelMixin
BaseContentViewSet,
mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.ListModelMixin,
LabelsMixin,
):
"""
Content viewset that supports POST and GET by default.
Expand Down

0 comments on commit 85b3c87

Please sign in to comment.