diff --git a/mayan/apps/rest_api/api_views.py b/mayan/apps/rest_api/api_views.py index 32048409a2..e14b2b9da3 100644 --- a/mayan/apps/rest_api/api_views.py +++ b/mayan/apps/rest_api/api_views.py @@ -1,7 +1,29 @@ from __future__ import unicode_literals -from rest_framework import generics, renderers +from rest_framework import renderers from rest_framework.authtoken.views import ObtainAuthToken +from rest_framework.views import APIView +from rest_framework.response import Response +from rest_framework.schemas.generators import EndpointEnumerator + +from .classes import Endpoint +from .serializers import EndpointSerializer + + +class APIRoot(APIView): + def get(self, request, format=None): + """ + Return a list of all users. + """ + endpoint_enumerator = EndpointEnumerator() + + endpoints = [] + for url in sorted(set([entry[0].split('/')[2] for entry in endpoint_enumerator.get_api_endpoints()])): + if url: + endpoints.append(Endpoint(label=url)) + + serializer = EndpointSerializer(endpoints, many=True) + return Response(serializer.data) class BrowseableObtainAuthToken(ObtainAuthToken): diff --git a/mayan/apps/rest_api/classes.py b/mayan/apps/rest_api/classes.py new file mode 100644 index 0000000000..4cb84795a8 --- /dev/null +++ b/mayan/apps/rest_api/classes.py @@ -0,0 +1,10 @@ +from __future__ import unicode_literals + + +class Endpoint(object): + def __init__(self, label): + self.label = label + + @property + def url(self): + return '/api/{}/'.format(self.label) diff --git a/mayan/apps/rest_api/serializers.py b/mayan/apps/rest_api/serializers.py new file mode 100644 index 0000000000..041fc524a4 --- /dev/null +++ b/mayan/apps/rest_api/serializers.py @@ -0,0 +1,8 @@ +from __future__ import unicode_literals + +from rest_framework import serializers + + +class EndpointSerializer(serializers.Serializer): + label = serializers.CharField(read_only=True) + url = serializers.URLField(read_only=True) diff --git a/mayan/apps/rest_api/urls.py b/mayan/apps/rest_api/urls.py index 0da1ff5c67..33a3a7bed8 100644 --- a/mayan/apps/rest_api/urls.py +++ b/mayan/apps/rest_api/urls.py @@ -2,10 +2,11 @@ from __future__ import unicode_literals from django.conf.urls import include, url -from .api_views import BrowseableObtainAuthToken +from .api_views import APIRoot, BrowseableObtainAuthToken api_urls = [ + url(r'^$', APIRoot.as_view(), name='api_root'), url( r'^auth/token/obtain/$', BrowseableObtainAuthToken.as_view(), name='auth_token_obtain'