From e90a7b1a353267d48d1867686a6d37c2be0607ac Mon Sep 17 00:00:00 2001 From: Stephen Herr Date: Thu, 2 Nov 2023 15:49:49 -0400 Subject: [PATCH] Add extra filters linking SourcePackages to Releases and ReleaseComponents closes #926 --- CHANGES/926.feature | 1 + .../app/serializers/content_serializers.py | 4 +-- pulp_deb/app/viewsets/content.py | 28 +++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 CHANGES/926.feature diff --git a/CHANGES/926.feature b/CHANGES/926.feature new file mode 100644 index 000000000..552128ae4 --- /dev/null +++ b/CHANGES/926.feature @@ -0,0 +1 @@ +Added extra filters linking SourcePackages to Releases and ReleaseComponents. diff --git a/pulp_deb/app/serializers/content_serializers.py b/pulp_deb/app/serializers/content_serializers.py index 6e4ab9540..f119138da 100644 --- a/pulp_deb/app/serializers/content_serializers.py +++ b/pulp_deb/app/serializers/content_serializers.py @@ -1190,13 +1190,13 @@ class SourcePackageReleaseComponentSerializer(NoArtifactContentSerializer): help_text="Source package that is contained in release_component.", many=False, queryset=SourcePackage.objects.all(), - view_name="deb-souce_package_component-detail", + view_name="content-deb/source_packages-detail", ) release_component = DetailRelatedField( help_text="ReleaseComponent this source package is contained in.", many=False, queryset=ReleaseComponent.objects.all(), - view_name="deb-release_component-detail", + view_name="content-deb/release_components-detail", ) class Meta(NoArtifactContentSerializer.Meta): diff --git a/pulp_deb/app/viewsets/content.py b/pulp_deb/app/viewsets/content.py index 0c3924024..7534e5c46 100644 --- a/pulp_deb/app/viewsets/content.py +++ b/pulp_deb/app/viewsets/content.py @@ -519,11 +519,38 @@ class PackageReleaseComponentViewSet(ContentViewSet): filterset_class = PackageReleaseComponentFilter +class SourcePackageToReleaseComponentFilter(ContentRelationshipFilter): + HELP = "Filter results where SourcePackage in ReleaseComponent" + ARG = "release_component_href" + ARG_CLASS = models.ReleaseComponent + + def _filter(self, qs, arg, rv_content): + sprc_qs = models.SourcePackageReleaseComponent.objects.filter( + pk__in=rv_content, release_component=arg.pk + ) + return qs.filter(deb_sourcepackagereleasecomponent__in=sprc_qs) + + +class SourcePackageToReleaseFilter(ContentRelationshipFilter): + HELP = "Filter results where SourcePackage in Release" + ARG = "release_href" + ARG_CLASS = models.Release + + def _filter(self, qs, arg, rv_content): + sprc_qs = models.SourcePackageReleaseComponent.objects.filter( + pk__in=rv_content, release_component__distribution=arg.distribution + ) + return qs.filter(deb_sourcepackagereleasecomponent__in=sprc_qs) + + class SourcePackageFilter(ContentFilter): """ FilterSet for Debian Source Packages. """ + release_component = SourcePackageToReleaseComponentFilter() + release = SourcePackageToReleaseFilter() + class Meta: model = models.SourcePackage fields = [ @@ -535,6 +562,7 @@ class Meta: "maintainer", "uploaders", "homepage", + "relative_path", "vcs_browser", "vcs_arch", "vcs_bzr",