Close issue #112, Add OCR API endpoints

This commit is contained in:
Roberto Rosario
2014-11-03 02:24:40 -04:00
parent a08d2c0a0c
commit 6a33b4b131
4 changed files with 70 additions and 1 deletions

View File

@@ -14,6 +14,7 @@ from main.api import register_maintenance_links
from navigation.api import register_links
from navigation.links import link_spacer
from project_tools.api import register_tool
from rest_api.classes import APIEndPoint
from .links import (all_document_ocr_cleanup, ocr_tool_link,
queue_document_list, queue_document_multiple_delete,
@@ -56,3 +57,5 @@ Document.add_to_class('submit_for_ocr', document_ocr_submit)
class_permissions(Document, [PERMISSION_OCR_DOCUMENT])
register_tool(ocr_tool_link)
APIEndPoint('ocr')

View File

@@ -0,0 +1,50 @@
from __future__ import absolute_import
from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404
from rest_framework import generics, status
from rest_framework.response import Response
from rest_framework.settings import api_settings
from acls.models import AccessEntry
from documents.models import Document
from permissions.models import Permission
from rest_api.filters import MayanObjectPermissionsFilter
from rest_api.permissions import MayanPermission
from .permissions import PERMISSION_OCR_DOCUMENT
from .serializers import DocumentOCRSerializer
class DocumentOCRView(generics.GenericAPIView):
serializer_class = DocumentOCRSerializer
permission_classes = (MayanPermission,)
def post(self, request, *args, **kwargs):
"""Submit document OCR queue."""
serializer = self.get_serializer(data=request.DATA, files=request.FILES)
if serializer.is_valid():
document = get_object_or_404(Document, pk=serializer.data['document_id'])
try:
Permission.objects.check_permissions(request.user, [PERMISSION_OCR_DOCUMENT])
except PermissionDenied:
AccessEntry.objects.check_access(PERMISSION_OCR_DOCUMENT, request.user, document)
document.submit_for_ocr()
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_202_ACCEPTED,
headers=headers)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def get_success_headers(self, data):
try:
return {'Location': data[api_settings.URL_FIELD_NAME]}
except (TypeError, KeyError):
return {}

View File

@@ -0,0 +1,9 @@
from __future__ import absolute_import
from rest_framework import serializers
from .models import Document
class DocumentOCRSerializer(serializers.Serializer):
document_id = serializers.IntegerField()

View File

@@ -1,5 +1,7 @@
from django.conf.urls import patterns, url
from .api_views import DocumentOCRView
urlpatterns = patterns('ocr.views',
url(r'^document/(?P<document_id>\d+)/submit/$', 'submit_document', (), 'submit_document'),
url(r'^document/multiple/submit/$', 'submit_document_multiple', (), 'submit_document_multiple'),
@@ -9,4 +11,9 @@ urlpatterns = patterns('ocr.views',
url(r'^queue/document/(?P<queue_document_id>\d+)/re-queue/$', 're_queue_document', (), 're_queue_document'),
url(r'^queue/document/multiple/re-queue/$', 're_queue_multiple_document', (), 're_queue_multiple_document'),
url(r'^document/all/clean_up/$', 'all_document_ocr_cleanup', (), 'all_document_ocr_cleanup'),)
url(r'^document/all/clean_up/$', 'all_document_ocr_cleanup', (), 'all_document_ocr_cleanup'),
)
api_urls = patterns('',
url(r'^submit/$', DocumentOCRView.as_view(), name='document-ocr-submit-view'),
)