From: Stephen Finucane Date: Fri, 27 Apr 2018 15:33:21 +0000 (+0100) Subject: REST: Show 'comments' in '/patches', '/comments' X-Git-Tag: v2.1.0-rc1~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aed31081a8d57839c6d0c543d4d6b6c52580803f;p=thirdparty%2Fpatchwork.git REST: Show 'comments' in '/patches', '/comments' This link is only shown for individual resources at the moment. Modify this behavior. Signed-off-by: Stephen Finucane Acked-by: Veronika Kabatova --- diff --git a/patchwork/api/cover.py b/patchwork/api/cover.py index 01c9fbb6..7c80064c 100644 --- a/patchwork/api/cover.py +++ b/patchwork/api/cover.py @@ -38,18 +38,23 @@ class CoverLetterListSerializer(BaseHyperlinkedModelSerializer): submitter = PersonSerializer(read_only=True) mbox = SerializerMethodField() series = SeriesSerializer(many=True, read_only=True) + comments = SerializerMethodField() def get_mbox(self, instance): request = self.context.get('request') return request.build_absolute_uri(instance.get_mbox_url()) + def get_comments(self, cover): + return self.context.get('request').build_absolute_uri( + reverse('api-comment-list', kwargs={'pk': cover.id})) + class Meta: model = CoverLetter fields = ('id', 'url', 'project', 'msgid', 'date', 'name', 'submitter', - 'mbox', 'series') + 'mbox', 'series', 'comments') read_only_fields = fields versioned_fields = { - '1.1': ('mbox', ), + '1.1': ('mbox', 'comments'), } extra_kwargs = { 'url': {'view_name': 'api-cover-detail'}, @@ -59,11 +64,6 @@ class CoverLetterListSerializer(BaseHyperlinkedModelSerializer): class CoverLetterDetailSerializer(CoverLetterListSerializer): headers = SerializerMethodField() - comments = SerializerMethodField() - - def get_comments(self, cover): - return self.context.get('request').build_absolute_uri( - reverse('api-comment-list', kwargs={'pk': cover.id})) def get_headers(self, instance): headers = {} @@ -82,12 +82,10 @@ class CoverLetterDetailSerializer(CoverLetterListSerializer): class Meta: model = CoverLetter fields = CoverLetterListSerializer.Meta.fields + ( - 'headers', 'content', 'comments') + 'headers', 'content') read_only_fields = fields extra_kwargs = CoverLetterListSerializer.Meta.extra_kwargs - versioned_fields = { - '1.1': ('mbox', 'comments'), - } + versioned_fields = CoverLetterListSerializer.Meta.versioned_fields class CoverLetterList(ListAPIView): diff --git a/patchwork/api/patch.py b/patchwork/api/patch.py index 8aca8915..d1931c01 100644 --- a/patchwork/api/patch.py +++ b/patchwork/api/patch.py @@ -83,6 +83,7 @@ class PatchListSerializer(BaseHyperlinkedModelSerializer): delegate = UserSerializer() mbox = SerializerMethodField() series = SeriesSerializer(many=True, read_only=True) + comments = SerializerMethodField() check = SerializerMethodField() checks = SerializerMethodField() tags = SerializerMethodField() @@ -91,10 +92,9 @@ class PatchListSerializer(BaseHyperlinkedModelSerializer): request = self.context.get('request') return request.build_absolute_uri(instance.get_mbox_url()) - def get_tags(self, instance): - # TODO(stephenfin): Make tags performant, possibly by reworking the - # model - return {} + def get_comments(self, patch): + return self.context.get('request').build_absolute_uri( + reverse('api-comment-list', kwargs={'pk': patch.id})) def get_check(self, instance): return instance.combined_check_state @@ -103,15 +103,23 @@ class PatchListSerializer(BaseHyperlinkedModelSerializer): return self.context.get('request').build_absolute_uri( reverse('api-check-list', kwargs={'patch_id': instance.id})) + def get_tags(self, instance): + # TODO(stephenfin): Make tags performant, possibly by reworking the + # model + return {} + class Meta: model = Patch fields = ('id', 'url', 'project', 'msgid', 'date', 'name', 'commit_ref', 'pull_url', 'state', 'archived', 'hash', - 'submitter', 'delegate', 'mbox', 'series', 'check', 'checks', - 'tags') + 'submitter', 'delegate', 'mbox', 'series', 'comments', + 'check', 'checks', 'tags') read_only_fields = ('project', 'msgid', 'date', 'name', 'hash', - 'submitter', 'mbox', 'mbox', 'series', 'check', - 'checks', 'tags') + 'submitter', 'mbox', 'mbox', 'series', 'comments', + 'check', 'checks', 'tags') + versioned_fields = { + '1.1': ('comments', ), + } extra_kwargs = { 'url': {'view_name': 'api-patch-detail'}, } @@ -121,11 +129,6 @@ class PatchDetailSerializer(PatchListSerializer): headers = SerializerMethodField() prefixes = SerializerMethodField() - comments = SerializerMethodField() - - def get_comments(self, patch): - return self.context.get('request').build_absolute_uri( - reverse('api-comment-list', kwargs={'pk': patch.id})) def get_headers(self, patch): headers = {} @@ -147,13 +150,11 @@ class PatchDetailSerializer(PatchListSerializer): class Meta: model = Patch fields = PatchListSerializer.Meta.fields + ( - 'headers', 'content', 'diff', 'prefixes', 'comments') + 'headers', 'content', 'diff', 'prefixes') read_only_fields = PatchListSerializer.Meta.read_only_fields + ( - 'headers', 'content', 'diff', 'prefixes', 'comments') + 'headers', 'content', 'diff', 'prefixes') + versioned_fields = PatchListSerializer.Meta.versioned_fields extra_kwargs = PatchListSerializer.Meta.extra_kwargs - versioned_fields = { - '1.1': ('comments', ), - } class PatchList(ListAPIView): diff --git a/patchwork/tests/api/test_cover.py b/patchwork/tests/api/test_cover.py index b4a4dba7..15e02372 100644 --- a/patchwork/tests/api/test_cover.py +++ b/patchwork/tests/api/test_cover.py @@ -57,6 +57,7 @@ class TestCoverLetterAPI(APITestCase): self.assertEqual(cover_obj.id, cover_json['id']) self.assertEqual(cover_obj.name, cover_json['name']) self.assertIn(cover_obj.get_mbox_url(), cover_json['mbox']) + self.assertIn('comments', cover_json) # nested fields @@ -126,10 +127,6 @@ class TestCoverLetterAPI(APITestCase): for key, value in parsed_headers.items(): self.assertIn(value, resp.data['headers'][key]) - # test comments - resp = self.client.get(self.api_url(cover_obj.id)) - self.assertIn('comments', resp.data) - # test old version of API resp = self.client.get(self.api_url(cover_obj.id, version='1.0')) self.assertNotIn('comments', resp.data) diff --git a/patchwork/tests/api/test_patch.py b/patchwork/tests/api/test_patch.py index 58886efa..479f637c 100644 --- a/patchwork/tests/api/test_patch.py +++ b/patchwork/tests/api/test_patch.py @@ -62,6 +62,7 @@ class TestPatchAPI(APITestCase): self.assertEqual(patch_obj.msgid, patch_json['msgid']) self.assertEqual(patch_obj.state.slug, patch_json['state']) self.assertIn(patch_obj.get_mbox_url(), patch_json['mbox']) + self.assertIn('comments', patch_json) # nested fields @@ -144,10 +145,6 @@ class TestPatchAPI(APITestCase): self.assertEqual(patch.diff, resp.data['diff']) self.assertEqual(0, len(resp.data['tags'])) - # test comments - resp = self.client.get(self.api_url(patch.id)) - self.assertIn('comments', resp.data) - # test old version of API resp = self.client.get(self.api_url(item=patch.id, version='1.0')) self.assertNotIn('comments', resp.data)