Rename Endpoints to ViewSets

For consistency with Django REST Framework
pull/5677/head
Karl Hobley 2019-11-05 11:30:43 +00:00 zatwierdzone przez Karl Hobley
rodzic 0dbe25c512
commit 16d5b5c99e
11 zmienionych plików z 54 dodań i 54 usunięć

Wyświetl plik

@ -45,13 +45,13 @@ can hook into the rest of your project.
Wagtail provides three endpoint classes you can use: Wagtail provides three endpoint classes you can use:
- Pages :class:`wagtail.api.v2.endpoints.PagesAPIEndpoint` - Pages :class:`wagtail.api.v2.endpoints.PagesAPIViewSet`
- Images :class:`wagtail.images.api.v2.endpoints.ImagesAPIEndpoint` - Images :class:`wagtail.images.api.v2.endpoints.ImagesAPIViewSet`
- Documents :class:`wagtail.documents.api.v2.endpoints.DocumentsAPIEndpoint` - Documents :class:`wagtail.documents.api.v2.endpoints.DocumentsAPIViewSet`
You can subclass any of these endpoint classes to customise their functionality. You can subclass any of these endpoint classes to customise their functionality.
Additionally, there is a base endpoint class you can use for adding different Additionally, there is a base endpoint class you can use for adding different
content types to the API: :class:`wagtail.api.v2.endpoints.BaseAPIEndpoint` content types to the API: :class:`wagtail.api.v2.endpoints.BaseAPIViewSet`
For this example, we will create an API that includes all three builtin content For this example, we will create an API that includes all three builtin content
types in their default configuration: types in their default configuration:
@ -60,10 +60,10 @@ types in their default configuration:
# api.py # api.py
from wagtail.api.v2.endpoints import PagesAPIEndpoint from wagtail.api.v2.endpoints import PagesAPIViewSet
from wagtail.api.v2.router import WagtailAPIRouter from wagtail.api.v2.router import WagtailAPIRouter
from wagtail.images.api.v2.endpoints import ImagesAPIEndpoint from wagtail.images.api.v2.endpoints import ImagesAPIViewSet
from wagtail.documents.api.v2.endpoints import DocumentsAPIEndpoint from wagtail.documents.api.v2.endpoints import DocumentsAPIViewSet
# Create the router. "wagtailapi" is the URL namespace # Create the router. "wagtailapi" is the URL namespace
api_router = WagtailAPIRouter('wagtailapi') api_router = WagtailAPIRouter('wagtailapi')
@ -72,9 +72,9 @@ types in their default configuration:
# The first parameter is the name of the endpoint (eg. pages, images). This # The first parameter is the name of the endpoint (eg. pages, images). This
# is used in the URL of the endpoint # is used in the URL of the endpoint
# The second parameter is the endpoint class that handles the requests # The second parameter is the endpoint class that handles the requests
api_router.register_endpoint('pages', PagesAPIEndpoint) api_router.register_endpoint('pages', PagesAPIViewSet)
api_router.register_endpoint('images', ImagesAPIEndpoint) api_router.register_endpoint('images', ImagesAPIViewSet)
api_router.register_endpoint('documents', DocumentsAPIEndpoint) api_router.register_endpoint('documents', DocumentsAPIViewSet)
Next, register the URLs so Django can route requests into the API: Next, register the URLs so Django can route requests into the API:

Wyświetl plik

@ -2,7 +2,7 @@ from collections import OrderedDict
from rest_framework.authentication import SessionAuthentication from rest_framework.authentication import SessionAuthentication
from wagtail.api.v2.endpoints import PagesAPIEndpoint from wagtail.api.v2.endpoints import PagesAPIViewSet
from wagtail.api.v2.filters import ( from wagtail.api.v2.filters import (
ChildOfFilter, DescendantOfFilter, FieldsFilter, ForExplorerFilter, OrderingFilter, ChildOfFilter, DescendantOfFilter, FieldsFilter, ForExplorerFilter, OrderingFilter,
SearchFilter) SearchFilter)
@ -13,7 +13,7 @@ from .filters import HasChildrenFilter
from .serializers import AdminPageSerializer from .serializers import AdminPageSerializer
class PagesAdminAPIEndpoint(PagesAPIEndpoint): class PagesAdminAPIViewSet(PagesAPIViewSet):
base_serializer_class = AdminPageSerializer base_serializer_class = AdminPageSerializer
authentication_classes = [SessionAuthentication] authentication_classes = [SessionAuthentication]
@ -29,7 +29,7 @@ class PagesAdminAPIEndpoint(PagesAPIEndpoint):
SearchFilter, SearchFilter,
] ]
meta_fields = PagesAPIEndpoint.meta_fields + [ meta_fields = PagesAPIViewSet.meta_fields + [
'latest_revision_created_at', 'latest_revision_created_at',
'status', 'status',
'children', 'children',
@ -38,11 +38,11 @@ class PagesAdminAPIEndpoint(PagesAPIEndpoint):
'ancestors', 'ancestors',
] ]
body_fields = PagesAPIEndpoint.body_fields + [ body_fields = PagesAPIViewSet.body_fields + [
'admin_display_title', 'admin_display_title',
] ]
listing_default_fields = PagesAPIEndpoint.listing_default_fields + [ listing_default_fields = PagesAPIViewSet.listing_default_fields + [
'latest_revision_created_at', 'latest_revision_created_at',
'status', 'status',
'children', 'children',
@ -52,7 +52,7 @@ class PagesAdminAPIEndpoint(PagesAPIEndpoint):
# Allow the parent field to appear on listings # Allow the parent field to appear on listings
detail_only_fields = [] detail_only_fields = []
known_query_parameters = PagesAPIEndpoint.known_query_parameters.union([ known_query_parameters = PagesAPIViewSet.known_query_parameters.union([
'for_explorer', 'for_explorer',
'has_children' 'has_children'
]) ])

Wyświetl plik

@ -3,10 +3,10 @@ from django.conf.urls import url
from wagtail.api.v2.router import WagtailAPIRouter from wagtail.api.v2.router import WagtailAPIRouter
from wagtail.core import hooks from wagtail.core import hooks
from .endpoints import PagesAdminAPIEndpoint from .endpoints import PagesAdminAPIViewSet
admin_api = WagtailAPIRouter('wagtailadmin_api_v1') admin_api = WagtailAPIRouter('wagtailadmin_api_v1')
admin_api.register_endpoint('pages', PagesAdminAPIEndpoint) admin_api.register_endpoint('pages', PagesAdminAPIViewSet)
for fn in hooks.get_hooks('construct_admin_api'): for fn in hooks.get_hooks('construct_admin_api'):
fn(admin_api) fn(admin_api)

Wyświetl plik

@ -24,7 +24,7 @@ from .utils import (
parse_fields_parameter) parse_fields_parameter)
class BaseAPIEndpoint(GenericViewSet): class BaseAPIViewSet(GenericViewSet):
renderer_classes = [JSONRenderer, BrowsableAPIRenderer] renderer_classes = [JSONRenderer, BrowsableAPIRenderer]
pagination_class = WagtailPagination pagination_class = WagtailPagination
@ -269,7 +269,7 @@ class BaseAPIEndpoint(GenericViewSet):
# Get a serializer class for the related object # Get a serializer class for the related object
child_model = django_field.related_model child_model = django_field.related_model
child_endpoint_class = router.get_model_endpoint(child_model) child_endpoint_class = router.get_model_endpoint(child_model)
child_endpoint_class = child_endpoint_class[1] if child_endpoint_class else BaseAPIEndpoint child_endpoint_class = child_endpoint_class[1] if child_endpoint_class else BaseAPIViewSet
child_serializer_classes[field_name] = child_endpoint_class._get_serializer_class(router, child_model, child_sub_fields, nested=True) child_serializer_classes[field_name] = child_endpoint_class._get_serializer_class(router, child_model, child_sub_fields, nested=True)
else: else:
@ -362,7 +362,7 @@ class BaseAPIEndpoint(GenericViewSet):
return reverse(url_name, args=(pk, )) return reverse(url_name, args=(pk, ))
class PagesAPIEndpoint(BaseAPIEndpoint): class PagesAPIViewSet(BaseAPIViewSet):
base_serializer_class = PageSerializer base_serializer_class = PageSerializer
filter_backends = [ filter_backends = [
FieldsFilter, FieldsFilter,
@ -371,15 +371,15 @@ class PagesAPIEndpoint(BaseAPIEndpoint):
OrderingFilter, OrderingFilter,
SearchFilter SearchFilter
] ]
known_query_parameters = BaseAPIEndpoint.known_query_parameters.union([ known_query_parameters = BaseAPIViewSet.known_query_parameters.union([
'type', 'type',
'child_of', 'child_of',
'descendant_of', 'descendant_of',
]) ])
body_fields = BaseAPIEndpoint.body_fields + [ body_fields = BaseAPIViewSet.body_fields + [
'title', 'title',
] ]
meta_fields = BaseAPIEndpoint.meta_fields + [ meta_fields = BaseAPIViewSet.meta_fields + [
'html_url', 'html_url',
'slug', 'slug',
'show_in_menus', 'show_in_menus',
@ -388,13 +388,13 @@ class PagesAPIEndpoint(BaseAPIEndpoint):
'first_published_at', 'first_published_at',
'parent', 'parent',
] ]
listing_default_fields = BaseAPIEndpoint.listing_default_fields + [ listing_default_fields = BaseAPIViewSet.listing_default_fields + [
'title', 'title',
'html_url', 'html_url',
'slug', 'slug',
'first_published_at', 'first_published_at',
] ]
nested_default_fields = BaseAPIEndpoint.nested_default_fields + [ nested_default_fields = BaseAPIViewSet.nested_default_fields + [
'title', 'title',
] ]
detail_only_fields = ['parent'] detail_only_fields = ['parent']

Wyświetl plik

@ -1,5 +1,5 @@
from ..v2.endpoints import DocumentsAPIEndpoint from ..v2.endpoints import DocumentsAPIViewSet
class DocumentsAdminAPIEndpoint(DocumentsAPIEndpoint): class DocumentsAdminAPIViewSet(DocumentsAPIViewSet):
pass pass

Wyświetl plik

@ -1,16 +1,16 @@
from wagtail.api.v2.endpoints import BaseAPIEndpoint from wagtail.api.v2.endpoints import BaseAPIViewSet
from wagtail.api.v2.filters import FieldsFilter, OrderingFilter, SearchFilter from wagtail.api.v2.filters import FieldsFilter, OrderingFilter, SearchFilter
from ... import get_document_model from ... import get_document_model
from .serializers import DocumentSerializer from .serializers import DocumentSerializer
class DocumentsAPIEndpoint(BaseAPIEndpoint): class DocumentsAPIViewSet(BaseAPIViewSet):
base_serializer_class = DocumentSerializer base_serializer_class = DocumentSerializer
filter_backends = [FieldsFilter, OrderingFilter, SearchFilter] filter_backends = [FieldsFilter, OrderingFilter, SearchFilter]
body_fields = BaseAPIEndpoint.body_fields + ['title'] body_fields = BaseAPIViewSet.body_fields + ['title']
meta_fields = BaseAPIEndpoint.meta_fields + ['tags', 'download_url'] meta_fields = BaseAPIViewSet.meta_fields + ['tags', 'download_url']
listing_default_fields = BaseAPIEndpoint.listing_default_fields + ['title', 'tags', 'download_url'] listing_default_fields = BaseAPIViewSet.listing_default_fields + ['title', 'tags', 'download_url']
nested_default_fields = BaseAPIEndpoint.nested_default_fields + ['title', 'download_url'] nested_default_fields = BaseAPIViewSet.nested_default_fields + ['title', 'download_url']
name = 'documents' name = 'documents'
model = get_document_model() model = get_document_model()

Wyświetl plik

@ -17,7 +17,7 @@ from wagtail.core import hooks
from wagtail.core.models import BaseViewRestriction from wagtail.core.models import BaseViewRestriction
from wagtail.core.wagtail_hooks import require_wagtail_login from wagtail.core.wagtail_hooks import require_wagtail_login
from wagtail.documents import admin_urls, get_document_model from wagtail.documents import admin_urls, get_document_model
from wagtail.documents.api.admin.endpoints import DocumentsAdminAPIEndpoint from wagtail.documents.api.admin.endpoints import DocumentsAdminAPIViewSet
from wagtail.documents.forms import GroupDocumentPermissionFormSet from wagtail.documents.forms import GroupDocumentPermissionFormSet
from wagtail.documents.permissions import permission_policy from wagtail.documents.permissions import permission_policy
from wagtail.documents.rich_text import DocumentLinkHandler from wagtail.documents.rich_text import DocumentLinkHandler
@ -34,7 +34,7 @@ def register_admin_urls():
@hooks.register('construct_admin_api') @hooks.register('construct_admin_api')
def construct_admin_api(router): def construct_admin_api(router):
router.register_endpoint('documents', DocumentsAdminAPIEndpoint) router.register_endpoint('documents', DocumentsAdminAPIViewSet)
class DocumentsMenuItem(MenuItem): class DocumentsMenuItem(MenuItem):

Wyświetl plik

@ -1,15 +1,15 @@
from ..v2.endpoints import ImagesAPIEndpoint from ..v2.endpoints import ImagesAPIViewSet
from .serializers import AdminImageSerializer from .serializers import AdminImageSerializer
class ImagesAdminAPIEndpoint(ImagesAPIEndpoint): class ImagesAdminAPIViewSet(ImagesAPIViewSet):
base_serializer_class = AdminImageSerializer base_serializer_class = AdminImageSerializer
body_fields = ImagesAPIEndpoint.body_fields + [ body_fields = ImagesAPIViewSet.body_fields + [
'thumbnail', 'thumbnail',
] ]
listing_default_fields = ImagesAPIEndpoint.listing_default_fields + [ listing_default_fields = ImagesAPIViewSet.listing_default_fields + [
'width', 'width',
'height', 'height',
'thumbnail', 'thumbnail',

Wyświetl plik

@ -1,16 +1,16 @@
from wagtail.api.v2.endpoints import BaseAPIEndpoint from wagtail.api.v2.endpoints import BaseAPIViewSet
from wagtail.api.v2.filters import FieldsFilter, OrderingFilter, SearchFilter from wagtail.api.v2.filters import FieldsFilter, OrderingFilter, SearchFilter
from ... import get_image_model from ... import get_image_model
from .serializers import ImageSerializer from .serializers import ImageSerializer
class ImagesAPIEndpoint(BaseAPIEndpoint): class ImagesAPIViewSet(BaseAPIViewSet):
base_serializer_class = ImageSerializer base_serializer_class = ImageSerializer
filter_backends = [FieldsFilter, OrderingFilter, SearchFilter] filter_backends = [FieldsFilter, OrderingFilter, SearchFilter]
body_fields = BaseAPIEndpoint.body_fields + ['title', 'width', 'height'] body_fields = BaseAPIViewSet.body_fields + ['title', 'width', 'height']
meta_fields = BaseAPIEndpoint.meta_fields + ['tags', 'download_url'] meta_fields = BaseAPIViewSet.meta_fields + ['tags', 'download_url']
listing_default_fields = BaseAPIEndpoint.listing_default_fields + ['title', 'tags', 'download_url'] listing_default_fields = BaseAPIViewSet.listing_default_fields + ['title', 'tags', 'download_url']
nested_default_fields = BaseAPIEndpoint.nested_default_fields + ['title', 'download_url'] nested_default_fields = BaseAPIViewSet.nested_default_fields + ['title', 'download_url']
name = 'images' name = 'images'
model = get_image_model() model = get_image_model()

Wyświetl plik

@ -13,7 +13,7 @@ from wagtail.admin.site_summary import SummaryItem
from wagtail.admin.staticfiles import versioned_static from wagtail.admin.staticfiles import versioned_static
from wagtail.core import hooks from wagtail.core import hooks
from wagtail.images import admin_urls, get_image_model, image_operations from wagtail.images import admin_urls, get_image_model, image_operations
from wagtail.images.api.admin.endpoints import ImagesAdminAPIEndpoint from wagtail.images.api.admin.endpoints import ImagesAdminAPIViewSet
from wagtail.images.forms import GroupImagePermissionFormSet from wagtail.images.forms import GroupImagePermissionFormSet
from wagtail.images.permissions import permission_policy from wagtail.images.permissions import permission_policy
from wagtail.images.rich_text import ImageEmbedHandler from wagtail.images.rich_text import ImageEmbedHandler
@ -30,7 +30,7 @@ def register_admin_urls():
@hooks.register('construct_admin_api') @hooks.register('construct_admin_api')
def construct_admin_api(router): def construct_admin_api(router):
router.register_endpoint('images', ImagesAdminAPIEndpoint) router.register_endpoint('images', ImagesAdminAPIViewSet)
class ImagesMenuItem(MenuItem): class ImagesMenuItem(MenuItem):

Wyświetl plik

@ -2,23 +2,23 @@ from django.conf.urls import include, url
from django.http import HttpResponse from django.http import HttpResponse
from wagtail.admin import urls as wagtailadmin_urls from wagtail.admin import urls as wagtailadmin_urls
from wagtail.api.v2.endpoints import PagesAPIEndpoint from wagtail.api.v2.endpoints import PagesAPIViewSet
from wagtail.api.v2.router import WagtailAPIRouter from wagtail.api.v2.router import WagtailAPIRouter
from wagtail.contrib.sitemaps import views as sitemaps_views from wagtail.contrib.sitemaps import views as sitemaps_views
from wagtail.contrib.sitemaps import Sitemap from wagtail.contrib.sitemaps import Sitemap
from wagtail.core import urls as wagtail_urls from wagtail.core import urls as wagtail_urls
from wagtail.documents import urls as wagtaildocs_urls from wagtail.documents import urls as wagtaildocs_urls
from wagtail.documents.api.v2.endpoints import DocumentsAPIEndpoint from wagtail.documents.api.v2.endpoints import DocumentsAPIViewSet
from wagtail.images import urls as wagtailimages_urls from wagtail.images import urls as wagtailimages_urls
from wagtail.images.api.v2.endpoints import ImagesAPIEndpoint from wagtail.images.api.v2.endpoints import ImagesAPIViewSet
from wagtail.images.tests import urls as wagtailimages_test_urls from wagtail.images.tests import urls as wagtailimages_test_urls
from wagtail.tests.testapp import urls as testapp_urls from wagtail.tests.testapp import urls as testapp_urls
from wagtail.tests.testapp.models import EventSitemap from wagtail.tests.testapp.models import EventSitemap
api_router = WagtailAPIRouter('wagtailapi_v2') api_router = WagtailAPIRouter('wagtailapi_v2')
api_router.register_endpoint('pages', PagesAPIEndpoint) api_router.register_endpoint('pages', PagesAPIViewSet)
api_router.register_endpoint('images', ImagesAPIEndpoint) api_router.register_endpoint('images', ImagesAPIViewSet)
api_router.register_endpoint('documents', DocumentsAPIEndpoint) api_router.register_endpoint('documents', DocumentsAPIViewSet)
urlpatterns = [ urlpatterns = [