mirror of
https://github.com/Hopiu/wagtail.git
synced 2026-04-19 14:31:00 +00:00
Merge pull request #1772 from kaedroho/api-tweaks2
Cleanup in WagtailAPI module
This commit is contained in:
commit
c06a2cde85
2 changed files with 16 additions and 32 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue