schema:
type: array
items:
- $ref: '#/components/schemas/CoverLetterList'
+ $ref: '#/components/schemas/CoverList'
tags:
- covers
/api/covers/{id}/:
content:
application/json:
schema:
- $ref: '#/components/schemas/CoverLetterDetail'
+ $ref: '#/components/schemas/CoverDetail'
'404':
description: Not found
content:
additionalProperties:
type: string
readOnly: true
- CoverLetterList:
+ CoverList:
type: object
properties:
id:
type: string
format: uri
readOnly: true
- CoverLetterDetail:
+ CoverDetail:
allOf:
- - $ref: '#/components/schemas/CoverLetterList'
+ - $ref: '#/components/schemas/CoverList'
- properties:
headers:
title: Headers
payload:
properties:
cover:
- $ref: '#/components/schemas/CoverLetterEmbedded'
+ $ref: '#/components/schemas/CoverEmbedded'
EventPatchCreated:
allOf:
- $ref: '#/components/schemas/EventBase'
format: uri
readOnly: true
cover_letter:
- $ref: '#/components/schemas/CoverLetterEmbedded'
+ $ref: '#/components/schemas/CoverEmbedded'
patches:
title: Patches
type: array
maxLength: 255
minLength: 1
readOnly: true
- CoverLetterEmbedded:
+ CoverEmbedded:
type: object
properties:
id:
schema:
type: array
items:
- $ref: '#/components/schemas/CoverLetterList'
+ $ref: '#/components/schemas/CoverList'
tags:
- covers
/api/{{ version_url }}covers/{id}/:
content:
application/json:
schema:
- $ref: '#/components/schemas/CoverLetterDetail'
+ $ref: '#/components/schemas/CoverDetail'
'404':
description: Not found
content:
additionalProperties:
type: string
readOnly: true
- CoverLetterList:
+ CoverList:
type: object
properties:
id:
format: uri
readOnly: true
{% endif %}
- CoverLetterDetail:
+ CoverDetail:
allOf:
- - $ref: '#/components/schemas/CoverLetterList'
+ - $ref: '#/components/schemas/CoverList'
- properties:
headers:
title: Headers
payload:
properties:
cover:
- $ref: '#/components/schemas/CoverLetterEmbedded'
+ $ref: '#/components/schemas/CoverEmbedded'
EventPatchCreated:
allOf:
- $ref: '#/components/schemas/EventBase'
format: uri
readOnly: true
cover_letter:
- $ref: '#/components/schemas/CoverLetterEmbedded'
+ $ref: '#/components/schemas/CoverEmbedded'
patches:
title: Patches
type: array
maxLength: 255
minLength: 1
readOnly: true
- CoverLetterEmbedded:
+ CoverEmbedded:
type: object
properties:
id:
schema:
type: array
items:
- $ref: '#/components/schemas/CoverLetterList'
+ $ref: '#/components/schemas/CoverList'
tags:
- covers
/api/1.0/covers/{id}/:
content:
application/json:
schema:
- $ref: '#/components/schemas/CoverLetterDetail'
+ $ref: '#/components/schemas/CoverDetail'
'404':
description: Not found
content:
additionalProperties:
type: string
readOnly: true
- CoverLetterList:
+ CoverList:
type: object
properties:
id:
items:
$ref: '#/components/schemas/SeriesEmbedded'
readOnly: true
- CoverLetterDetail:
+ CoverDetail:
allOf:
- - $ref: '#/components/schemas/CoverLetterList'
+ - $ref: '#/components/schemas/CoverList'
- properties:
headers:
title: Headers
payload:
properties:
cover:
- $ref: '#/components/schemas/CoverLetterEmbedded'
+ $ref: '#/components/schemas/CoverEmbedded'
EventPatchCreated:
allOf:
- $ref: '#/components/schemas/EventBase'
format: uri
readOnly: true
cover_letter:
- $ref: '#/components/schemas/CoverLetterEmbedded'
+ $ref: '#/components/schemas/CoverEmbedded'
patches:
title: Patches
type: array
maxLength: 255
minLength: 1
readOnly: true
- CoverLetterEmbedded:
+ CoverEmbedded:
type: object
properties:
id:
schema:
type: array
items:
- $ref: '#/components/schemas/CoverLetterList'
+ $ref: '#/components/schemas/CoverList'
tags:
- covers
/api/1.1/covers/{id}/:
content:
application/json:
schema:
- $ref: '#/components/schemas/CoverLetterDetail'
+ $ref: '#/components/schemas/CoverDetail'
'404':
description: Not found
content:
additionalProperties:
type: string
readOnly: true
- CoverLetterList:
+ CoverList:
type: object
properties:
id:
type: string
format: uri
readOnly: true
- CoverLetterDetail:
+ CoverDetail:
allOf:
- - $ref: '#/components/schemas/CoverLetterList'
+ - $ref: '#/components/schemas/CoverList'
- properties:
headers:
title: Headers
payload:
properties:
cover:
- $ref: '#/components/schemas/CoverLetterEmbedded'
+ $ref: '#/components/schemas/CoverEmbedded'
EventPatchCreated:
allOf:
- $ref: '#/components/schemas/EventBase'
format: uri
readOnly: true
cover_letter:
- $ref: '#/components/schemas/CoverLetterEmbedded'
+ $ref: '#/components/schemas/CoverEmbedded'
patches:
title: Patches
type: array
maxLength: 255
minLength: 1
readOnly: true
- CoverLetterEmbedded:
+ CoverEmbedded:
type: object
properties:
id:
schema:
type: array
items:
- $ref: '#/components/schemas/CoverLetterList'
+ $ref: '#/components/schemas/CoverList'
tags:
- covers
/api/1.2/covers/{id}/:
content:
application/json:
schema:
- $ref: '#/components/schemas/CoverLetterDetail'
+ $ref: '#/components/schemas/CoverDetail'
'404':
description: Not found
content:
additionalProperties:
type: string
readOnly: true
- CoverLetterList:
+ CoverList:
type: object
properties:
id:
type: string
format: uri
readOnly: true
- CoverLetterDetail:
+ CoverDetail:
allOf:
- - $ref: '#/components/schemas/CoverLetterList'
+ - $ref: '#/components/schemas/CoverList'
- properties:
headers:
title: Headers
payload:
properties:
cover:
- $ref: '#/components/schemas/CoverLetterEmbedded'
+ $ref: '#/components/schemas/CoverEmbedded'
EventPatchCreated:
allOf:
- $ref: '#/components/schemas/EventBase'
format: uri
readOnly: true
cover_letter:
- $ref: '#/components/schemas/CoverLetterEmbedded'
+ $ref: '#/components/schemas/CoverEmbedded'
patches:
title: Patches
type: array
maxLength: 255
minLength: 1
readOnly: true
- CoverLetterEmbedded:
+ CoverEmbedded:
type: object
properties:
id:
from rest_framework.serializers import SerializerMethodField
from patchwork.api.base import BaseHyperlinkedModelSerializer
-from patchwork.api.filters import CoverLetterFilterSet
+from patchwork.api.filters import CoverFilterSet
from patchwork.api.embedded import PersonSerializer
from patchwork.api.embedded import ProjectSerializer
from patchwork.api.embedded import SeriesSerializer
from patchwork.models import CoverLetter
-class CoverLetterListSerializer(BaseHyperlinkedModelSerializer):
+class CoverListSerializer(BaseHyperlinkedModelSerializer):
web_url = SerializerMethodField()
project = ProjectSerializer(read_only=True)
# NOTE(stephenfin): This is here to ensure our API looks the same even
# after we changed the series-patch relationship from M:N to 1:N. It
# will be removed in API v2
- data = super(CoverLetterListSerializer, self).to_representation(
+ data = super(CoverListSerializer, self).to_representation(
instance)
data['series'] = [data['series']] if data['series'] else []
return data
}
-class CoverLetterDetailSerializer(CoverLetterListSerializer):
+class CoverDetailSerializer(CoverListSerializer):
headers = SerializerMethodField()
class Meta:
model = CoverLetter
- fields = CoverLetterListSerializer.Meta.fields + (
+ fields = CoverListSerializer.Meta.fields + (
'headers', 'content')
read_only_fields = fields
- extra_kwargs = CoverLetterListSerializer.Meta.extra_kwargs
- versioned_fields = CoverLetterListSerializer.Meta.versioned_fields
+ extra_kwargs = CoverListSerializer.Meta.extra_kwargs
+ versioned_fields = CoverListSerializer.Meta.versioned_fields
-class CoverLetterList(ListAPIView):
+class CoverList(ListAPIView):
"""List cover letters."""
- serializer_class = CoverLetterListSerializer
- filter_class = filterset_class = CoverLetterFilterSet
+ serializer_class = CoverListSerializer
+ filter_class = filterset_class = CoverFilterSet
search_fields = ('name',)
ordering_fields = ('id', 'name', 'date', 'submitter')
ordering = 'id'
.defer('content', 'headers')
-class CoverLetterDetail(RetrieveAPIView):
+class CoverDetail(RetrieveAPIView):
"""Show a cover letter."""
- serializer_class = CoverLetterDetailSerializer
+ serializer_class = CoverDetailSerializer
def get_queryset(self):
return CoverLetter.objects.all()\
}
-class CoverLetterSerializer(SerializedRelatedField):
+class CoverSerializer(SerializedRelatedField):
class _Serializer(MboxMixin, WebURLMixin, BaseHyperlinkedModelSerializer):
from rest_framework.serializers import SlugRelatedField
from patchwork.api.embedded import CheckSerializer
-from patchwork.api.embedded import CoverLetterSerializer
+from patchwork.api.embedded import CoverSerializer
from patchwork.api.embedded import PatchSerializer
from patchwork.api.embedded import PatchRelationSerializer
from patchwork.api.embedded import ProjectSerializer
actor = UserSerializer()
patch = PatchSerializer(read_only=True)
series = SeriesSerializer(read_only=True)
- cover = CoverLetterSerializer(read_only=True)
+ cover = CoverSerializer(read_only=True)
previous_state = SlugRelatedField(slug_field='slug', read_only=True)
current_state = SlugRelatedField(slug_field='slug', read_only=True)
previous_delegate = UserSerializer()
return queryset.filter(**{name: '<' + value + '>'})
-class CoverLetterFilterSet(TimestampMixin, BaseFilterSet):
+class CoverFilterSet(TimestampMixin, BaseFilterSet):
project = ProjectFilter(queryset=Project.objects.all(), distinct=False)
# NOTE(stephenfin): We disable the select-based HTML widgets for these
from patchwork.api.base import BaseHyperlinkedModelSerializer
from patchwork.api.base import PatchworkPermission
from patchwork.api.filters import SeriesFilterSet
-from patchwork.api.embedded import CoverLetterSerializer
+from patchwork.api.embedded import CoverSerializer
from patchwork.api.embedded import PatchSerializer
from patchwork.api.embedded import PersonSerializer
from patchwork.api.embedded import ProjectSerializer
project = ProjectSerializer(read_only=True)
submitter = PersonSerializer(read_only=True)
mbox = SerializerMethodField()
- cover_letter = CoverLetterSerializer(read_only=True)
+ cover_letter = CoverSerializer(read_only=True)
patches = PatchSerializer(read_only=True, many=True)
def get_web_url(self, instance):
@unittest.skipUnless(settings.ENABLE_REST_API, 'requires ENABLE_REST_API')
-class TestCoverLetterAPI(utils.APITestCase):
+class TestCoverAPI(utils.APITestCase):
fixtures = ['default_tags']
@staticmethod
from patchwork.tests.utils import create_project
-class CoverLetterViewTest(TestCase):
+class CoverViewTest(TestCase):
def test_redirect(self):
patch = create_patch()
api_person_views.PersonDetail.as_view(),
name='api-person-detail'),
url(r'^covers/$',
- api_cover_views.CoverLetterList.as_view(),
+ api_cover_views.CoverList.as_view(),
name='api-cover-list'),
url(r'^covers/(?P<pk>[^/]+)/$',
- api_cover_views.CoverLetterDetail.as_view(),
+ api_cover_views.CoverDetail.as_view(),
name='api-cover-detail'),
url(r'^patches/$',
api_patch_views.PatchList.as_view(),