diff --git a/apps/ocr/__init__.py b/apps/ocr/__init__.py index 7ea9921e14..bfcb1187c0 100644 --- a/apps/ocr/__init__.py +++ b/apps/ocr/__init__.py @@ -18,6 +18,7 @@ from acls.api import class_permissions from scheduler.api import register_interval_job from statistics.api import register_statistics from job_processor.models import JobQueue, JobType +from job_processor.exceptions import JobQueuePushError from .conf.settings import (AUTOMATIC_OCR, QUEUE_PROCESSING_INTERVAL) from .models import OCRProcessingSingleton @@ -60,8 +61,8 @@ def document_post_save(sender, instance, **kwargs): if kwargs.get('created', False): if AUTOMATIC_OCR: try: - DocumentQueue.objects.queue_document(instance.document) - except AlreadyQueued: + instance.submit_for_ocr() + except JobQueuePushError: pass # Disabled because it appears Django execute signals using the same @@ -82,3 +83,6 @@ class_permissions(Document, [ #register_statistics(get_statistics) create_ocr_job_queue() ocr_job_type = JobType('ocr', _(u'OCR'), do_document_ocr) + +Document.add_to_class('submit_for_ocr', lambda document: ocr_job_queue.push(ocr_job_type, document_version_pk=document.pk)) +DocumentVersion.add_to_class('submit_for_ocr', lambda document_version: ocr_job_queue.push(ocr_job_type, document_version_pk=document.latest_version.pk)) diff --git a/apps/ocr/links.py b/apps/ocr/links.py index 84a01e8238..b3d34171f7 100644 --- a/apps/ocr/links.py +++ b/apps/ocr/links.py @@ -19,8 +19,8 @@ def is_disabled(context): ocr_log = Link(text=_(u'queue document list'), view='ocr_log', sprite='text', permissions=[PERMISSION_OCR_DOCUMENT]) ocr_disable = Link(text=_(u'disable OCR processing'), view='ocr_disable', sprite='control_stop_blue', permissions=[PERMISSION_OCR_QUEUE_ENABLE_DISABLE], conditional_disable=is_disabled) ocr_enable = Link(text=_(u'enable OCR processing'), view='ocr_enable', sprite='control_play_blue', permissions=[PERMISSION_OCR_QUEUE_ENABLE_DISABLE], conditional_disable=is_enabled) -submit_document = Link(text=_('submit to OCR queue'), view='submit_document', args='object.id', sprite='hourglass_add', permissions=[PERMISSION_OCR_DOCUMENT]) -submit_document_multiple = Link(text=_('submit to OCR queue'), view='submit_document_multiple', sprite='hourglass_add', permissions=[PERMISSION_OCR_DOCUMENT]) +submit_document = Link(text=_('submit to OCR queue'), view='submit_document', args='object.id', sprite='text_dropcaps', permissions=[PERMISSION_OCR_DOCUMENT]) +submit_document_multiple = Link(text=_('submit to OCR queue'), view='submit_document_multiple', sprite='text_dropcaps', permissions=[PERMISSION_OCR_DOCUMENT]) re_queue_document = Link(text=_('re-queue'), view='re_queue_document', args='object.id', sprite='hourglass_add', permissions=[PERMISSION_OCR_DOCUMENT]) re_queue_multiple_document = Link(text=_('re-queue'), view='re_queue_multiple_document', sprite='hourglass_add', permissions=[PERMISSION_OCR_DOCUMENT]) queue_document_delete = Link(text=_(u'delete'), view='queue_document_delete', args='object.id', sprite='hourglass_delete', permissions=[PERMISSION_OCR_DOCUMENT_DELETE]) diff --git a/apps/ocr/urls.py b/apps/ocr/urls.py index b652f800c7..91b3e2d85f 100644 --- a/apps/ocr/urls.py +++ b/apps/ocr/urls.py @@ -8,16 +8,10 @@ urlpatterns = patterns('ocr.views', url(r'^document/(?P\d+)/submit/$', 'submit_document', (), 'submit_document'), url(r'^document/multiple/submit/$', 'submit_document_multiple', (), 'submit_document_multiple'), - url(r'^queue/document/(?P\d+)/delete/$', 'queue_document_delete', (), 'queue_document_delete'), - url(r'^queue/document/multiple/delete/$', 'queue_document_multiple_delete', (), 'queue_document_multiple_delete'), - url(r'^queue/document/(?P\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'^queue/document/(?P\d+)/delete/$', 'queue_document_delete', (), 'queue_document_delete'), + #url(r'^queue/document/multiple/delete/$', 'queue_document_multiple_delete', (), 'queue_document_multiple_delete'), + #url(r'^queue/document/(?P\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'^queue/(?P\d+)/transformation/list/$', 'setup_queue_transformation_list', (), 'setup_queue_transformation_list'), - url(r'^queue/(?P\w+)/transformation/create/$', 'setup_queue_transformation_create', (), 'setup_queue_transformation_create'), - url(r'^queue/transformation/(?P\w+)/edit/$', 'setup_queue_transformation_edit', (), 'setup_queue_transformation_edit'), - url(r'^queue/transformation/(?P\w+)/delete/$', 'setup_queue_transformation_delete', (), 'setup_queue_transformation_delete'), ) diff --git a/apps/ocr/views.py b/apps/ocr/views.py index 1c019be7ac..ba70b072f6 100644 --- a/apps/ocr/views.py +++ b/apps/ocr/views.py @@ -199,7 +199,8 @@ def submit_document_to_queue(request, document, post_submit_redirect=None): """ try: - ocr_job_queue.push(ocr_job_type, document_version_pk=document.latest_version.pk) + document.submit_for_ocr() + #ocr_job_queue.push(ocr_job_type, document_version_pk=document.latest_version.pk) messages.success(request, _(u'Document: %(document)s was added to the OCR queue sucessfully.') % { 'document': document}) except JobQueuePushError: @@ -301,126 +302,3 @@ def display_link(obj): return u''.join(output) else: return obj - - -# Setup views -def setup_queue_transformation_list(request, document_queue_id): - Permission.objects.check_permissions(request.user, [PERMISSION_OCR_QUEUE_EDIT]) - - document_queue = get_object_or_404(DocumentQueue, pk=document_queue_id) - - context = { - 'object_list': QueueTransformation.transformations.get_for_object(document_queue), - 'title': _(u'transformations for: %s') % document_queue, - 'queue': document_queue, - 'object_name': _(u'document queue'), - 'navigation_object_name': 'queue', - 'list_object_variable_name': 'transformation', - 'extra_columns': [ - {'name': _(u'order'), 'attribute': 'order'}, - {'name': _(u'transformation'), 'attribute': encapsulate(lambda x: x.get_transformation_display())}, - {'name': _(u'arguments'), 'attribute': 'arguments'} - ], - 'hide_link': True, - 'hide_object': True, - } - - return render_to_response('generic_list.html', context, - context_instance=RequestContext(request)) - - -def setup_queue_transformation_edit(request, transformation_id): - Permission.objects.check_permissions(request.user, [PERMISSION_OCR_QUEUE_EDIT]) - - transformation = get_object_or_404(QueueTransformation, pk=transformation_id) - redirect_view = reverse('setup_queue_transformation_list', args=[transformation.content_object.pk]) - next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', redirect_view))) - - if request.method == 'POST': - form = QueueTransformationForm(instance=transformation, data=request.POST) - if form.is_valid(): - try: - form.save() - messages.success(request, _(u'Queue transformation edited successfully')) - return HttpResponseRedirect(next) - except Exception, e: - messages.error(request, _(u'Error editing queue transformation; %s') % e) - else: - form = QueueTransformationForm(instance=transformation) - - return render_to_response('generic_form.html', { - 'title': _(u'Edit transformation: %s') % transformation, - 'form': form, - 'queue': transformation.content_object, - 'transformation': transformation, - 'navigation_object_list': [ - {'object': 'queue', 'name': _(u'document queue')}, - {'object': 'transformation', 'name': _(u'transformation')} - ], - 'next': next, - }, - context_instance=RequestContext(request)) - - -def setup_queue_transformation_delete(request, transformation_id): - Permission.objects.check_permissions(request.user, [PERMISSION_OCR_QUEUE_EDIT]) - - transformation = get_object_or_404(QueueTransformation, pk=transformation_id) - redirect_view = reverse('setup_queue_transformation_list', args=[transformation.content_object.pk]) - previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', redirect_view))) - - if request.method == 'POST': - try: - transformation.delete() - messages.success(request, _(u'Queue transformation deleted successfully.')) - except Exception, e: - messages.error(request, _(u'Error deleting queue transformation; %(error)s') % { - 'error': e} - ) - return HttpResponseRedirect(redirect_view) - - return render_to_response('generic_confirm.html', { - 'delete_view': True, - 'transformation': transformation, - 'queue': transformation.content_object, - 'navigation_object_list': [ - {'object': 'queue', 'name': _(u'document queue')}, - {'object': 'transformation', 'name': _(u'transformation')} - ], - 'title': _(u'Are you sure you wish to delete queue transformation "%(transformation)s"') % { - 'transformation': transformation.get_transformation_display(), - }, - 'previous': previous, - 'form_icon': u'shape_square_delete.png', - }, - context_instance=RequestContext(request)) - - -def setup_queue_transformation_create(request, document_queue_id): - Permission.objects.check_permissions(request.user, [PERMISSION_OCR_QUEUE_EDIT]) - - document_queue = get_object_or_404(DocumentQueue, pk=document_queue_id) - - redirect_view = reverse('setup_queue_transformation_list', args=[document_queue.pk]) - - if request.method == 'POST': - form = QueueTransformationForm_create(request.POST) - if form.is_valid(): - try: - queue_tranformation = form.save(commit=False) - queue_tranformation.content_object = document_queue - queue_tranformation.save() - messages.success(request, _(u'Queue transformation created successfully')) - return HttpResponseRedirect(redirect_view) - except Exception, e: - messages.error(request, _(u'Error creating queue transformation; %s') % e) - else: - form = QueueTransformationForm_create() - - return render_to_response('generic_form.html', { - 'form': form, - 'queue': document_queue, - 'object_name': _(u'document queue'), - 'navigation_object_name': 'queue', - 'title': _(u'Create new transformation for queue: %s') % document_queue, - }, context_instance=RequestContext(request))