From b0e179309349aac8ec3b035f3489cd13e51a8389 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 10 Aug 2026 09:04:16 -0700 Subject: [PATCH] Checks for remote_ocr_mode and fix import --- src/paperless/checks.py | 20 +++++++++++++++++--- src/paperless/tests/test_checks.py | 17 +++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/paperless/checks.py b/src/paperless/checks.py index aea335343..d39169978 100644 --- a/src/paperless/checks.py +++ b/src/paperless/checks.py @@ -339,16 +339,30 @@ def check_deprecated_v2_ocr_env_vars( @register() def check_remote_parser_configured(app_configs: Any, **kwargs: Any) -> list[Error]: + # Import here because checks.py runs before the app registry is ready + from paperless.models import RemoteOCRMode + + errors = [] + if settings.REMOTE_OCR_ENGINE == "azureai" and not ( settings.REMOTE_OCR_ENDPOINT and settings.REMOTE_OCR_API_KEY ): - return [ + errors.append( Error( "Azure AI remote parser requires endpoint and API key to be configured.", ), - ] + ) - return [] + valid_modes = {mode.value for mode in RemoteOCRMode} + if settings.REMOTE_OCR_MODE not in valid_modes: + errors.append( + Error( + f"PAPERLESS_REMOTE_OCR_MODE is set to {settings.REMOTE_OCR_MODE!r}, " + f"expected one of {sorted(valid_modes)}.", + ), + ) + + return errors def get_tesseract_langs(): diff --git a/src/paperless/tests/test_checks.py b/src/paperless/tests/test_checks.py index e5fef4629..6cbc94ebc 100644 --- a/src/paperless/tests/test_checks.py +++ b/src/paperless/tests/test_checks.py @@ -655,6 +655,23 @@ class TestRemoteParserChecks: in msg.msg ) + def test_valid_mode(self, settings: SettingsWrapper) -> None: + settings.REMOTE_OCR_ENGINE = None + settings.REMOTE_OCR_MODE = "workflow_only" + + msgs = check_remote_parser_configured(None) + + assert len(msgs) == 0 + + def test_invalid_mode(self, settings: SettingsWrapper) -> None: + settings.REMOTE_OCR_ENGINE = None + settings.REMOTE_OCR_MODE = "sometimes" + + msgs = check_remote_parser_configured(None) + + assert len(msgs) == 1 + assert "PAPERLESS_REMOTE_OCR_MODE is set to 'sometimes'" in msgs[0].msg + class TestTesseractChecks: def test_default_language(self) -> None: