From 20398174a8baa4560bf60268adc16955c2f83535 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 28 Sep 2015 04:05:03 -0400 Subject: [PATCH] Initial commit for top level api URLS. --- mayan/apps/rest_api/apps.py | 2 +- mayan/apps/rest_api/classes.py | 19 ++++---------- mayan/apps/rest_api/serializers.py | 27 -------------------- mayan/apps/rest_api/urls.py | 16 +++--------- mayan/apps/rest_api/views.py | 40 ++++++------------------------ 5 files changed, 17 insertions(+), 87 deletions(-) delete mode 100644 mayan/apps/rest_api/serializers.py diff --git a/mayan/apps/rest_api/apps.py b/mayan/apps/rest_api/apps.py index 5fe215def0..392537674a 100644 --- a/mayan/apps/rest_api/apps.py +++ b/mayan/apps/rest_api/apps.py @@ -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. diff --git a/mayan/apps/rest_api/classes.py b/mayan/apps/rest_api/classes.py index b8983abfa4..84f1f2a2da 100644 --- a/mayan/apps/rest_api/classes.py +++ b/mayan/apps/rest_api/classes.py @@ -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') diff --git a/mayan/apps/rest_api/serializers.py b/mayan/apps/rest_api/serializers.py deleted file mode 100644 index b6201486a7..0000000000 --- a/mayan/apps/rest_api/serializers.py +++ /dev/null @@ -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'] - ) diff --git a/mayan/apps/rest_api/urls.py b/mayan/apps/rest_api/urls.py index 4a3db93b3b..53617abd54 100644 --- a/mayan/apps/rest_api/urls.py +++ b/mayan/apps/rest_api/urls.py @@ -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\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.*)/?$', 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' ), ) diff --git a/mayan/apps/rest_api/views.py b/mayan/apps/rest_api/views.py index 538c520c99..1e782762b3 100644 --- a/mayan/apps/rest_api/views.py +++ b/mayan/apps/rest_api/views.py @@ -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)