Compare commits

...
3 changed files with 78 additions and 6 deletions

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)),
],
),
]
+50
View File
@@ -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:
+7 -6
View File
@@ -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