Initial commit for top level api URLS.

This commit is contained in:
Roberto Rosario
2015-09-28 04:05:03 -04:00
parent a7012b3f6b
commit 20398174a8
5 changed files with 17 additions and 87 deletions

View File

@@ -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.

View File

@@ -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')

View File

@@ -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']
)

View File

@@ -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'
),
)

View File

@@ -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)