diff --git a/pulp_rust/app/serializers.py b/pulp_rust/app/serializers.py index 510b1ca..cf048df 100755 --- a/pulp_rust/app/serializers.py +++ b/pulp_rust/app/serializers.py @@ -192,6 +192,24 @@ class Meta: model = models.RustContent +class RustPackageYankSerializer(core_serializers.NoArtifactContentSerializer): + """ + Read-only serializer for RustPackageYank marker content type. + + Used by RustPackageYankViewSet to expose yank markers via the Pulp REST API. + """ + + name = serializers.CharField(read_only=True) + vers = serializers.CharField(read_only=True) + + class Meta: + fields = core_serializers.NoArtifactContentSerializer.Meta.fields + ( + "name", + "vers", + ) + model = models.RustPackageYank + + class RustRemoteSerializer(core_serializers.RemoteSerializer): """ A Serializer for RustRemote. diff --git a/pulp_rust/app/viewsets.py b/pulp_rust/app/viewsets.py index c065de6..847cc50 100755 --- a/pulp_rust/app/viewsets.py +++ b/pulp_rust/app/viewsets.py @@ -75,6 +75,30 @@ class RustContentViewSet(core.ReadOnlyContentViewSet): } +class RustPackageYankViewSet(core.ReadOnlyContentViewSet): + """ + Read-only viewset for RustPackageYank marker content type. + RustPackageYank markers indicate that a crate version has been yanked in a repository. + Use the Cargo DELETE api/v1/crates/{name}/{version}/yank and + PUT api/v1/crates/{name}/{version}/unyank endpoints to create or remove these markers. + """ + + endpoint_name = "yanks" + queryset = models.RustPackageYank.objects.all() + serializer_class = serializers.RustPackageYankSerializer + + DEFAULT_ACCESS_POLICY = { + "statements": [ + { + "action": ["list", "retrieve"], + "principal": "authenticated", + "effect": "allow", + }, + ], + "queryset_scoping": {"function": "scope_queryset"}, + } + + class RustRemoteFilter(RemoteFilter): """ A FilterSet for RustRemote.