Initial commit for top level api URLS.
This commit is contained in:
@@ -17,7 +17,7 @@ class RESTAPIApp(MayanAppConfig):
|
||||
def ready(self):
|
||||
super(RESTAPIApp, self).ready()
|
||||
|
||||
APIEndPoint(app=self, version_string='1')
|
||||
APIEndPoint(app=self, name='rest', version_string='1')
|
||||
|
||||
Package(label='Django REST framework', license_text='''
|
||||
Copyright (c) 2011-2015, Tom Christie All rights reserved.
|
||||
|
||||
@@ -30,7 +30,7 @@ class APIEndPoint(object):
|
||||
api_urls = import_string(
|
||||
'{0}.urls.api_urls'.format(app.name)
|
||||
)
|
||||
except Exception:
|
||||
except Exception as exception:
|
||||
if settings.DEBUG:
|
||||
raise
|
||||
else:
|
||||
@@ -41,23 +41,14 @@ class APIEndPoint(object):
|
||||
|
||||
self.__class__._registry[app.name] = self
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('rest_api:api-version-1-app', args=(self.app.name,))
|
||||
|
||||
@property
|
||||
def app_name(self):
|
||||
return self.app.name
|
||||
|
||||
def register_urls(self, urlpatterns):
|
||||
from .urls import version_1_urlpatterns
|
||||
endpoint_urls = patterns(
|
||||
from .urls import urlpatterns as app_urls
|
||||
|
||||
app_urls += patterns(
|
||||
'',
|
||||
url(r'^%s/' % self.app.name, include(urlpatterns)),
|
||||
url(r'^%s/' % (self.name or self.app.name), include(urlpatterns)),
|
||||
)
|
||||
version_1_urlpatterns += endpoint_urls
|
||||
|
||||
|
||||
class APIVersion(object):
|
||||
def __init__(self):
|
||||
self.version_string = '1'
|
||||
self.url = reverse('rest_api:api-version-1')
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from rest_framework import serializers
|
||||
from rest_framework.reverse import reverse
|
||||
|
||||
|
||||
class APIVersionSerializer(serializers.Serializer):
|
||||
url = serializers.SerializerMethodField()
|
||||
version_string = serializers.CharField()
|
||||
|
||||
def get_url(self, instance):
|
||||
return reverse(
|
||||
'rest_api:api-version-1', format=self.context['format'],
|
||||
request=self.context['request']
|
||||
)
|
||||
|
||||
|
||||
class APIAppSerializer(serializers.Serializer):
|
||||
app_name = serializers.CharField()
|
||||
url = serializers.SerializerMethodField()
|
||||
version_string = serializers.CharField()
|
||||
|
||||
def get_url(self, instance):
|
||||
return reverse(
|
||||
'rest_api:api-version-1-app', args=(instance.app.name,),
|
||||
format=self.context['format'], request=self.context['request']
|
||||
)
|
||||
@@ -2,27 +2,19 @@ from __future__ import unicode_literals
|
||||
|
||||
from django.conf.urls import include, patterns, url
|
||||
|
||||
from .views import APIBase, APIVersionView, APIAppView, BrowseableObtainAuthToken
|
||||
from .views import APIBase, APIAppView, BrowseableObtainAuthToken
|
||||
|
||||
version_1_urlpatterns = patterns(
|
||||
'',
|
||||
url(r'^$', APIVersionView.as_view(), name='api-version-1'),
|
||||
url(
|
||||
r'^(?P<app_name>\w+)/$', APIAppView.as_view(),
|
||||
name='api-version-1-app'
|
||||
),
|
||||
)
|
||||
|
||||
urlpatterns = patterns(
|
||||
'',
|
||||
url(r'^$', APIBase.as_view(), name='api-root'),
|
||||
url(r'^v1/', include(version_1_urlpatterns)),
|
||||
)
|
||||
|
||||
api_urls = patterns(
|
||||
'',
|
||||
url(r'^$', APIBase.as_view(), name='api-root'),
|
||||
url(r'^api/(?P<path>.*)/?$', APIAppView.as_view(), name='api-app'),
|
||||
url(
|
||||
r'^auth/token/obtain/', BrowseableObtainAuthToken.as_view(),
|
||||
r'^auth/token/obtain/$', BrowseableObtainAuthToken.as_view(),
|
||||
name='auth_token_obtain'
|
||||
),
|
||||
)
|
||||
|
||||
@@ -1,54 +1,28 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import logging
|
||||
|
||||
from rest_framework import generics, renderers
|
||||
from rest_framework.authtoken.views import ObtainAuthToken
|
||||
|
||||
from .classes import APIVersion, APIEndPoint
|
||||
from .serializers import APIAppSerializer, APIVersionSerializer
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
registered_version_1_endpoints = [
|
||||
]
|
||||
from rest_framework_swagger.views import SwaggerApiView, SwaggerResourcesView
|
||||
|
||||
|
||||
class APIBase(generics.RetrieveAPIView):
|
||||
class APIBase(SwaggerResourcesView):
|
||||
"""
|
||||
Main entry point of the API.
|
||||
"""
|
||||
|
||||
serializer_class = APIVersionSerializer
|
||||
|
||||
def get_object(self):
|
||||
return APIVersion()
|
||||
renderer_classes = (renderers.BrowsableAPIRenderer, renderers.JSONRenderer)
|
||||
|
||||
|
||||
class APIVersionView(generics.ListAPIView):
|
||||
"""
|
||||
API version entry points.
|
||||
"""
|
||||
|
||||
serializer_class = APIAppSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
return APIEndPoint.get_all()
|
||||
|
||||
|
||||
class APIAppView(generics.RetrieveAPIView):
|
||||
class APIAppView(SwaggerApiView):
|
||||
"""
|
||||
Entry points of the selected app.
|
||||
"""
|
||||
|
||||
serializer_class = APIAppSerializer
|
||||
|
||||
def get_object(self):
|
||||
return APIEndPoint.get(self.kwargs['app_name'])
|
||||
renderer_classes = (renderers.BrowsableAPIRenderer, renderers.JSONRenderer)
|
||||
|
||||
|
||||
class BrowseableObtainAuthToken(ObtainAuthToken):
|
||||
"""
|
||||
Obtain an API authentication token.
|
||||
"""
|
||||
renderer_classes = (renderers.JSONRenderer, renderers.BrowsableAPIRenderer)
|
||||
|
||||
renderer_classes = (renderers.BrowsableAPIRenderer, renderers.JSONRenderer)
|
||||
|
||||
Reference in New Issue
Block a user