diff --git a/apps/ocr/__init__.py b/apps/ocr/__init__.py index 3bd43acb3e..3cf118b674 100755 --- a/apps/ocr/__init__.py +++ b/apps/ocr/__init__.py @@ -25,11 +25,11 @@ register_permissions('ocr', [ #Links submit_document = {'text':_('submit to OCR queue'), 'view':'submit_document', 'args':'object.id', 'famfam':'hourglass_add', 'permissions':{'namespace':'ocr', 'permissions':[PERMISSION_OCR_DOCUMENT]}} -register_links(Document, [submit_document], menu_name='sidebar') +re_queue_document = {'text':_('re-queue'), 'view':'re_queue_document', 'args':'object.id', 'famfam':'hourglass_add', 'permissions':{'namespace':'ocr', 'permissions':[PERMISSION_OCR_DOCUMENT]}} queue_document_delete = {'text':_(u'delete'), 'view':'queue_document_delete', 'args':'object.id', 'famfam':'hourglass_delete', 'permissions':{'namespace':'ocr', 'permissions':[PERMISSION_OCR_DOCUMENT_DELETE]}} -register_links(QueueDocument, [queue_document_delete]) - +register_links(Document, [submit_document], menu_name='sidebar') +register_links(QueueDocument, [re_queue_document, queue_document_delete]) #Menus register_menu([ diff --git a/apps/ocr/urls.py b/apps/ocr/urls.py index 32b8f492c6..537e2bf799 100755 --- a/apps/ocr/urls.py +++ b/apps/ocr/urls.py @@ -5,4 +5,5 @@ urlpatterns = patterns('ocr.views', url(r'^(?P\d+)/submit/$', 'submit_document', (), 'submit_document'), url(r'^ocr/queue/document/list/$', 'queue_document_list', (), 'queue_document_list'), url(r'^ocr/queue/document/(?P\d+)/delete/$', 'queue_document_delete', (), 'queue_document_delete'), + url(r'^ocr/queue/document/(?P\d+)/re-queue/$', 're_queue_document', (), 're_queue_document'), ) diff --git a/apps/ocr/views.py b/apps/ocr/views.py index e704e65a5a..2b8de4b160 100755 --- a/apps/ocr/views.py +++ b/apps/ocr/views.py @@ -1,3 +1,5 @@ +import datetime + from django.http import HttpResponse, HttpResponseRedirect, Http404 from django.shortcuts import render_to_response, get_object_or_404, redirect from django.template import RequestContext @@ -12,11 +14,10 @@ from permissions.api import check_permissions, Unauthorized from documents.models import Document from ocr import PERMISSION_OCR_DOCUMENT, PERMISSION_OCR_DOCUMENT_DELETE - from models import DocumentQueue, QueueDocument, add_document_to_queue - from tasks import do_document_ocr_task - +from literals import QUEUEDOCUMENT_STATE_PENDING, \ + QUEUEDOCUMENT_STATE_PROCESSING, QUEUEDOCUMENT_STATE_ERROR def queue_document_list(request, queue_name='default'): permissions = [PERMISSION_OCR_DOCUMENT] @@ -81,3 +82,50 @@ def submit_document(request, document_id, queue_name='default'): messages.success(request, _(u'Document: %(document)s was added to the OCR queue: %(queue)s.') % { 'document':document, 'queue':document_queue.label}) return HttpResponseRedirect(request.META['HTTP_REFERER']) + + +def re_queue_document(request, queue_document_id): + permissions = [PERMISSION_OCR_DOCUMENT] + try: + check_permissions(request.user, 'ocr', permissions) + except Unauthorized, e: + raise Http404(e) + + next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', None))) + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', None))) + queue_document = get_object_or_404(QueueDocument, pk=queue_document_id) + + try: + queue_document.document + except Document.DoesNotExist: + messages.error(request, _(u'This document no longer exists.')) + return HttpResponseRedirect(previous) + + if queue_document.state == QUEUEDOCUMENT_STATE_PENDING: + messages.warning(request, _(u'This document is already queued and pending processing.')) + return HttpResponseRedirect(previous) + elif queue_document.state == QUEUEDOCUMENT_STATE_PROCESSING: + messages.warning(request, _(u'This document is already being processed and can\'t be re-queded.')) + return HttpResponseRedirect(previous) + + if request.method == 'POST': + try: + if queue_document.state == QUEUEDOCUMENT_STATE_ERROR: + queue_document.datetime_submitted = datetime.datetime.now() + queue_document.state = QUEUEDOCUMENT_STATE_PENDING + queue_document.save() + messages.success(request, _(u'Document: %(document)s was re-queued to the OCR queue: %(queue)s') % { + 'document':queue_document.document, 'queue':queue_document.document_queue.label}) + + except Exception, e: + messages.error(request, e) + return HttpResponseRedirect(next) + + + + return render_to_response('generic_confirm.html', { + 'object':queue_document, + 'title':_(u'Are you sure you wish to re-queue document: %s') % queue_document, + 'next':next, + 'previous':previous, + }, context_instance=RequestContext(request)) diff --git a/docs/Changelog.txt b/docs/Changelog.txt index b79bcdcb2b..7959bf4a8f 100644 --- a/docs/Changelog.txt +++ b/docs/Changelog.txt @@ -43,3 +43,7 @@ Some warnings may be returned, but these are not fatal as they might be related to missing metadata in some documents. + +2011-Mar 03 +* Added document link in the OCR document queue list +* Link to manually re queue failed OCR