Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
edaeec6382 | ||
|
|
eae7f0da1f | ||
|
|
7927ac4ba8 |
No files matched your search
@@ -0,0 +1,21 @@
|
||||
# Generated by Django 3.1.7 on 2021-03-16 11:26
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('documents', '1014_auto_20210228_1614'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ConfigurationOption',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('key', models.CharField(max_length=128, unique=True)),
|
||||
('value', models.CharField(blank=True, max_length=1024, null=True)),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -411,6 +411,56 @@ class SavedViewFilterRule(models.Model):
|
||||
verbose_name_plural = _("filter rules")
|
||||
|
||||
|
||||
class ConfigurationOptionManager(models.Manager):
|
||||
|
||||
CONFIGURATION_KEYS = {
|
||||
"OCR_MODE": {"type": str, "default": "skip"},
|
||||
"OCR_ROTATE_PAGES": {"type": bool, "default": True}
|
||||
}
|
||||
|
||||
def __getattr__(self, item):
|
||||
if not item in self.CONFIGURATION_KEYS:
|
||||
raise AttributeError()
|
||||
|
||||
query = self.filter(key=item)
|
||||
if query.exists() and query.first().value:
|
||||
return self.CONFIGURATION_KEYS[item]["type"](query.first().value)
|
||||
else:
|
||||
return self._get_default(item)
|
||||
|
||||
def set_config(self, key, value):
|
||||
if key in self.CONFIGURATION_KEYS:
|
||||
if not type(value) == self.CONFIGURATION_KEYS[key]["type"]:
|
||||
raise TypeError()
|
||||
|
||||
self.filter(key=key).update(value=value)
|
||||
else:
|
||||
raise KeyError()
|
||||
|
||||
def _get_default(self, key):
|
||||
if f"PAPERLESS_{key}" in os.environ:
|
||||
return os.environ[f"PAPERLESS_{key}"]
|
||||
elif "default" in self.CONFIGURATION_KEYS[key]:
|
||||
return self.CONFIGURATION_KEYS[key]['default']
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
class ConfigurationOption(models.Model):
|
||||
|
||||
objects = ConfigurationOptionManager()
|
||||
|
||||
key = models.CharField(
|
||||
max_length=128, unique=True)
|
||||
|
||||
value = models.CharField(
|
||||
max_length=1024, blank=True, null=True
|
||||
)
|
||||
|
||||
|
||||
db_settings = ConfigurationOption.objects
|
||||
|
||||
|
||||
# TODO: why is this in the models file?
|
||||
class FileInfo:
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import re
|
||||
from PIL import Image
|
||||
from django.conf import settings
|
||||
|
||||
from documents.models import db_settings
|
||||
from documents.parsers import DocumentParser, ParseError, \
|
||||
make_thumbnail_from_pdf
|
||||
|
||||
@@ -143,15 +144,15 @@ class RasterisedDocumentParser(DocumentParser):
|
||||
'progress_bar': False
|
||||
}
|
||||
|
||||
if settings.OCR_MODE == 'force' or safe_fallback:
|
||||
if db_settings.OCR_MODE == 'force' or safe_fallback:
|
||||
ocrmypdf_args['force_ocr'] = True
|
||||
elif settings.OCR_MODE in ['skip', 'skip_noarchive']:
|
||||
elif db_settings.OCR_MODE in ['skip', 'skip_noarchive']:
|
||||
ocrmypdf_args['skip_text'] = True
|
||||
elif settings.OCR_MODE == 'redo':
|
||||
elif db_settings.OCR_MODE == 'redo':
|
||||
ocrmypdf_args['redo_ocr'] = True
|
||||
else:
|
||||
raise ParseError(
|
||||
f"Invalid ocr mode: {settings.OCR_MODE}")
|
||||
f"Invalid ocr mode: {db_settings.OCR_MODE}")
|
||||
|
||||
if settings.OCR_CLEAN == 'clean':
|
||||
ocrmypdf_args['clean'] = True
|
||||
@@ -161,7 +162,7 @@ class RasterisedDocumentParser(DocumentParser):
|
||||
else:
|
||||
ocrmypdf_args['clean_final'] = True
|
||||
|
||||
if settings.OCR_DESKEW and not settings.OCR_MODE == 'redo':
|
||||
if settings.OCR_DESKEW and not db_settings.OCR_MODE == 'redo':
|
||||
ocrmypdf_args['deskew'] = True
|
||||
|
||||
if settings.OCR_ROTATE_PAGES:
|
||||
@@ -212,7 +213,7 @@ class RasterisedDocumentParser(DocumentParser):
|
||||
text_original = self.extract_text(None, document_path)
|
||||
original_has_text = text_original and len(text_original) > 50
|
||||
|
||||
if settings.OCR_MODE == "skip_noarchive" and original_has_text:
|
||||
if db_settings.OCR_MODE == "skip_noarchive" and original_has_text:
|
||||
self.log("debug",
|
||||
"Document has text, skipping OCRmyPDF entirely.")
|
||||
self.text = text_original
|
||||
|
||||
Reference in new issue
Block a user