mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-05-01 11:19:32 -05:00
84 lines
2.2 KiB
Python
84 lines
2.2 KiB
Python
import logging
|
|
import os
|
|
from subprocess import Popen
|
|
|
|
from django.conf import settings
|
|
from django.contrib.admin.models import ADDITION, LogEntry
|
|
from django.contrib.auth.models import User
|
|
from django.contrib.contenttypes.models import ContentType
|
|
from django.utils import timezone
|
|
|
|
from documents.classifier import DocumentClassifier
|
|
from ..models import Correspondent, Document, Tag, DocumentType
|
|
|
|
|
|
def logger(message, group):
|
|
logging.getLogger(__name__).debug(message, extra={"group": group})
|
|
|
|
|
|
classifier = DocumentClassifier()
|
|
|
|
|
|
def classify_document(sender, document=None, logging_group=None, **kwargs):
|
|
global classifier
|
|
try:
|
|
classifier.reload()
|
|
classifier.classify_document(document, classify_correspondent=True, classify_tags=True, classify_type=True)
|
|
except FileNotFoundError:
|
|
logging.getLogger(__name__).fatal("Cannot classify document, classifier model file was not found.")
|
|
|
|
|
|
|
|
|
|
def run_pre_consume_script(sender, filename, **kwargs):
|
|
|
|
if not settings.PRE_CONSUME_SCRIPT:
|
|
return
|
|
|
|
Popen((settings.PRE_CONSUME_SCRIPT, filename)).wait()
|
|
|
|
|
|
def run_post_consume_script(sender, document, **kwargs):
|
|
|
|
if not settings.POST_CONSUME_SCRIPT:
|
|
return
|
|
|
|
Popen((
|
|
settings.POST_CONSUME_SCRIPT,
|
|
str(document.id),
|
|
document.file_name,
|
|
document.source_path,
|
|
document.thumbnail_path,
|
|
document.download_url,
|
|
document.thumbnail_url,
|
|
str(document.correspondent),
|
|
str(",".join(document.tags.all().values_list("slug", flat=True)))
|
|
)).wait()
|
|
|
|
|
|
def cleanup_document_deletion(sender, instance, using, **kwargs):
|
|
|
|
if not isinstance(instance, Document):
|
|
return
|
|
|
|
for f in (instance.source_path, instance.thumbnail_path):
|
|
try:
|
|
os.unlink(f)
|
|
except FileNotFoundError:
|
|
pass # The file's already gone, so we're cool with it.
|
|
|
|
|
|
def set_log_entry(sender, document=None, logging_group=None, **kwargs):
|
|
|
|
ct = ContentType.objects.get(model="document")
|
|
user = User.objects.get(username="consumer")
|
|
|
|
LogEntry.objects.create(
|
|
action_flag=ADDITION,
|
|
action_time=timezone.now(),
|
|
content_type=ct,
|
|
object_id=document.id,
|
|
user=user,
|
|
object_repr=document.__str__(),
|
|
)
|