Added distributed OCR queue support

This commit is contained in:
Roberto Rosario
2011-02-17 04:37:35 -04:00
parent 478fb3502e
commit 77b8a432a2
13 changed files with 66 additions and 26 deletions
+4 -5
View File
@@ -25,11 +25,10 @@ submit_document = {'text':_('submit to OCR queue'), 'view':'submit_document', 'a
register_links(Document, [submit_document], menu_name='sidebar')
#Menus
#register_menu([
# {'text':_('OCR'), 'view':'ocr_queue', 'links':[
# ocr_queue
# ],'famfam':'hourglass','position':5}])
register_menu([
{'text':_('OCR'), 'view':'queue_document_list', 'links':[
#ocr_queue
],'famfam':'hourglass','position':4}])
try:
default_queue, created = DocumentQueue.objects.get_or_create(name='default')
-5
View File
@@ -15,11 +15,6 @@ from converter.api import convert_document_for_ocr
from ocr.conf.settings import TESSERACT_PATH
#from literals import QUEUEDOCUMENT_STATE_PROCESSING, \
# QUEUEDOCUMENT_STATE_ERROR, QUEUEDOCUMENT_STATE_PENDING
#from models import DocumentQueue
def cleanup(filename):
''' tries to remove the given filename. Ignores non-existent files '''
+10 -5
View File
@@ -6,6 +6,13 @@ from documents.models import Document
from literals import DOCUMENTQUEUE_STATE_STOPPED,\
DOCUMENTQUEUE_STATE_CHOICES, QUEUEDOCUMENT_STATE_PENDING,\
QUEUEDOCUMENT_STATE_CHOICES
def add_document_to_queue(document, queue_name='default'):
document_queue = DocumentQueue.objects.get(name=queue_name)
queue_document = QueueDocument(document_queue=document_queue, document=document)
queue_document.save()
return document_queue
class DocumentQueue(models.Model):
@@ -23,10 +30,9 @@ class DocumentQueue(models.Model):
def __unicode__(self):
return self.label
# def add_document(self, document):
# queue_document = QueueDocument(document_queue=self, document=document)
# queue_document.save()
# queue_dict[self.name].put(queue_document)
def add_document(self, document):
queue_document = QueueDocument(document_queue=self, document=document)
queue_document.save()
class QueueDocument(models.Model):
@@ -38,7 +44,6 @@ class QueueDocument(models.Model):
default=QUEUEDOCUMENT_STATE_PENDING,
verbose_name=_(u'state'))
result = models.TextField(blank=True, null=True, verbose_name=_(u'result'))
pid = models.PositiveIntegerField(blank=True, null=True, verbose_name=_(u'process id'))
class Meta:
verbose_name = _(u'queue document')
+1
View File
@@ -3,4 +3,5 @@ from django.utils.translation import ugettext_lazy as _
urlpatterns = patterns('ocr.views',
url(r'^(?P<document_id>\d+)/submit/$', 'submit_document', (), 'submit_document'),
url(r'^ocr/queue/document/list/$', 'queue_document_list', (), 'queue_document_list'),
)
+28 -8
View File
@@ -13,10 +13,36 @@ from documents.models import Document
from ocr import PERMISSION_OCR_DOCUMENT
from models import DocumentQueue, QueueDocument
from models import DocumentQueue, QueueDocument, add_document_to_queue
from tasks import do_document_ocr_task
def queue_document_list(request, queue_name='default'):
permissions = [PERMISSION_OCR_DOCUMENT]
try:
check_permissions(request.user, 'ocr', permissions)
except Unauthorized, e:
raise Http404(e)
document_queue = get_object_or_404(DocumentQueue, name=queue_name)
return object_list(
request,
queryset=document_queue.queuedocument_set.all(),
template_name='generic_list.html',
extra_context={
'title':_(u'queued documents'),
'hide_object':True,
'extra_columns':[
{'name':'document', 'attribute': 'document'},
{'name':'submitted', 'attribute': lambda x: unicode(x.datetime_submitted).split('.')[0]},
{'name':'state', 'attribute': lambda x: x.get_state_display()},
],
},
)
def submit_document(request, document_id, queue_name='default'):
permissions = [PERMISSION_OCR_DOCUMENT]
try:
@@ -27,13 +53,7 @@ def submit_document(request, document_id, queue_name='default'):
document = get_object_or_404(Document, pk=document_id)
document_queue = get_object_or_404(DocumentQueue, name=queue_name)
do_document_ocr_task.delay(document.id)
##document_queue.add_document(document)
#queue_document = QueueDocument(document_queue=document_queue, document=document)
#queue_document.save()
#add.delay(1,2)
add_document_to_queue(document, document_queue.name)
messages.success(request, _(u'Document: %s was added to the OCR queue: %s.') % (document, document_queue.label))
return HttpResponseRedirect(request.META['HTTP_REFERER'])