From 2037ba412398639d6d455c0f08a4ec5920206c77 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 8 Apr 2025 16:42:18 -0700 Subject: [PATCH] Merge checks --- src/documents/__init__.py | 6 +- src/documents/checks.py | 88 ------------------------------ src/documents/tests/test_checks.py | 6 +- src/paperless/__init__.py | 4 ++ src/paperless/checks.py | 83 ++++++++++++++++++++++++++++ 5 files changed, 91 insertions(+), 96 deletions(-) delete mode 100644 src/documents/checks.py diff --git a/src/documents/__init__.py b/src/documents/__init__.py index dd8c76d19..a9a2c5b3b 100644 --- a/src/documents/__init__.py +++ b/src/documents/__init__.py @@ -1,5 +1 @@ -# this is here so that django finds the checks. -from documents.checks import changed_password_check -from documents.checks import parser_check - -__all__ = ["changed_password_check", "parser_check"] +__all__ = [] diff --git a/src/documents/checks.py b/src/documents/checks.py deleted file mode 100644 index f0a5996f7..000000000 --- a/src/documents/checks.py +++ /dev/null @@ -1,88 +0,0 @@ -import textwrap - -from django.conf import settings -from django.core.checks import Error -from django.core.checks import Warning -from django.core.checks import register -from django.core.exceptions import FieldError -from django.db.utils import OperationalError -from django.db.utils import ProgrammingError - -from documents.signals import document_consumer_declaration -from documents.templating.utils import convert_format_str_to_template_format - - -@register() -def changed_password_check(app_configs, **kwargs): - from paperless.db import GnuPG - from paperless.models import Document - - try: - encrypted_doc = ( - Document.objects.filter( - storage_type=Document.STORAGE_TYPE_GPG, - ) - .only("pk", "storage_type") - .first() - ) - except (OperationalError, ProgrammingError, FieldError): - return [] # No documents table yet - - if encrypted_doc: - if not settings.PASSPHRASE: - return [ - Error( - "The database contains encrypted documents but no password is set.", - ), - ] - - if not GnuPG.decrypted(encrypted_doc.source_file): - return [ - Error( - textwrap.dedent( - """ - The current password doesn't match the password of the - existing documents. - - If you intend to change your password, you must first export - all of the old documents, start fresh with the new password - and then re-import them." - """, - ), - ), - ] - - return [] - - -@register() -def parser_check(app_configs, **kwargs): - parsers = [] - for response in document_consumer_declaration.send(None): - parsers.append(response[1]) - - if len(parsers) == 0: - return [ - Error( - "No parsers found. This is a bug. The consumer won't be " - "able to consume any documents without parsers.", - ), - ] - else: - return [] - - -@register() -def filename_format_check(app_configs, **kwargs): - if settings.FILENAME_FORMAT: - converted_format = convert_format_str_to_template_format( - settings.FILENAME_FORMAT, - ) - if converted_format != settings.FILENAME_FORMAT: - return [ - Warning( - f"Filename format {settings.FILENAME_FORMAT} is using the old style, please update to use double curly brackets", - hint=converted_format, - ), - ] - return [] diff --git a/src/documents/tests/test_checks.py b/src/documents/tests/test_checks.py index c10eaa0c2..8f6ab795b 100644 --- a/src/documents/tests/test_checks.py +++ b/src/documents/tests/test_checks.py @@ -6,10 +6,10 @@ from django.core.checks import Warning from django.test import TestCase from django.test import override_settings -from documents.checks import changed_password_check -from documents.checks import filename_format_check -from documents.checks import parser_check from documents.tests.factories import DocumentFactory +from paperless.checks import changed_password_check +from paperless.checks import filename_format_check +from paperless.checks import parser_check from paperless.models import Document diff --git a/src/paperless/__init__.py b/src/paperless/__init__.py index ac8326935..a700b3aec 100644 --- a/src/paperless/__init__.py +++ b/src/paperless/__init__.py @@ -1,6 +1,8 @@ from paperless.celery import app as celery_app from paperless.checks import audit_log_check from paperless.checks import binaries_check +from paperless.checks import changed_password_check +from paperless.checks import parser_check from paperless.checks import paths_check from paperless.checks import settings_values_check @@ -8,6 +10,8 @@ __all__ = [ "audit_log_check", "binaries_check", "celery_app", + "changed_password_check", + "parser_check", "paths_check", "settings_values_check", ] diff --git a/src/paperless/checks.py b/src/paperless/checks.py index 150fcb201..7aac6da0e 100644 --- a/src/paperless/checks.py +++ b/src/paperless/checks.py @@ -3,12 +3,19 @@ import os import pwd import shutil import stat +import textwrap from django.conf import settings from django.core.checks import Error from django.core.checks import Warning from django.core.checks import register +from django.core.exceptions import FieldError from django.db import connections +from django.db.utils import OperationalError +from django.db.utils import ProgrammingError + +from documents.signals import document_consumer_declaration +from documents.templating.utils import convert_format_str_to_template_format exists_message = "{} is set but doesn't exist." exists_hint = "Create a directory at {}" @@ -212,3 +219,79 @@ def audit_log_check(app_configs, **kwargs): ) return result + + +@register() +def changed_password_check(app_configs, **kwargs): + from paperless.db import GnuPG + from paperless.models import Document + + try: + encrypted_doc = ( + Document.objects.filter( + storage_type=Document.STORAGE_TYPE_GPG, + ) + .only("pk", "storage_type") + .first() + ) + except (OperationalError, ProgrammingError, FieldError): + return [] # No documents table yet + + if encrypted_doc: + if not settings.PASSPHRASE: + return [ + Error( + "The database contains encrypted documents but no password is set.", + ), + ] + + if not GnuPG.decrypted(encrypted_doc.source_file): + return [ + Error( + textwrap.dedent( + """ + The current password doesn't match the password of the + existing documents. + + If you intend to change your password, you must first export + all of the old documents, start fresh with the new password + and then re-import them." + """, + ), + ), + ] + + return [] + + +@register() +def parser_check(app_configs, **kwargs): + parsers = [] + for response in document_consumer_declaration.send(None): + parsers.append(response[1]) + + if len(parsers) == 0: + return [ + Error( + "No parsers found. This is a bug. The consumer won't be " + "able to consume any documents without parsers.", + ), + ] + else: + return [] + + +@register() +def filename_format_check(app_configs, **kwargs): + if settings.FILENAME_FORMAT: + converted_format = convert_format_str_to_template_format( + settings.FILENAME_FORMAT, + ) + if converted_format != settings.FILENAME_FORMAT: + return [ + Warning( + f"Filename format {settings.FILENAME_FORMAT} is using the old style, please update to use double curly brackets", + hint=converted_format, + ), + ] + return []