Move document type's OCR settings from the documents app to the OCR app

This commit is contained in:
Roberto Rosario
2015-06-24 01:52:33 -04:00
parent 83ed62b210
commit 72b91b79ac
13 changed files with 110 additions and 19 deletions

View File

@@ -100,7 +100,7 @@ class DocumentTypeForm(forms.ModelForm):
Model class form to create or edit a document type
"""
class Meta:
fields = ('name', 'ocr')
fields = ('name',)
model = DocumentType

File diff suppressed because one or more lines are too long

View File

@@ -54,9 +54,6 @@ class DocumentType(models.Model):
"""
name = models.CharField(max_length=32, verbose_name=_('Name'), unique=True)
# TODO: find a way to move this to the ocr app
ocr = models.BooleanField(default=True, verbose_name=_('Automatically queue newly created documents for OCR.'))
objects = DocumentTypeManager()
def __str__(self):

View File

@@ -792,7 +792,6 @@ def document_type_list(request):
'title': _('Document types'),
'hide_link': True,
'extra_columns': [
{'name': _('OCR'), 'attribute': 'ocr'},
{'name': _('Documents'), 'attribute': encapsulate(lambda x: x.documents.count())}
]
}

View File

@@ -2,7 +2,7 @@ from __future__ import unicode_literals
from django.contrib import admin
from .models import DocumentVersionOCRError
from .models import DocumentTypeSettings, DocumentVersionOCRError
class DocumentVersionOCRErrorAdmin(admin.ModelAdmin):
@@ -11,3 +11,4 @@ class DocumentVersionOCRErrorAdmin(admin.ModelAdmin):
admin.site.register(DocumentVersionOCRError, DocumentVersionOCRErrorAdmin)
admin.site.register(DocumentTypeSettings)

View File

@@ -12,7 +12,7 @@ from common import (
menu_tools
)
from common.utils import encapsulate
from documents.models import Document, DocumentVersion
from documents.models import Document, DocumentType, DocumentVersion
from documents.signals import post_version_upload
from documents.widgets import document_link
from installation import PropertyNamespace
@@ -22,12 +22,15 @@ from rest_api.classes import APIEndPoint
from .handlers import post_version_upload_ocr
from .links import (
link_document_content, link_document_submit,
link_document_submit_multiple, link_entry_delete,
link_entry_delete_multiple, link_entry_list, link_entry_re_queue,
link_entry_re_queue_multiple
link_document_submit_multiple, link_document_type_ocr_settings,
link_entry_delete, link_entry_delete_multiple, link_entry_list,
link_entry_re_queue, link_entry_re_queue_multiple
)
from .models import DocumentVersionOCRError
from .permissions import PERMISSION_OCR_DOCUMENT, PERMISSION_OCR_CONTENT_VIEW
from .permissions import (
PERMISSION_OCR_DOCUMENT, PERMISSION_OCR_CONTENT_VIEW,
PERMISSION_DOCUMENT_TYPE_OCR_SETUP
)
from .settings import setting_pdftotext_path, setting_tesseract_path, setting_unpaper_path
from .tasks import task_do_ocr
@@ -69,6 +72,7 @@ class OCRApp(MayanAppConfig):
menu_multi_item.bind_links(links=[link_entry_re_queue_multiple, link_entry_delete_multiple], sources=[DocumentVersionOCRError])
menu_object.bind_links(links=[link_document_submit], sources=[Document])
menu_object.bind_links(links=[link_entry_re_queue, link_entry_delete], sources=[DocumentVersionOCRError])
menu_object.bind_links(links=[link_document_type_ocr_settings], sources=[DocumentType])
menu_secondary.bind_links(links=[link_entry_list], sources=['ocr:entry_list', 'ocr:entry_delete_multiple', 'ocr:entry_re_queue_multiple', DocumentVersionOCRError])
menu_tools.bind_links(links=[link_entry_list])

View File

@@ -8,5 +8,5 @@ logger = logging.getLogger(__name__)
def post_version_upload_ocr(sender, instance, **kwargs):
logger.debug('received post_version_upload')
logger.debug('instance pk: %s', instance.pk)
if instance.document.document_type.ocr:
if instance.document.document_type.ocr_settings.auto_ocr:
instance.submit_for_ocr()

View File

@@ -6,12 +6,13 @@ from navigation import Link
from .permissions import (
PERMISSION_OCR_CONTENT_VIEW, PERMISSION_OCR_DOCUMENT,
PERMISSION_OCR_DOCUMENT_DELETE
PERMISSION_OCR_DOCUMENT_DELETE, PERMISSION_DOCUMENT_TYPE_OCR_SETUP
)
link_document_content = Link(permissions=[PERMISSION_OCR_CONTENT_VIEW], text=_('Content'), view='ocr:document_content', args='resolved_object.id')
link_document_submit = Link(permissions=[PERMISSION_OCR_DOCUMENT], text=_('Submit to OCR queue'), view='ocr:document_submit', args='object.id')
link_document_submit_multiple = Link(text=_('Submit to OCR queue'), view='ocr:document_submit_multiple')
link_document_type_ocr_settings = Link(permissions=[PERMISSION_DOCUMENT_TYPE_OCR_SETUP], text=_('Setup OCR'), view='ocr:document_type_ocr_settings', args='resolved_object.id')
link_entry_delete = Link(permissions=[PERMISSION_OCR_DOCUMENT_DELETE], text=_('Delete'), view='ocr:entry_delete', args='object.id')
link_entry_delete_multiple = Link(text=_('Delete'), view='ocr:entry_delete_multiple')
link_entry_list = Link(icon='fa fa-file-text-o', permissions=[PERMISSION_OCR_DOCUMENT], text=_('OCR Errors'), view='ocr:entry_list')

