From: Adam Hassick Date: Thu, 30 Jan 2025 19:56:37 +0000 (-0500) Subject: api: Add fields to series detail view X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6f8a0a76fb1ee2faf74e6c2d21a76debec4ac8b5;p=thirdparty%2Fpatchwork.git api: Add fields to series detail view * Add the "dependencies" and "dependents" fields to the series detail view. * Add "parse_dependencies" to the project detail view. Signed-off-by: Adam Hassick Acked-by: Aaron Conole [stephenfin: Rename Project field from parse_dependencies to show_dependencies] Signed-off-by: Stephen Finucane --- diff --git a/patchwork/api/project.py b/patchwork/api/project.py index 2f0b4784..6307dda0 100644 --- a/patchwork/api/project.py +++ b/patchwork/api/project.py @@ -39,6 +39,7 @@ class ProjectSerializer(BaseHyperlinkedModelSerializer): 'list_archive_url', 'list_archive_url_format', 'commit_url_format', + 'show_dependencies', ) read_only_fields = ( 'name', @@ -55,6 +56,7 @@ class ProjectSerializer(BaseHyperlinkedModelSerializer): 'list_archive_url_format', 'commit_url_format', ), + '1.4': ('show_dependencies',), } extra_kwargs = { 'url': {'view_name': 'api-project-detail'}, diff --git a/patchwork/api/series.py b/patchwork/api/series.py index b88ed1f5..c9f5f54b 100644 --- a/patchwork/api/series.py +++ b/patchwork/api/series.py @@ -5,7 +5,10 @@ from rest_framework.generics import ListAPIView from rest_framework.generics import RetrieveAPIView -from rest_framework.serializers import SerializerMethodField +from rest_framework.serializers import ( + SerializerMethodField, + HyperlinkedRelatedField, +) from patchwork.api.base import BaseHyperlinkedModelSerializer from patchwork.api.base import PatchworkPermission @@ -24,6 +27,12 @@ class SeriesSerializer(BaseHyperlinkedModelSerializer): mbox = SerializerMethodField() cover_letter = CoverSerializer(read_only=True) patches = PatchSerializer(read_only=True, many=True) + dependencies = HyperlinkedRelatedField( + read_only=True, view_name='api-series-detail', many=True + ) + dependents = HyperlinkedRelatedField( + read_only=True, view_name='api-series-detail', many=True + ) def get_web_url(self, instance): request = self.context.get('request') @@ -33,6 +42,16 @@ class SeriesSerializer(BaseHyperlinkedModelSerializer): request = self.context.get('request') return request.build_absolute_uri(instance.get_mbox_url()) + def to_representation(self, instance): + if not instance.project.show_dependencies: + for field in ('dependencies', 'dependents'): + if field in self.fields: + del self.fields[field] + + data = super().to_representation(instance) + + return data + class Meta: model = Series fields = ( @@ -50,6 +69,8 @@ class SeriesSerializer(BaseHyperlinkedModelSerializer): 'mbox', 'cover_letter', 'patches', + 'dependencies', + 'dependents', ) read_only_fields = ( 'date', @@ -60,9 +81,12 @@ class SeriesSerializer(BaseHyperlinkedModelSerializer): 'mbox', 'cover_letter', 'patches', + 'dependencies', + 'dependents', ) versioned_fields = { '1.1': ('web_url',), + '1.4': ('dependencies', 'dependents'), } extra_kwargs = { 'url': {'view_name': 'api-series-detail'}, @@ -76,7 +100,12 @@ class SeriesMixin(object): def get_queryset(self): return ( Series.objects.all() - .prefetch_related('patches__project', 'cover_letter__project') + .prefetch_related( + 'patches__project', + 'cover_letter__project', + 'dependencies', + 'dependents', + ) .select_related('submitter', 'project') )