Merge pull request #1772 from kaedroho/api-tweaks2

Cleanup in WagtailAPI module
This commit is contained in:
Matt Westcott 2015-10-16 12:24:35 +01:00
commit c06a2cde85
2 changed files with 16 additions and 32 deletions

View file

@ -28,8 +28,8 @@ class BaseAPIEndpoint(GenericViewSet):
renderer_classes = [WagtailJSONRenderer]
pagination_class = WagtailPagination
base_serializer_class = BaseSerializer
filter_classes = []
queryset = None # Set on subclasses or implement `get_queryset()`.
filter_backends = []
model = None # Set on subclass
known_query_parameters = frozenset([
'limit',
@ -44,6 +44,9 @@ class BaseAPIEndpoint(GenericViewSet):
extra_api_fields = []
name = None # Set on subclass.
def get_queryset(self):
return self.model.objects.all().order_by('id')
def listing_view(self, request):
queryset = self.get_queryset()
self.check_query_parameters(queryset)
@ -134,20 +137,16 @@ class BaseAPIEndpoint(GenericViewSet):
"""
The serialization context differs between listing and detail views.
"""
request = self.request
if self.action == 'listing_view':
return {
'request': request,
'view': self,
}
return {
'request': request,
context = {
'request': self.request,
'view': self,
'show_details': True
}
if self.action == 'detail_view':
context['show_details'] = True
return context
def get_renderer_context(self):
context = super(BaseAPIEndpoint, self).get_renderer_context()
context['endpoints'] = [
@ -167,10 +166,6 @@ class BaseAPIEndpoint(GenericViewSet):
url(r'^(?P<pk>\d+)/$', cls.as_view({'get': 'detail_view'}), name='detail'),
]
@classmethod
def has_model(cls, model):
return NotImplemented
class PagesAPIEndpoint(BaseAPIEndpoint):
base_serializer_class = PageSerializer
@ -188,6 +183,7 @@ class PagesAPIEndpoint(BaseAPIEndpoint):
])
extra_api_fields = ['title']
name = 'pages'
model = Page
def get_queryset(self):
request = self.request
@ -216,30 +212,18 @@ class PagesAPIEndpoint(BaseAPIEndpoint):
base = super(PagesAPIEndpoint, self).get_object()
return base.specific
@classmethod
def has_model(cls, model):
return issubclass(model, Page)
class ImagesAPIEndpoint(BaseAPIEndpoint):
queryset = get_image_model().objects.all().order_by('id')
base_serializer_class = ImageSerializer
filter_backends = [FieldsFilter, OrderingFilter, SearchFilter]
extra_api_fields = ['title', 'tags', 'width', 'height']
name = 'images'
@classmethod
def has_model(cls, model):
return model == get_image_model()
model = get_image_model()
class DocumentsAPIEndpoint(BaseAPIEndpoint):
queryset = Document.objects.all().order_by('id')
base_serializer_class = DocumentSerializer
filter_backends = [FieldsFilter, OrderingFilter, SearchFilter]
extra_api_fields = ['title', 'tags']
name = 'documents'
@classmethod
def has_model(cls, model):
return model == Document
model = Document

View file

@ -16,7 +16,7 @@ def get_full_url(request, path):
def find_model_detail_view(model, endpoints):
for endpoint in endpoints:
if endpoint.has_model(model):
if issubclass(model, endpoint.model):
return 'wagtailapi_v1:%s:detail' % endpoint.name