View File

@@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('documents', '0008_auto_20150624_0520'),
('ocr', '0003_auto_20150617_0401'),
]
operations = [
migrations.CreateModel(
name='DocumentTypeSettings',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('auto_ocr', models.BooleanField(default=True, verbose_name='Automatically queue newly created documents for OCR.')),
('document_type', models.OneToOneField(related_name='ocr_settings', verbose_name='Document type', to='documents.DocumentType')),
],
options={
'verbose_name': 'Document type settings',
'verbose_name_plural': 'Document types settings',
},
bases=(models.Model,),
),
]

View File

@@ -4,7 +4,19 @@ from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
from documents.models import DocumentVersion, DocumentPage
from documents.models import DocumentPage, DocumentType, DocumentVersion
class DocumentTypeSettings(models.Model):
"""
Define for OCR for a specific document should behave
"""
document_type = models.OneToOneField(DocumentType, related_name='ocr_settings', unique=True, verbose_name=_('Document type'))
auto_ocr = models.BooleanField(default=True, verbose_name=_('Automatically queue newly created documents for OCR.'))
class Meta:
verbose_name = _('Document type settings')
verbose_name_plural = _('Document types settings')
@python_2_unicode_compatible

View File

@@ -8,3 +8,4 @@ ocr_namespace = PermissionNamespace('ocr', _('OCR'))
PERMISSION_OCR_DOCUMENT = Permission.objects.register(ocr_namespace, 'ocr_document', _('Submit documents for OCR'))
PERMISSION_OCR_DOCUMENT_DELETE = Permission.objects.register(ocr_namespace, 'ocr_document_delete', _('Delete documents from OCR queue'))
PERMISSION_OCR_CONTENT_VIEW = Permission.objects.register(ocr_namespace, 'ocr_content_view', _('Can view the transcribed text from document'))
PERMISSION_DOCUMENT_TYPE_OCR_SETUP = Permission.objects.register(ocr_namespace, 'ocr_document_type_setup', _('Change document type OCR settings'))

View File

@@ -3,13 +3,16 @@ from __future__ import unicode_literals
from django.conf.urls import patterns, url
from .api_views import DocumentVersionOCRView
from .views import DocumentSubmitView, DocumentManySubmitView
from .views import (
DocumentManySubmitView, DocumentSubmitView, DocumentTypeSettingsEditView
)
urlpatterns = patterns(
'ocr.views',
url(r'^(?P<document_id>\d+)/content/$', 'document_content', name='document_content'),
url(r'^document/(?P<pk>\d+)/submit/$', DocumentSubmitView.as_view(), name='document_submit'),
url(r'^document/multiple/submit/$', DocumentManySubmitView.as_view(), name='document_submit_multiple'),
url(r'^document_type/(?P<pk>\d+)/ocr/settings/$', DocumentTypeSettingsEditView.as_view(), name='document_type_ocr_settings'),
url(r'^all/$', 'entry_list', name='entry_list'),
url(r'^(?P<pk>\d+)/delete/$', 'entry_delete', name='entry_delete'),

View File

@@ -10,15 +10,15 @@ from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _, ungettext
from acls.models import AccessEntry
from common.views import ConfirmView
from documents.models import Document, DocumentVersion
from common.views import ConfirmView, SingleObjectEditView
from documents.models import Document, DocumentType, DocumentVersion
from permissions.models import Permission
from .forms import DocumentContentForm
from .models import DocumentVersionOCRError
from .models import DocumentTypeSettings, DocumentVersionOCRError
from .permissions import (
PERMISSION_OCR_CONTENT_VIEW, PERMISSION_OCR_DOCUMENT,
PERMISSION_OCR_DOCUMENT_DELETE
PERMISSION_OCR_DOCUMENT_DELETE, PERMISSION_DOCUMENT_TYPE_OCR_SETUP
)
@@ -77,6 +77,27 @@ class DocumentManySubmitView(DocumentSubmitView):
return HttpResponseRedirect(self.get_success_url())
class DocumentTypeSettingsEditView(SingleObjectEditView):
fields = ('auto_ocr',)
view_permission = PERMISSION_DOCUMENT_TYPE_OCR_SETUP
def get_object(self, queryset=None):
document_type = get_object_or_404(DocumentType, pk=self.kwargs['pk'])
instance, created = DocumentTypeSettings.objects.get_or_create(document_type=document_type)
return instance
def get_context_data(self, **kwargs):
context = super(DocumentTypeSettingsEditView, self).get_context_data(**kwargs)
context.update(
{
'title': _('Edit OCR settings for document type: %s') % self.get_object().document_type
}
)
return context
def document_content(request, document_id):
document = get_object_or_404(Document, pk=document_id)