From 72b91b79ac63d7bc50be6b12ce9a82e6576664fa Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 24 Jun 2015 01:52:33 -0400 Subject: [PATCH] Move document type's OCR settings from the documents app to the OCR app --- mayan/apps/documents/forms.py | 2 +- .../migrations/0008_auto_20150624_0520.py | 24 +++++++++++++++ mayan/apps/documents/models.py | 3 -- mayan/apps/documents/views.py | 1 - mayan/apps/ocr/admin.py | 3 +- mayan/apps/ocr/apps.py | 14 +++++---- mayan/apps/ocr/handlers.py | 2 +- mayan/apps/ocr/links.py | 3 +- .../migrations/0004_documenttypesettings.py | 28 ++++++++++++++++++ mayan/apps/ocr/models.py | 14 ++++++++- mayan/apps/ocr/permissions.py | 1 + mayan/apps/ocr/urls.py | 5 +++- mayan/apps/ocr/views.py | 29 ++++++++++++++++--- 13 files changed, 110 insertions(+), 19 deletions(-) create mode 100644 mayan/apps/documents/migrations/0008_auto_20150624_0520.py create mode 100644 mayan/apps/ocr/migrations/0004_documenttypesettings.py diff --git a/mayan/apps/documents/forms.py b/mayan/apps/documents/forms.py index 9158c5b2f3..56307a84d2 100644 --- a/mayan/apps/documents/forms.py +++ b/mayan/apps/documents/forms.py @@ -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 diff --git a/mayan/apps/documents/migrations/0008_auto_20150624_0520.py b/mayan/apps/documents/migrations/0008_auto_20150624_0520.py new file mode 100644 index 0000000000..8c6d71b59c --- /dev/null +++ b/mayan/apps/documents/migrations/0008_auto_20150624_0520.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '0007_remove_documentpage_page_label'), + ] + + operations = [ + migrations.RemoveField( + model_name='documenttype', + name='ocr', + ), + migrations.AlterField( + model_name='document', + name='language', + field=models.CharField(default=b'eng', max_length=8, verbose_name='Language', choices=[[b'aar', b'Afar'], [b'abk', b'Abkhazian'], [b'ace', b'Achinese'], [b'ach', b'Acoli'], [b'ada', b'Adangme'], [b'ady', b'Adyghe; Adygei'], [b'afa', b'Afro-Asiatic languages'], [b'afh', b'Afrihili'], [b'afr', b'Afrikaans'], [b'ain', b'Ainu'], [b'aka', b'Akan'], [b'akk', b'Akkadian'], [b'alb', b'Albanian'], [b'ale', b'Aleut'], [b'alg', b'Algonquian languages'], [b'alt', b'Southern Altai'], [b'amh', b'Amharic'], [b'ang', b'English, Old (ca. 450-1100)'], [b'anp', b'Angika'], [b'apa', b'Apache languages'], [b'ara', b'Arabic'], [b'arc', b'Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE)'], [b'arg', b'Aragonese'], [b'arm', b'Armenian'], [b'arn', b'Mapudungun; Mapuche'], [b'arp', b'Arapaho'], [b'art', b'Artificial languages'], [b'arw', b'Arawak'], [b'asm', b'Assamese'], [b'ast', b'Asturian; Bable; Leonese; Asturleonese'], [b'ath', b'Athapascan languages'], [b'aus', b'Australian languages'], [b'ava', b'Avaric'], [b'ave', b'Avestan'], [b'awa', b'Awadhi'], [b'aym', b'Aymara'], [b'aze', b'Azerbaijani'], [b'bad', b'Banda languages'], [b'bai', b'Bamileke languages'], [b'bak', b'Bashkir'], [b'bal', b'Baluchi'], [b'bam', b'Bambara'], [b'ban', b'Balinese'], [b'baq', b'Basque'], [b'bas', b'Basa'], [b'bat', b'Baltic languages'], [b'bej', b'Beja; Bedawiyet'], [b'bel', b'Belarusian'], [b'bem', b'Bemba'], [b'ben', b'Bengali'], [b'ber', b'Berber languages'], [b'bho', b'Bhojpuri'], [b'bih', b'Bihari languages'], [b'bik', b'Bikol'], [b'bin', b'Bini; Edo'], [b'bis', b'Bislama'], [b'bla', b'Siksika'], [b'bnt', b'Bantu languages'], [b'bos', b'Bosnian'], [b'bra', b'Braj'], [b'bre', b'Breton'], [b'btk', b'Batak languages'], [b'bua', b'Buriat'], [b'bug', b'Buginese'], [b'bul', b'Bulgarian'], [b'bur', b'Burmese'], [b'byn', b'Blin; Bilin'], [b'cad', b'Caddo'], [b'cai', b'Central American Indian languages'], [b'car', b'Galibi Carib'], [b'cat', b'Catalan; Valencian'], [b'cau', b'Caucasian languages'], [b'ceb', b'Cebuano'], [b'cel', b'Celtic languages'], [b'cha', b'Chamorro'], [b'chb', b'Chibcha'], [b'che', b'Chechen'], [b'chg', b'Chagatai'], [b'chi', b'Chinese'], [b'chk', b'Chuukese'], [b'chm', b'Mari'], [b'chn', b'Chinook jargon'], [b'cho', b'Choctaw'], [b'chp', b'Chipewyan; Dene Suline'], [b'chr', b'Cherokee'], [b'chu', b'Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic'], [b'chv', b'Chuvash'], [b'chy', b'Cheyenne'], [b'cmc', b'Chamic languages'], [b'cop', b'Coptic'], [b'cor', b'Cornish'], [b'cos', b'Corsican'], [b'cpe', b'Creoles and pidgins, English based'], [b'cpf', b'Creoles and pidgins, French-based'], [b'cpp', b'Creoles and pidgins, Portuguese-based'], [b'cre', b'Cree'], [b'crh', b'Crimean Tatar; Crimean Turkish'], [b'crp', b'Creoles and pidgins'], [b'csb', b'Kashubian'], [b'cus', b'Cushitic languages'], [b'cze', b'Czech'], [b'dak', b'Dakota'], [b'dan', b'Danish'], [b'dar', b'Dargwa'], [b'day', b'Land Dayak languages'], [b'del', b'Delaware'], [b'den', b'Slave (Athapascan)'], [b'dgr', b'Dogrib'], [b'din', b'Dinka'], [b'div', b'Divehi; Dhivehi; Maldivian'], [b'doi', b'Dogri'], [b'dra', b'Dravidian languages'], [b'dsb', b'Lower Sorbian'], [b'dua', b'Duala'], [b'dum', b'Dutch, Middle (ca. 1050-1350)'], [b'dut', b'Dutch; Flemish'], [b'dyu', b'Dyula'], [b'dzo', b'Dzongkha'], [b'efi', b'Efik'], [b'egy', b'Egyptian (Ancient)'], [b'eka', b'Ekajuk'], [b'elx', b'Elamite'], [b'eng', b'English'], [b'enm', b'English, Middle (1100-1500)'], [b'epo', b'Esperanto'], [b'est', b'Estonian'], [b'ewe', b'Ewe'], [b'ewo', b'Ewondo'], [b'fan', b'Fang'], [b'fao', b'Faroese'], [b'fat', b'Fanti'], [b'fij', b'Fijian'], [b'fil', b'Filipino; Pilipino'], [b'fin', b'Finnish'], [b'fiu', b'Finno-Ugrian languages'], [b'fon', b'Fon'], [b'fre', b'French'], [b'frm', b'French, Middle (ca. 1400-1600)'], [b'fro', b'French, Old (842-ca. 1400)'], [b'frr', b'Northern Frisian'], [b'frs', b'Eastern Frisian'], [b'fry', b'Western Frisian'], [b'ful', b'Fulah'], [b'fur', b'Friulian'], [b'gaa', b'Ga'], [b'gay', b'Gayo'], [b'gba', b'Gbaya'], [b'gem', b'Germanic languages'], [b'geo', b'Georgian'], [b'ger', b'German'], [b'gez', b'Geez'], [b'gil', b'Gilbertese'], [b'gla', b'Gaelic; Scottish Gaelic'], [b'gle', b'Irish'], [b'glg', b'Galician'], [b'glv', b'Manx'], [b'gmh', b'German, Middle High (ca. 1050-1500)'], [b'goh', b'German, Old High (ca. 750-1050)'], [b'gon', b'Gondi'], [b'gor', b'Gorontalo'], [b'got', b'Gothic'], [b'grb', b'Grebo'], [b'grc', b'Greek, Ancient (to 1453)'], [b'gre', b'Greek, Modern (1453-)'], [b'grn', b'Guarani'], [b'gsw', b'Swiss German; Alemannic; Alsatian'], [b'guj', b'Gujarati'], [b'gwi', b"Gwich'in"], [b'hai', b'Haida'], [b'hat', b'Haitian; Haitian Creole'], [b'hau', b'Hausa'], [b'haw', b'Hawaiian'], [b'heb', b'Hebrew'], [b'her', b'Herero'], [b'hil', b'Hiligaynon'], [b'him', b'Himachali languages; Western Pahari languages'], [b'hin', b'Hindi'], [b'hit', b'Hittite'], [b'hmn', b'Hmong; Mong'], [b'hmo', b'Hiri Motu'], [b'hrv', b'Croatian'], [b'hsb', b'Upper Sorbian'], [b'hun', b'Hungarian'], [b'hup', b'Hupa'], [b'iba', b'Iban'], [b'ibo', b'Igbo'], [b'ice', b'Icelandic'], [b'ido', b'Ido'], [b'iii', b'Sichuan Yi; Nuosu'], [b'ijo', b'Ijo languages'], [b'iku', b'Inuktitut'], [b'ile', b'Interlingue; Occidental'], [b'ilo', b'Iloko'], [b'ina', b'Interlingua (International Auxiliary Language Association)'], [b'inc', b'Indic languages'], [b'ind', b'Indonesian'], [b'ine', b'Indo-European languages'], [b'inh', b'Ingush'], [b'ipk', b'Inupiaq'], [b'ira', b'Iranian languages'], [b'iro', b'Iroquoian languages'], [b'ita', b'Italian'], [b'jav', b'Javanese'], [b'jbo', b'Lojban'], [b'jpn', b'Japanese'], [b'jpr', b'Judeo-Persian'], [b'jrb', b'Judeo-Arabic'], [b'kaa', b'Kara-Kalpak'], [b'kab', b'Kabyle'], [b'kac', b'Kachin; Jingpho'], [b'kal', b'Kalaallisut; Greenlandic'], [b'kam', b'Kamba'], [b'kan', b'Kannada'], [b'kar', b'Karen languages'], [b'kas', b'Kashmiri'], [b'kau', b'Kanuri'], [b'kaw', b'Kawi'], [b'kaz', b'Kazakh'], [b'kbd', b'Kabardian'], [b'kha', b'Khasi'], [b'khi', b'Khoisan languages'], [b'khm', b'Central Khmer'], [b'kho', b'Khotanese;Sakan'], [b'kik', b'Kikuyu; Gikuyu'], [b'kin', b'Kinyarwanda'], [b'kir', b'Kirghiz; Kyrgyz'], [b'kmb', b'Kimbundu'], [b'kok', b'Konkani'], [b'kom', b'Komi'], [b'kon', b'Kongo'], [b'kor', b'Korean'], [b'kos', b'Kosraean'], [b'kpe', b'Kpelle'], [b'krc', b'Karachay-Balkar'], [b'krl', b'Karelian'], [b'kro', b'Kru languages'], [b'kru', b'Kurukh'], [b'kua', b'Kuanyama; Kwanyama'], [b'kum', b'Kumyk'], [b'kur', b'Kurdish'], [b'kut', b'Kutenai'], [b'lad', b'Ladino'], [b'lah', b'Lahnda'], [b'lam', b'Lamba'], [b'lao', b'Lao'], [b'lat', b'Latin'], [b'lav', b'Latvian'], [b'lez', b'Lezghian'], [b'lim', b'Limburgan; Limburger; Limburgish'], [b'lin', b'Lingala'], [b'lit', b'Lithuanian'], [b'lol', b'Mongo'], [b'loz', b'Lozi'], [b'ltz', b'Luxembourgish; Letzeburgesch'], [b'lua', b'Luba-Lulua'], [b'lub', b'Luba-Katanga'], [b'lug', b'Ganda'], [b'lui', b'Luiseno'], [b'lun', b'Lunda'], [b'luo', b'Luo (Kenya and Tanzania)'], [b'lus', b'Lushai'], [b'mac', b'Macedonian'], [b'mad', b'Madurese'], [b'mag', b'Magahi'], [b'mah', b'Marshallese'], [b'mai', b'Maithili'], [b'mak', b'Makasar'], [b'mal', b'Malayalam'], [b'man', b'Mandingo'], [b'mao', b'Maori'], [b'map', b'Austronesian languages'], [b'mar', b'Marathi'], [b'mas', b'Masai'], [b'may', b'Malay'], [b'mdf', b'Moksha'], [b'mdr', b'Mandar'], [b'men', b'Mende'], [b'mga', b'Irish, Middle (900-1200)'], [b'mic', b"Mi'kmaq; Micmac"], [b'min', b'Minangkabau'], [b'mis', b'Uncoded languages'], [b'mkh', b'Mon-Khmer languages'], [b'mlg', b'Malagasy'], [b'mlt', b'Maltese'], [b'mnc', b'Manchu'], [b'mni', b'Manipuri'], [b'mno', b'Manobo languages'], [b'moh', b'Mohawk'], [b'mol', b'Moldavian; Moldovan'], [b'mon', b'Mongolian'], [b'mos', b'Mossi'], [b'mul', b'Multiple languages'], [b'mun', b'Munda languages'], [b'mus', b'Creek'], [b'mwl', b'Mirandese'], [b'mwr', b'Marwari'], [b'myn', b'Mayan languages'], [b'myv', b'Erzya'], [b'nah', b'Nahuatl languages'], [b'nai', b'North American Indian languages'], [b'nap', b'Neapolitan'], [b'nau', b'Nauru'], [b'nav', b'Navajo; Navaho'], [b'nbl', b'Ndebele, South; South Ndebele'], [b'nde', b'Ndebele, North; North Ndebele'], [b'ndo', b'Ndonga'], [b'nds', b'Low German; Low Saxon; German, Low; Saxon, Low'], [b'nep', b'Nepali'], [b'new', b'Nepal Bhasa; Newari'], [b'nia', b'Nias'], [b'nic', b'Niger-Kordofanian languages'], [b'niu', b'Niuean'], [b'nno', b'Norwegian Nynorsk; Nynorsk, Norwegian'], [b'nob', 'Bokm\xe5l, Norwegian; Norwegian Bokm\xe5l'], [b'nog', b'Nogai'], [b'non', b'Norse, Old'], [b'nor', b'Norwegian'], [b'nqo', b"N'Ko"], [b'nso', b'Pedi; Sepedi; Northern Sotho'], [b'nub', b'Nubian languages'], [b'nwc', b'Classical Newari; Old Newari; Classical Nepal Bhasa'], [b'nya', b'Chichewa; Chewa; Nyanja'], [b'nym', b'Nyamwezi'], [b'nyn', b'Nyankole'], [b'nyo', b'Nyoro'], [b'nzi', b'Nzima'], [b'oci', b'Occitan (post 1500)'], [b'oji', b'Ojibwa'], [b'ori', b'Oriya'], [b'orm', b'Oromo'], [b'osa', b'Osage'], [b'oss', b'Ossetian; Ossetic'], [b'ota', b'Turkish, Ottoman (1500-1928)'], [b'oto', b'Otomian languages'], [b'paa', b'Papuan languages'], [b'pag', b'Pangasinan'], [b'pal', b'Pahlavi'], [b'pam', b'Pampanga; Kapampangan'], [b'pan', b'Panjabi; Punjabi'], [b'pap', b'Papiamento'], [b'pau', b'Palauan'], [b'peo', b'Persian, Old (ca. 600-400 B.C.)'], [b'per', b'Persian'], [b'phi', b'Philippine languages'], [b'phn', b'Phoenician'], [b'pli', b'Pali'], [b'pol', b'Polish'], [b'pon', b'Pohnpeian'], [b'por', b'Portuguese'], [b'pra', b'Prakrit languages'], [b'pro', 'Proven\xe7al, Old (to 1500); Occitan, Old (to 1500)'], [b'pus', b'Pushto; Pashto'], [b'qaa-qtz', b'Reserved for local use'], [b'que', b'Quechua'], [b'raj', b'Rajasthani'], [b'rap', b'Rapanui'], [b'rar', b'Rarotongan; Cook Islands Maori'], [b'roa', b'Romance languages'], [b'roh', b'Romansh'], [b'rom', b'Romany'], [b'rum', b'Romanian'], [b'run', b'Rundi'], [b'rup', b'Aromanian; Arumanian; Macedo-Romanian'], [b'rus', b'Russian'], [b'sad', b'Sandawe'], [b'sag', b'Sango'], [b'sah', b'Yakut'], [b'sai', b'South American Indian languages'], [b'sal', b'Salishan languages'], [b'sam', b'Samaritan Aramaic'], [b'san', b'Sanskrit'], [b'sas', b'Sasak'], [b'sat', b'Santali'], [b'scn', b'Sicilian'], [b'sco', b'Scots'], [b'sel', b'Selkup'], [b'sem', b'Semitic languages'], [b'sga', b'Irish, Old (to 900)'], [b'sgn', b'Sign Languages'], [b'shn', b'Shan'], [b'sid', b'Sidamo'], [b'sin', b'Sinhala; Sinhalese'], [b'sio', b'Siouan languages'], [b'sit', b'Sino-Tibetan languages'], [b'sla', b'Slavic languages'], [b'slo', b'Slovak'], [b'slv', b'Slovenian'], [b'sma', b'Southern Sami'], [b'sme', b'Northern Sami'], [b'smi', b'Sami languages'], [b'smj', b'Lule Sami'], [b'smn', b'Inari Sami'], [b'smo', b'Samoan'], [b'sms', b'Skolt Sami'], [b'sna', b'Shona'], [b'snd', b'Sindhi'], [b'snk', b'Soninke'], [b'sog', b'Sogdian'], [b'som', b'Somali'], [b'son', b'Songhai languages'], [b'sot', b'Sotho, Southern'], [b'spa', b'Spanish; Castilian'], [b'srd', b'Sardinian'], [b'srn', b'Sranan Tongo'], [b'srp', b'Serbian'], [b'srr', b'Serer'], [b'ssa', b'Nilo-Saharan languages'], [b'ssw', b'Swati'], [b'suk', b'Sukuma'], [b'sun', b'Sundanese'], [b'sus', b'Susu'], [b'sux', b'Sumerian'], [b'swa', b'Swahili'], [b'swe', b'Swedish'], [b'syc', b'Classical Syriac'], [b'syr', b'Syriac'], [b'tah', b'Tahitian'], [b'tai', b'Tai languages'], [b'tam', b'Tamil'], [b'tat', b'Tatar'], [b'tel', b'Telugu'], [b'tem', b'Timne'], [b'ter', b'Tereno'], [b'tet', b'Tetum'], [b'tgk', b'Tajik'], [b'tgl', b'Tagalog'], [b'tha', b'Thai'], [b'tib', b'Tibetan'], [b'tig', b'Tigre'], [b'tir', b'Tigrinya'], [b'tiv', b'Tiv'], [b'tkl', b'Tokelau'], [b'tlh', b'Klingon; tlhIngan-Hol'], [b'tli', b'Tlingit'], [b'tmh', b'Tamashek'], [b'tog', b'Tonga (Nyasa)'], [b'ton', b'Tonga (Tonga Islands)'], [b'tpi', b'Tok Pisin'], [b'tsi', b'Tsimshian'], [b'tsn', b'Tswana'], [b'tso', b'Tsonga'], [b'tuk', b'Turkmen'], [b'tum', b'Tumbuka'], [b'tup', b'Tupi languages'], [b'tur', b'Turkish'], [b'tut', b'Altaic languages'], [b'tvl', b'Tuvalu'], [b'twi', b'Twi'], [b'tyv', b'Tuvinian'], [b'udm', b'Udmurt'], [b'uga', b'Ugaritic'], [b'uig', b'Uighur; Uyghur'], [b'ukr', b'Ukrainian'], [b'umb', b'Umbundu'], [b'und', b'Undetermined'], [b'urd', b'Urdu'], [b'uzb', b'Uzbek'], [b'vai', b'Vai'], [b'ven', b'Venda'], [b'vie', b'Vietnamese'], [b'vol', 'Volap\xfck'], [b'vot', b'Votic'], [b'wak', b'Wakashan languages'], [b'wal', b'Wolaitta; Wolaytta'], [b'war', b'Waray'], [b'was', b'Washo'], [b'wel', b'Welsh'], [b'wen', b'Sorbian languages'], [b'wln', b'Walloon'], [b'wol', b'Wolof'], [b'xal', b'Kalmyk; Oirat'], [b'xho', b'Xhosa'], [b'yao', b'Yao'], [b'yap', b'Yapese'], [b'yid', b'Yiddish'], [b'yor', b'Yoruba'], [b'ypk', b'Yupik languages'], [b'zap', b'Zapotec'], [b'zbl', b'Blissymbols; Blissymbolics; Bliss'], [b'zen', b'Zenaga'], [b'zgh', b'Standard Moroccan Tamazight'], [b'zha', b'Zhuang; Chuang'], [b'znd', b'Zande languages'], [b'zul', b'Zulu'], [b'zun', b'Zuni'], [b'zxx', b'No linguistic content; Not applicable'], [b'zza', b'Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki']]), + preserve_default=True, + ), + ] diff --git a/mayan/apps/documents/models.py b/mayan/apps/documents/models.py index f3837b3c17..47ed3fe8a5 100644 --- a/mayan/apps/documents/models.py +++ b/mayan/apps/documents/models.py @@ -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): diff --git a/mayan/apps/documents/views.py b/mayan/apps/documents/views.py index bac4cfdbc1..362086947d 100644 --- a/mayan/apps/documents/views.py +++ b/mayan/apps/documents/views.py @@ -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())} ] } diff --git a/mayan/apps/ocr/admin.py b/mayan/apps/ocr/admin.py index cd434cc85f..d9b358cf5b 100644 --- a/mayan/apps/ocr/admin.py +++ b/mayan/apps/ocr/admin.py @@ -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) diff --git a/mayan/apps/ocr/apps.py b/mayan/apps/ocr/apps.py index 657c7edde5..8bac3d4bcd 100644 --- a/mayan/apps/ocr/apps.py +++ b/mayan/apps/ocr/apps.py @@ -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]) diff --git a/mayan/apps/ocr/handlers.py b/mayan/apps/ocr/handlers.py index cfbb7e8648..f9e35fa6fc 100644 --- a/mayan/apps/ocr/handlers.py +++ b/mayan/apps/ocr/handlers.py @@ -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() diff --git a/mayan/apps/ocr/links.py b/mayan/apps/ocr/links.py index e6196dedf2..6bfce33c7e 100644 --- a/mayan/apps/ocr/links.py +++ b/mayan/apps/ocr/links.py @@ -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') diff --git a/mayan/apps/ocr/migrations/0004_documenttypesettings.py b/mayan/apps/ocr/migrations/0004_documenttypesettings.py new file mode 100644 index 0000000000..ba81b1c7a4 --- /dev/null +++ b/mayan/apps/ocr/migrations/0004_documenttypesettings.py @@ -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,), + ), + ] diff --git a/mayan/apps/ocr/models.py b/mayan/apps/ocr/models.py index cc2210b8b7..d35a1de907 100644 --- a/mayan/apps/ocr/models.py +++ b/mayan/apps/ocr/models.py @@ -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 diff --git a/mayan/apps/ocr/permissions.py b/mayan/apps/ocr/permissions.py index d14cdafcec..038ce7a4e1 100644 --- a/mayan/apps/ocr/permissions.py +++ b/mayan/apps/ocr/permissions.py @@ -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')) diff --git a/mayan/apps/ocr/urls.py b/mayan/apps/ocr/urls.py index f8efb32e0f..5401f162b4 100644 --- a/mayan/apps/ocr/urls.py +++ b/mayan/apps/ocr/urls.py @@ -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\d+)/content/$', 'document_content', name='document_content'), url(r'^document/(?P\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\d+)/ocr/settings/$', DocumentTypeSettingsEditView.as_view(), name='document_type_ocr_settings'), url(r'^all/$', 'entry_list', name='entry_list'), url(r'^(?P\d+)/delete/$', 'entry_delete', name='entry_delete'), diff --git a/mayan/apps/ocr/views.py b/mayan/apps/ocr/views.py index dd01419311..f375b8729b 100644 --- a/mayan/apps/ocr/views.py +++ b/mayan/apps/ocr/views.py @@ -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)