From 95ce732f20964133190610884bc642f773ce5e65 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 6 Jul 2014 12:59:43 -0400 Subject: [PATCH] Expand the document app API to include document version and document pages --- mayan/apps/documents/api.py | 20 ++++++++++++++++---- mayan/apps/documents/registry.py | 4 +++- mayan/apps/documents/resources.py | 19 +++++++++++++++++-- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/mayan/apps/documents/api.py b/mayan/apps/documents/api.py index acff390240..270156f66f 100644 --- a/mayan/apps/documents/api.py +++ b/mayan/apps/documents/api.py @@ -6,7 +6,6 @@ from django.core.exceptions import PermissionDenied from django.shortcuts import get_object_or_404 from rest_framework import generics -from rest_framework.generics import RetrieveAPIView from rest_framework.response import Response from acls.models import AccessEntry @@ -16,21 +15,34 @@ from converter.literals import (DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION, from permissions.models import Permission from .conf.settings import DISPLAY_SIZE, ZOOM_MAX_LEVEL, ZOOM_MIN_LEVEL -from .models import Document +from .models import Document, DocumentVersion, DocumentPage from .permissions import PERMISSION_DOCUMENT_VIEW -from .resources import ResourceDocument +from .resources import ResourceDocument, ResourceDocumentVersion, ResourceDocumentPage logger = logging.getLogger(__name__) # API Views -class APIDocumentView(RetrieveAPIView): +class APIDocumentPageView(generics.RetrieveAPIView): + allowed_methods = ['GET'] + serializer_class = ResourceDocumentPage + queryset = DocumentPage.objects.all() + + +class APIDocumentView(generics.RetrieveAPIView): allowed_methods = ['GET'] serializer_class = ResourceDocument queryset = Document.objects.all() +class APIDocumentVersionView(generics.RetrieveAPIView): + allowed_methods = ['GET'] + serializer_class = DocumentVersion + queryset = DocumentVersion.objects.all() + + + class APIDocumentImageView(generics.GenericAPIView): def get(self, request, pk): document = get_object_or_404(Document, pk=pk) diff --git a/mayan/apps/documents/registry.py b/mayan/apps/documents/registry.py index e6ab271969..ee779b8922 100644 --- a/mayan/apps/documents/registry.py +++ b/mayan/apps/documents/registry.py @@ -3,7 +3,7 @@ from __future__ import absolute_import from django.conf.urls import url from .cleanup import cleanup -from .api import APIDocumentView, APIDocumentImageView +from .api import APIDocumentView, APIDocumentVersionView, APIDocumentImageView, APIDocumentPageView bootstrap_models = [ { @@ -18,5 +18,7 @@ cleanup_functions = [cleanup] version_0_api_services = [ {'urlpattern': url(r'^document/(?P[0-9]+)/$', APIDocumentView.as_view(), name='document-detail'), 'description': 'Show document data', 'url': 'document/'}, + {'urlpattern': url(r'^document_version/(?P[0-9]+)/$', APIDocumentVersionView.as_view(), name='documentversion-detail'), 'description': '', 'url': 'document_version/'}, + {'urlpattern': url(r'^document_page/(?P[0-9]+)/$', APIDocumentPageView.as_view(), name='documentpage-detail'), 'description': '', 'url': 'document_page/'}, {'urlpattern': url(r'^document/(?P[0-9]+)/image/$', APIDocumentImageView.as_view(), name='document-image'), 'description': 'Return a base64 image of the document', 'url': 'document//image/?page=&zoom=&rotate='}, ] diff --git a/mayan/apps/documents/resources.py b/mayan/apps/documents/resources.py index 454fde8211..b2962cdaa9 100644 --- a/mayan/apps/documents/resources.py +++ b/mayan/apps/documents/resources.py @@ -4,10 +4,25 @@ from django.core.urlresolvers import reverse from rest_framework import serializers -from .models import Document +from .models import Document, DocumentVersion, DocumentPage + + +class ResourceDocumentPage(serializers.HyperlinkedModelSerializer): + class Meta: + model = DocumentPage + fields = ('url', 'content', 'page_label', 'page_number') + + +class ResourceDocumentVersion(serializers.HyperlinkedModelSerializer): + pages = ResourceDocumentPage(many=True, read_only=True) + + class Meta: + model = DocumentVersion + fields = ('document', 'major', 'minor', 'micro', 'release_level', 'serial', 'timestamp', 'comment', 'file', 'mimetype', 'encoding', 'filename', 'checksum', 'pages') class ResourceDocument(serializers.HyperlinkedModelSerializer): + versions = ResourceDocumentVersion(many=True, read_only=True) + class Meta: model = Document - fields = ('url', 'document_type', 'uuid', 'date_added', 'description')