This should be present on all resources. Signed-off-by: Stephen Finucane <step...@that.guru> Fixes: 88f56051 ("api: add comments detail endpoint") --- docs/api/schemas/latest/patchwork.yaml | 5 +++++ docs/api/schemas/patchwork.j2 | 9 +++++++++ docs/api/schemas/v1.0/patchwork.yaml | 5 ----- docs/api/schemas/v1.1/patchwork.yaml | 5 ----- docs/api/schemas/v1.2/patchwork.yaml | 5 ----- docs/api/schemas/v1.3/patchwork.yaml | 5 +++++ patchwork/api/base.py | 14 ++++++-------- patchwork/api/bundle.py | 2 +- patchwork/api/comment.py | 24 ++++++++++++++++++++++-- patchwork/api/embedded.py | 2 ++ patchwork/api/patch.py | 1 + 11 files changed, 51 insertions(+), 26 deletions(-)
diff --git docs/api/schemas/latest/patchwork.yaml docs/api/schemas/latest/patchwork.yaml index 3a1fdd3a..b3de0db5 100644 --- docs/api/schemas/latest/patchwork.yaml +++ docs/api/schemas/latest/patchwork.yaml @@ -1627,6 +1627,11 @@ components: title: ID type: integer readOnly: true + url: + title: URL + type: string + format: uri + readOnly: true web_url: title: Web URL type: string diff --git docs/api/schemas/patchwork.j2 docs/api/schemas/patchwork.j2 index b9786654..68655348 100644 --- docs/api/schemas/patchwork.j2 +++ docs/api/schemas/patchwork.j2 @@ -1683,6 +1683,13 @@ components: title: ID type: integer readOnly: true +{% if version >= (1, 3) %} + url: + title: URL + type: string + format: uri + readOnly: true +{% endif %} {% if version >= (1, 1) %} web_url: title: Web URL @@ -2528,11 +2535,13 @@ components: title: ID type: integer readOnly: true +{% if version >= (1, 3) %} url: title: URL type: string format: uri readOnly: true +{% endif %} {% if version >= (1, 1) %} web_url: title: Web URL diff --git docs/api/schemas/v1.0/patchwork.yaml docs/api/schemas/v1.0/patchwork.yaml index 817b2f2a..6c3893ec 100644 --- docs/api/schemas/v1.0/patchwork.yaml +++ docs/api/schemas/v1.0/patchwork.yaml @@ -1993,11 +1993,6 @@ components: title: ID type: integer readOnly: true - url: - title: URL - type: string - format: uri - readOnly: true msgid: title: Message ID type: string diff --git docs/api/schemas/v1.1/patchwork.yaml docs/api/schemas/v1.1/patchwork.yaml index 574a8ad8..7e2299c5 100644 --- docs/api/schemas/v1.1/patchwork.yaml +++ docs/api/schemas/v1.1/patchwork.yaml @@ -2044,11 +2044,6 @@ components: title: ID type: integer readOnly: true - url: - title: URL - type: string - format: uri - readOnly: true web_url: title: Web URL type: string diff --git docs/api/schemas/v1.2/patchwork.yaml docs/api/schemas/v1.2/patchwork.yaml index 7a4e8e8e..93c3e97e 100644 --- docs/api/schemas/v1.2/patchwork.yaml +++ docs/api/schemas/v1.2/patchwork.yaml @@ -2287,11 +2287,6 @@ components: title: ID type: integer readOnly: true - url: - title: URL - type: string - format: uri - readOnly: true web_url: title: Web URL type: string diff --git docs/api/schemas/v1.3/patchwork.yaml docs/api/schemas/v1.3/patchwork.yaml index 6bd0419d..8663406d 100644 --- docs/api/schemas/v1.3/patchwork.yaml +++ docs/api/schemas/v1.3/patchwork.yaml @@ -1627,6 +1627,11 @@ components: title: ID type: integer readOnly: true + url: + title: URL + type: string + format: uri + readOnly: true web_url: title: Web URL type: string diff --git patchwork/api/base.py patchwork/api/base.py index 0f5c44a2..16e5cb8d 100644 --- patchwork/api/base.py +++ patchwork/api/base.py @@ -151,19 +151,17 @@ class NestedHyperlinkedIdentityField(HyperlinkedIdentityField): class BaseHyperlinkedModelSerializer(HyperlinkedModelSerializer): def to_representation(self, instance): - data = super(BaseHyperlinkedModelSerializer, self).to_representation( - instance - ) - request = self.context.get('request') for version in getattr(self.Meta, 'versioned_fields', {}): # if the user has requested a version lower that than in which the # field was added, we drop it if not utils.has_version(request, version): for field in self.Meta.versioned_fields[version]: - # After a PATCH with an older API version, we may not see - # these fields. If they don't exist, don't panic, return - # (and then discard) None. - data.pop(field, None) + if field in self.fields: + del self.fields[field] + + data = super(BaseHyperlinkedModelSerializer, self).to_representation( + instance + ) return data diff --git patchwork/api/bundle.py patchwork/api/bundle.py index b6c7c9d2..134b2724 100644 --- patchwork/api/bundle.py +++ patchwork/api/bundle.py @@ -99,7 +99,7 @@ class BundleSerializer(BaseHyperlinkedModelSerializer): if len(set([p.project.id for p in value])) > 1: raise ValidationError( - 'Bundle patches must belong to the same ' 'project' + 'Bundle patches must belong to the same project' ) return value diff --git patchwork/api/comment.py patchwork/api/comment.py index 13c116ee..eae83719 100644 --- patchwork/api/comment.py +++ patchwork/api/comment.py @@ -12,6 +12,7 @@ from rest_framework.serializers import HiddenField from rest_framework.serializers import SerializerMethodField from patchwork.api.base import BaseHyperlinkedModelSerializer +from patchwork.api.base import NestedHyperlinkedIdentityField from patchwork.api.base import MultipleFieldLookupMixin from patchwork.api.base import PatchworkPermission from patchwork.api.base import CurrentCoverDefault @@ -58,6 +59,7 @@ class BaseCommentListSerializer(BaseHyperlinkedModelSerializer): class Meta: fields = ( 'id', + 'url', 'web_url', 'msgid', 'list_archive_url', @@ -70,6 +72,7 @@ class BaseCommentListSerializer(BaseHyperlinkedModelSerializer): ) read_only_fields = ( 'id', + 'url', 'web_url', 'msgid', 'list_archive_url', @@ -82,17 +85,27 @@ class BaseCommentListSerializer(BaseHyperlinkedModelSerializer): versioned_fields = { '1.1': ('web_url',), '1.2': ('list_archive_url',), - '1.3': ('addressed',), + '1.3': ( + 'addressed', + 'url', + ), } class CoverCommentSerializer(BaseCommentListSerializer): + url = NestedHyperlinkedIdentityField( + 'api-cover-comment-detail', + lookup_field_mapping={ + 'cover_id': 'cover_id', + 'comment_id': 'id', + }, + ) cover = HiddenField(default=CurrentCoverDefault()) class Meta: model = CoverComment - fields = BaseCommentListSerializer.Meta.fields + ('cover', 'addressed') + fields = BaseCommentListSerializer.Meta.fields + ('cover',) read_only_fields = BaseCommentListSerializer.Meta.read_only_fields + ( 'cover', ) @@ -123,6 +136,13 @@ class CoverCommentMixin(object): class PatchCommentSerializer(BaseCommentListSerializer): + url = NestedHyperlinkedIdentityField( + 'api-patch-comment-detail', + lookup_field_mapping={ + 'patch_id': 'patch_id', + 'comment_id': 'id', + }, + ) patch = HiddenField(default=CurrentPatchDefault()) class Meta: diff --git patchwork/api/embedded.py patchwork/api/embedded.py index 4cfdf8e6..52018435 100644 --- patchwork/api/embedded.py +++ patchwork/api/embedded.py @@ -163,6 +163,7 @@ class CoverCommentSerializer(SerializedRelatedField): 'mbox', ), '1.2': ('list_archive_url',), + '1.3': ('url',), } extra_kwargs = { 'url': {'view_name': 'api-cover-comment-detail'}, @@ -225,6 +226,7 @@ class PatchCommentSerializer(SerializedRelatedField): 'mbox', ), '1.2': ('list_archive_url',), + '1.3': ('url',), } extra_kwargs = { 'url': {'view_name': 'api-patch-comment-detail'}, diff --git patchwork/api/patch.py patchwork/api/patch.py index 9fd10e06..34067611 100644 --- patchwork/api/patch.py +++ patchwork/api/patch.py @@ -180,6 +180,7 @@ class PatchListSerializer(BaseHyperlinkedModelSerializer): 'related', ) read_only_fields = ( + 'url', 'web_url', 'project', 'msgid', -- 2.37.3 _______________________________________________ Patchwork mailing list Patchwork@lists.ozlabs.org https://lists.ozlabs.org/listinfo/patchwork