Update the app API class methods, register the sources app main endpoint, add API doc strings
This commit is contained in:
@@ -9,7 +9,7 @@ from bootstrap.classes import BootstrapModel, Cleanup
|
|||||||
from navigation.api import register_top_menu
|
from navigation.api import register_top_menu
|
||||||
from project_setup.api import register_setup
|
from project_setup.api import register_setup
|
||||||
from project_tools.api import register_tool
|
from project_tools.api import register_tool
|
||||||
from rest_api.classes import EndPoint
|
from rest_api.classes import APIEndPoint
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -60,10 +60,10 @@ class App(object):
|
|||||||
logger.debug('version_0_api_services: %s' % version_0_api_services)
|
logger.debug('version_0_api_services: %s' % version_0_api_services)
|
||||||
|
|
||||||
if 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:
|
for service in version_0_api_services:
|
||||||
endpoint.add_service(**service)
|
api_endpoint.add_service(**service)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return unicode(self.label)
|
return unicode(self.label)
|
||||||
|
|||||||
@@ -2,25 +2,14 @@ from __future__ import absolute_import
|
|||||||
|
|
||||||
from django.conf.urls import include, patterns, url
|
from django.conf.urls import include, patterns, url
|
||||||
|
|
||||||
#from .classes import EndPoint
|
from .views import APIBase, Version_0, APIAppView
|
||||||
from .views import APIBase, Version_0, EndPointView
|
|
||||||
|
|
||||||
version_0_endpoints_urlpatterns = patterns('',
|
version_0_urlpatterns = patterns('',
|
||||||
url(r'^$', Version_0.as_view(), name='api-version-0'),
|
url(r'^$', Version_0.as_view(), name='api-version-0'),
|
||||||
url(r'^(?P<endpoint_name>\w+)$', EndPointView.as_view(), name='api-version-0-endpoint'),
|
url(r'^(?P<app_name>\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('',
|
urlpatterns = patterns('',
|
||||||
url(r'^$', APIBase.as_view(), name='api-root'),
|
url(r'^$', APIBase.as_view(), name='api-root'),
|
||||||
url(r'^v0/', include(version_0_endpoints_urlpatterns)),
|
url(r'^v0/', include(version_0_urlpatterns)),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from rest_framework.generics import RetrieveAPIView
|
|||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.reverse import reverse
|
from rest_framework.reverse import reverse
|
||||||
|
|
||||||
from .classes import EndPoint
|
from .classes import APIEndPoint
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -19,6 +19,10 @@ registered_version_0_endpoints = [
|
|||||||
|
|
||||||
|
|
||||||
class APIBase(generics.GenericAPIView):
|
class APIBase(generics.GenericAPIView):
|
||||||
|
"""
|
||||||
|
Main entry point of the API.
|
||||||
|
"""
|
||||||
|
|
||||||
def get(self, request, format=None):
|
def get(self, request, format=None):
|
||||||
return Response([
|
return Response([
|
||||||
{'name': 'Version 0', 'url': reverse('api-version-0', request=request, format=format)}
|
{'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):
|
class Version_0(generics.GenericAPIView):
|
||||||
|
"""
|
||||||
|
API version 0 entry points.
|
||||||
|
"""
|
||||||
|
|
||||||
def get(self, request, format=None):
|
def get(self, request, format=None):
|
||||||
return Response({
|
return Response({
|
||||||
'endpoints': [
|
'apps': [
|
||||||
{'name': unicode(endpoint), 'url': reverse('api-version-0-endpoint', args=[unicode(endpoint)], request=request, format=format)} for endpoint in EndPoint.get_all()
|
{'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 = []
|
result = []
|
||||||
|
|
||||||
endpoint = EndPoint.get(endpoint_name)
|
api_app = APIEndPoint.get(app_name)
|
||||||
for service in endpoint.services:
|
for endpoint in api_app.endpoints:
|
||||||
result.append(
|
result.append(
|
||||||
{
|
{
|
||||||
'description': service['description'],
|
'description': endpoint['description'],
|
||||||
'name': service['urlpattern'].name,
|
'url': reverse(endpoint['view_name'], request=request, format=format),
|
||||||
'url': service['url'],
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
return Response({
|
return Response({
|
||||||
'services': result
|
'endpoints': result
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -6,10 +6,8 @@ from common.utils import encapsulate
|
|||||||
from documents.models import Document
|
from documents.models import Document
|
||||||
from navigation.api import register_links, register_model_list_columns
|
from navigation.api import register_links, register_model_list_columns
|
||||||
from project_setup.api import register_setup
|
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 .classes import StagingFile
|
||||||
from .links import (document_create_multiple, document_create_siblings,
|
from .links import (document_create_multiple, document_create_siblings,
|
||||||
staging_file_delete, setup_sources, setup_web_form_list,
|
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_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])
|
register_links(Document, [document_create_siblings])
|
||||||
|
|
||||||
endpoint = EndPoint('sources')
|
endpoint = APIEndPoint('sources')
|
||||||
endpoint.register_urls(api_urls)
|
endpoint.register_urls(api_urls)
|
||||||
|
endpoint.add_endpoint('stagingfolder-list')
|
||||||
|
|||||||
@@ -23,23 +23,36 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
# API Views
|
# API Views
|
||||||
|
|
||||||
class APIStagingSourceFileView(generics.GenericAPIView):
|
class StagingSourceFileView(generics.GenericAPIView):
|
||||||
|
"""
|
||||||
|
Details of the selected staging file.
|
||||||
|
"""
|
||||||
def get(self, request, staging_folder_pk, filename):
|
def get(self, request, staging_folder_pk, filename):
|
||||||
staging_folder = get_object_or_404(StagingFolder, pk=staging_folder_pk)
|
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)
|
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
|
serializer_class = SerializerStagingFolder
|
||||||
queryset = StagingFolder.objects.all()
|
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
|
serializer_class = SerializerStagingFolder
|
||||||
queryset = StagingFolder.objects.all()
|
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):
|
def get(self, request, staging_folder_pk, filename):
|
||||||
staging_folder = get_object_or_404(StagingFolder, pk=staging_folder_pk)
|
staging_folder = get_object_or_404(StagingFolder, pk=staging_folder_pk)
|
||||||
staging_file = staging_folder.get_file(encoded_filename=filename)
|
staging_file = staging_folder.get_file(encoded_filename=filename)
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ from __future__ import absolute_import
|
|||||||
|
|
||||||
from django.conf.urls import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
|
|
||||||
from .api import (APIStagingSourceListView, APIStagingSourceView,
|
from .api import (StagingSourceListView, StagingSourceView,
|
||||||
APIStagingSourceFileView, APIStagingSourceFileImageView)
|
StagingSourceFileView, StagingSourceFileImageView)
|
||||||
from .literals import (SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING,
|
from .literals import (SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING,
|
||||||
SOURCE_CHOICE_WATCH)
|
SOURCE_CHOICE_WATCH)
|
||||||
from .wizards import DocumentCreateWizard
|
from .wizards import DocumentCreateWizard
|
||||||
@@ -40,8 +40,8 @@ urlpatterns = patterns('sources.views',
|
|||||||
)
|
)
|
||||||
|
|
||||||
api_urls = patterns('',
|
api_urls = patterns('',
|
||||||
url(r'^staging_folders/file/(?P<staging_folder_pk>[0-9]+)/(?P<filename>.+)/image/$', APIStagingSourceFileImageView.as_view(), name='stagingfolderfile-image-view'),
|
url(r'^staging_folders/file/(?P<staging_folder_pk>[0-9]+)/(?P<filename>.+)/image/$', StagingSourceFileImageView.as_view(), name='stagingfolderfile-image-view'),
|
||||||
url(r'^staging_folders/file/(?P<staging_folder_pk>[0-9]+)/(?P<filename>.+)/$', APIStagingSourceFileView.as_view(), name='stagingfolderfile-detail'),
|
url(r'^staging_folders/file/(?P<staging_folder_pk>[0-9]+)/(?P<filename>.+)/$', StagingSourceFileView.as_view(), name='stagingfolderfile-detail'),
|
||||||
url(r'^staging_folders/$', APIStagingSourceListView.as_view(), name='stagingfolder-list'),
|
url(r'^staging_folders/$', StagingSourceListView.as_view(), name='stagingfolder-list'),
|
||||||
url(r'^staging_folders/(?P<pk>[0-9]+)/$', APIStagingSourceView.as_view(), name='stagingfolder-detail')
|
url(r'^staging_folders/(?P<pk>[0-9]+)/$', StagingSourceView.as_view(), name='stagingfolder-detail')
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user