diff --git a/mayan/apps/app_registry/models.py b/mayan/apps/app_registry/models.py index 45a8a79aca..b0ec4c970d 100644 --- a/mayan/apps/app_registry/models.py +++ b/mayan/apps/app_registry/models.py @@ -9,7 +9,7 @@ from bootstrap.classes import BootstrapModel, Cleanup from navigation.api import register_top_menu from project_setup.api import register_setup from project_tools.api import register_tool -from rest_api.classes import EndPoint +from rest_api.classes import APIEndPoint logger = logging.getLogger(__name__) @@ -60,10 +60,10 @@ class App(object): logger.debug('version_0_api_services: %s' % version_0_api_services) if version_0_api_services: - endpoint = EndPoint(app_name) + api_endpoint = APIEndPoint(app_name) for service in version_0_api_services: - endpoint.add_service(**service) + api_endpoint.add_service(**service) def __unicode__(self): return unicode(self.label) diff --git a/mayan/apps/rest_api/urls.py b/mayan/apps/rest_api/urls.py index f1ce1d0d19..2e22f0d559 100644 --- a/mayan/apps/rest_api/urls.py +++ b/mayan/apps/rest_api/urls.py @@ -2,25 +2,14 @@ from __future__ import absolute_import from django.conf.urls import include, patterns, url -#from .classes import EndPoint -from .views import APIBase, Version_0, EndPointView +from .views import APIBase, Version_0, APIAppView -version_0_endpoints_urlpatterns = patterns('', +version_0_urlpatterns = patterns('', url(r'^$', Version_0.as_view(), name='api-version-0'), - url(r'^(?P\w+)$', EndPointView.as_view(), name='api-version-0-endpoint'), + url(r'^(?P\w+)$', APIAppView.as_view(), name='api-version-0-app'), ) -""" -for endpoint in EndPoint.get_all(): - endpoint_urlpatterns = patterns('') - - for service in endpoint.services: - endpoint_urlpatterns += patterns('', service['urlpattern']) - - version_0_endpoints_urlpatterns += patterns('', url(r'^%s/' % endpoint.name, include(endpoint_urlpatterns))) -""" - urlpatterns = patterns('', url(r'^$', APIBase.as_view(), name='api-root'), - url(r'^v0/', include(version_0_endpoints_urlpatterns)), + url(r'^v0/', include(version_0_urlpatterns)), ) diff --git a/mayan/apps/rest_api/views.py b/mayan/apps/rest_api/views.py index b7920b5693..27a1183a30 100644 --- a/mayan/apps/rest_api/views.py +++ b/mayan/apps/rest_api/views.py @@ -10,7 +10,7 @@ from rest_framework.generics import RetrieveAPIView from rest_framework.response import Response from rest_framework.reverse import reverse -from .classes import EndPoint +from .classes import APIEndPoint logger = logging.getLogger(__name__) @@ -19,6 +19,10 @@ registered_version_0_endpoints = [ class APIBase(generics.GenericAPIView): + """ + Main entry point of the API. + """ + def get(self, request, format=None): return Response([ {'name': 'Version 0', 'url': reverse('api-version-0', request=request, format=format)} @@ -26,27 +30,35 @@ class APIBase(generics.GenericAPIView): class Version_0(generics.GenericAPIView): + """ + API version 0 entry points. + """ + def get(self, request, format=None): return Response({ - 'endpoints': [ - {'name': unicode(endpoint), 'url': reverse('api-version-0-endpoint', args=[unicode(endpoint)], request=request, format=format)} for endpoint in EndPoint.get_all() + 'apps': [ + {'name': unicode(endpoint), 'url': reverse('api-version-0-app', args=[unicode(endpoint)], request=request, format=format)} for endpoint in APIEndPoint.get_all() ], }) -class EndPointView(generics.GenericAPIView): - def get(self, request, endpoint_name, format=None): + +class APIAppView(generics.GenericAPIView): + """ + Entry points of the selected app. + """ + + def get(self, request, app_name, format=None): result = [] - endpoint = EndPoint.get(endpoint_name) - for service in endpoint.services: + api_app = APIEndPoint.get(app_name) + for endpoint in api_app.endpoints: result.append( { - 'description': service['description'], - 'name': service['urlpattern'].name, - 'url': service['url'], + 'description': endpoint['description'], + 'url': reverse(endpoint['view_name'], request=request, format=format), } ) return Response({ - 'services': result + 'endpoints': result }) diff --git a/mayan/apps/sources/__init__.py b/mayan/apps/sources/__init__.py index cf146c01a7..f05e5b45c7 100644 --- a/mayan/apps/sources/__init__.py +++ b/mayan/apps/sources/__init__.py @@ -6,10 +6,8 @@ from common.utils import encapsulate from documents.models import Document from navigation.api import register_links, register_model_list_columns from project_setup.api import register_setup -from rest_api.classes import EndPoint +from rest_api.classes import APIEndPoint -from .api import (APIStagingSourceListView, APIStagingSourceView, - APIStagingSourceFileView, APIStagingSourceFileImageView) from .classes import StagingFile from .links import (document_create_multiple, document_create_siblings, staging_file_delete, setup_sources, setup_web_form_list, @@ -58,5 +56,6 @@ register_setup(setup_sources) register_links([Document, 'document_list_recent', 'document_list', 'document_create', 'document_create_multiple', 'upload_interactive', 'staging_file_delete'], [document_create_multiple], menu_name='secondary_menu') register_links(Document, [document_create_siblings]) -endpoint = EndPoint('sources') +endpoint = APIEndPoint('sources') endpoint.register_urls(api_urls) +endpoint.add_endpoint('stagingfolder-list') diff --git a/mayan/apps/sources/api.py b/mayan/apps/sources/api.py index 719e25b870..cd20fefeeb 100644 --- a/mayan/apps/sources/api.py +++ b/mayan/apps/sources/api.py @@ -23,23 +23,36 @@ logger = logging.getLogger(__name__) # API Views -class APIStagingSourceFileView(generics.GenericAPIView): +class StagingSourceFileView(generics.GenericAPIView): + """ + Details of the selected staging file. + """ def get(self, request, staging_folder_pk, filename): staging_folder = get_object_or_404(StagingFolder, pk=staging_folder_pk) return Response(SerializerStagingFolderFile(staging_folder.get_file(encoded_filename=filename), context={'request': request}).data) -class APIStagingSourceListView(generics.ListAPIView): +class StagingSourceListView(generics.ListAPIView): + """ + Returns a list of all the staging folders and the files they contain. + """ + serializer_class = SerializerStagingFolder queryset = StagingFolder.objects.all() -class APIStagingSourceView(generics.RetrieveAPIView): +class StagingSourceView(generics.RetrieveAPIView): + """ + Details of the selected staging folders and the files it contains. + """ serializer_class = SerializerStagingFolder queryset = StagingFolder.objects.all() -class APIStagingSourceFileImageView(generics.GenericAPIView): +class StagingSourceFileImageView(generics.GenericAPIView): + """ + Image of the selected staging file. + """ def get(self, request, staging_folder_pk, filename): staging_folder = get_object_or_404(StagingFolder, pk=staging_folder_pk) staging_file = staging_folder.get_file(encoded_filename=filename) diff --git a/mayan/apps/sources/urls.py b/mayan/apps/sources/urls.py index d289bc3b64..7be35a5225 100644 --- a/mayan/apps/sources/urls.py +++ b/mayan/apps/sources/urls.py @@ -2,8 +2,8 @@ from __future__ import absolute_import from django.conf.urls import patterns, url -from .api import (APIStagingSourceListView, APIStagingSourceView, - APIStagingSourceFileView, APIStagingSourceFileImageView) +from .api import (StagingSourceListView, StagingSourceView, + StagingSourceFileView, StagingSourceFileImageView) from .literals import (SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING, SOURCE_CHOICE_WATCH) from .wizards import DocumentCreateWizard @@ -40,8 +40,8 @@ urlpatterns = patterns('sources.views', ) api_urls = patterns('', - url(r'^staging_folders/file/(?P[0-9]+)/(?P.+)/image/$', APIStagingSourceFileImageView.as_view(), name='stagingfolderfile-image-view'), - url(r'^staging_folders/file/(?P[0-9]+)/(?P.+)/$', APIStagingSourceFileView.as_view(), name='stagingfolderfile-detail'), - url(r'^staging_folders/$', APIStagingSourceListView.as_view(), name='stagingfolder-list'), - url(r'^staging_folders/(?P[0-9]+)/$', APIStagingSourceView.as_view(), name='stagingfolder-detail') + url(r'^staging_folders/file/(?P[0-9]+)/(?P.+)/image/$', StagingSourceFileImageView.as_view(), name='stagingfolderfile-image-view'), + url(r'^staging_folders/file/(?P[0-9]+)/(?P.+)/$', StagingSourceFileView.as_view(), name='stagingfolderfile-detail'), + url(r'^staging_folders/$', StagingSourceListView.as_view(), name='stagingfolder-list'), + url(r'^staging_folders/(?P[0-9]+)/$', StagingSourceView.as_view(), name='stagingfolder-detail') )