Move document type's OCR settings from the documents app to the OCR app
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
24
mayan/apps/documents/migrations/0008_auto_20150624_0520.py
Normal file
24
mayan/apps/documents/migrations/0008_auto_20150624_0520.py
Normal file
File diff suppressed because one or more lines are too long
@@ -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):
|
||||
|
||||
@@ -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())}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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])
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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')
|
||||
|
||||
28
mayan/apps/ocr/migrations/0004_documenttypesettings.py
Normal file
28
mayan/apps/ocr/migrations/0004_documenttypesettings.py
Normal 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,),
|
||||
),
|
||||
]
|
||||
@@ -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
|
||||
|
||||
@@ -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'))
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user