Skip to content

Commit 6f8a0a7

Browse files
loudonlunestephenfin
authored andcommitted
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 <ahassick@iol.unh.edu> Acked-by: Aaron Conole <aconole@redhat.com> [stephenfin: Rename Project field from parse_dependencies to show_dependencies] Signed-off-by: Stephen Finucane <stephen@that.guru>
1 parent 01a5b46 commit 6f8a0a7

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

patchwork/api/project.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class Meta:
3939
'list_archive_url',
4040
'list_archive_url_format',
4141
'commit_url_format',
42+
'show_dependencies',
4243
)
4344
read_only_fields = (
4445
'name',
@@ -55,6 +56,7 @@ class Meta:
5556
'list_archive_url_format',
5657
'commit_url_format',
5758
),
59+
'1.4': ('show_dependencies',),
5860
}
5961
extra_kwargs = {
6062
'url': {'view_name': 'api-project-detail'},

patchwork/api/series.py

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55

66
from rest_framework.generics import ListAPIView
77
from rest_framework.generics import RetrieveAPIView
8-
from rest_framework.serializers import SerializerMethodField
8+
from rest_framework.serializers import (
9+
SerializerMethodField,
10+
HyperlinkedRelatedField,
11+
)
912

1013
from patchwork.api.base import BaseHyperlinkedModelSerializer
1114
from patchwork.api.base import PatchworkPermission
@@ -24,6 +27,12 @@ class SeriesSerializer(BaseHyperlinkedModelSerializer):
2427
mbox = SerializerMethodField()
2528
cover_letter = CoverSerializer(read_only=True)
2629
patches = PatchSerializer(read_only=True, many=True)
30+
dependencies = HyperlinkedRelatedField(
31+
read_only=True, view_name='api-series-detail', many=True
32+
)
33+
dependents = HyperlinkedRelatedField(
34+
read_only=True, view_name='api-series-detail', many=True
35+
)
2736

2837
def get_web_url(self, instance):
2938
request = self.context.get('request')
@@ -33,6 +42,16 @@ def get_mbox(self, instance):
3342
request = self.context.get('request')
3443
return request.build_absolute_uri(instance.get_mbox_url())
3544

45+
def to_representation(self, instance):
46+
if not instance.project.show_dependencies:
47+
for field in ('dependencies', 'dependents'):
48+
if field in self.fields:
49+
del self.fields[field]
50+
51+
data = super().to_representation(instance)
52+
53+
return data
54+
3655
class Meta:
3756
model = Series
3857
fields = (
@@ -50,6 +69,8 @@ class Meta:
5069
'mbox',
5170
'cover_letter',
5271
'patches',
72+
'dependencies',
73+
'dependents',
5374
)
5475
read_only_fields = (
5576
'date',
@@ -60,9 +81,12 @@ class Meta:
6081
'mbox',
6182
'cover_letter',
6283
'patches',
84+
'dependencies',
85+
'dependents',
6386
)
6487
versioned_fields = {
6588
'1.1': ('web_url',),
89+
'1.4': ('dependencies', 'dependents'),
6690
}
6791
extra_kwargs = {
6892
'url': {'view_name': 'api-series-detail'},
@@ -76,7 +100,12 @@ class SeriesMixin(object):
76100
def get_queryset(self):
77101
return (
78102
Series.objects.all()
79-
.prefetch_related('patches__project', 'cover_letter__project')
103+
.prefetch_related(
104+
'patches__project',
105+
'cover_letter__project',
106+
'dependencies',
107+
'dependents',
108+
)
80109
.select_related('submitter', 'project')
81110
)
82111

0 commit comments

Comments
 (0)