mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	Adds validation and testing to cover some of the common settings
This commit is contained in:
		| @@ -1,4 +1,5 @@ | ||||
| from .checks import binaries_check | ||||
| from .checks import paths_check | ||||
| from .checks import settings_values_check | ||||
|  | ||||
| __all__ = ["binaries_check", "paths_check"] | ||||
| __all__ = ["binaries_check", "paths_check", "settings_values_check"] | ||||
|   | ||||
| @@ -96,3 +96,52 @@ def debug_mode_check(app_configs, **kwargs): | ||||
|         ] | ||||
|     else: | ||||
|         return [] | ||||
|  | ||||
|  | ||||
| @register() | ||||
| def settings_values_check(app_configs, **kwargs): | ||||
|     """ | ||||
|     Validates at least some of the user provided settings | ||||
|     """ | ||||
|  | ||||
|     def _ocrmypdf_settings_check(): | ||||
|         """ | ||||
|         Validates some of the arguments which will be provided to ocrmypdf | ||||
|         against the valid options.  Use "ocrmypdf --help" to see the valid | ||||
|         inputs | ||||
|         """ | ||||
|         msgs = [] | ||||
|         if settings.OCR_OUTPUT_TYPE not in { | ||||
|             "pdfa", | ||||
|             "pdf", | ||||
|             "pdfa-1", | ||||
|             "pdfa-2", | ||||
|             "pdfa-3", | ||||
|         }: | ||||
|             msgs.append( | ||||
|                 Error(f'OCR output type "{settings.OCR_OUTPUT_TYPE}" is not valid'), | ||||
|             ) | ||||
|  | ||||
|         if settings.OCR_MODE not in {"force", "skip", "redo_ocr"}: | ||||
|             msgs.append(Error(f'OCR output mode "{settings.OCR_MODE}" is not valid')) | ||||
|  | ||||
|         if settings.OCR_CLEAN not in {"clean", "clean_final"}: | ||||
|             msgs.append(Error(f'OCR clean mode "{settings.OCR_CLEAN}" is not valid')) | ||||
|         return msgs | ||||
|  | ||||
|     def _timezone_validate(): | ||||
|         """ | ||||
|         Validates the user provided timezone is a valid timezone | ||||
|         """ | ||||
|         try: | ||||
|             import zoneinfo | ||||
|         except ImportError:  # pragma: nocover | ||||
|             import backports.zoneinfo as zoneinfo | ||||
|         msgs = [] | ||||
|         if settings.TIME_ZONE not in zoneinfo.available_timezones(): | ||||
|             msgs.append( | ||||
|                 Error(f'Timezone "{settings.TIME_ZONE}" is not a valid timezone'), | ||||
|             ) | ||||
|         return msgs | ||||
|  | ||||
|     return _ocrmypdf_settings_check() + _timezone_validate() | ||||
|   | ||||
| @@ -532,11 +532,9 @@ OCR_PAGES = int(os.getenv("PAPERLESS_OCR_PAGES", 0)) | ||||
| OCR_LANGUAGE = os.getenv("PAPERLESS_OCR_LANGUAGE", "eng") | ||||
|  | ||||
| # OCRmyPDF --output-type options are available. | ||||
| # TODO: validate this setting. | ||||
| OCR_OUTPUT_TYPE = os.getenv("PAPERLESS_OCR_OUTPUT_TYPE", "pdfa") | ||||
|  | ||||
| # skip. redo, force | ||||
| # TODO: validate this. | ||||
| OCR_MODE = os.getenv("PAPERLESS_OCR_MODE", "skip") | ||||
|  | ||||
| OCR_IMAGE_DPI = os.getenv("PAPERLESS_OCR_IMAGE_DPI") | ||||
|   | ||||
| @@ -1,12 +1,12 @@ | ||||
| import os | ||||
| import shutil | ||||
|  | ||||
| from django.test import override_settings | ||||
| from django.test import TestCase | ||||
| from documents.tests.utils import DirectoriesMixin | ||||
| from paperless import binaries_check | ||||
| from paperless import paths_check | ||||
| from paperless.checks import binaries_check | ||||
| from paperless.checks import debug_mode_check | ||||
| from paperless.checks import paths_check | ||||
| from paperless.checks import settings_values_check | ||||
|  | ||||
|  | ||||
| class TestChecks(DirectoriesMixin, TestCase): | ||||
| @@ -54,3 +54,89 @@ class TestChecks(DirectoriesMixin, TestCase): | ||||
|     @override_settings(DEBUG=True) | ||||
|     def test_debug_enabled(self): | ||||
|         self.assertEqual(len(debug_mode_check(None)), 1) | ||||
|  | ||||
|  | ||||
| class TestSettingsChecks(DirectoriesMixin, TestCase): | ||||
|     def test_all_valid(self): | ||||
|         """ | ||||
|         GIVEN: | ||||
|             - Default settings | ||||
|         WHEN: | ||||
|             - Settings are validated | ||||
|         THEN: | ||||
|             - No system check errors reported | ||||
|         """ | ||||
|         msgs = settings_values_check(None) | ||||
|         self.assertEqual(len(msgs), 0) | ||||
|  | ||||
|     @override_settings(OCR_OUTPUT_TYPE="notapdf") | ||||
|     def test_invalid_output_type(self): | ||||
|         """ | ||||
|         GIVEN: | ||||
|             - Default settings | ||||
|             - OCR output type is invalid | ||||
|         WHEN: | ||||
|             - Settings are validated | ||||
|         THEN: | ||||
|             - system check error reported for OCR output type | ||||
|         """ | ||||
|         msgs = settings_values_check(None) | ||||
|         self.assertEqual(len(msgs), 1) | ||||
|  | ||||
|         msg = msgs[0] | ||||
|  | ||||
|         self.assertIn('OCR output type "notapdf"', msg.msg) | ||||
|  | ||||
|     @override_settings(OCR_MODE="makeitso") | ||||
|     def test_invalid_ocr_type(self): | ||||
|         """ | ||||
|         GIVEN: | ||||
|             - Default settings | ||||
|             - OCR type is invalid | ||||
|         WHEN: | ||||
|             - Settings are validated | ||||
|         THEN: | ||||
|             - system check error reported for OCR type | ||||
|         """ | ||||
|         msgs = settings_values_check(None) | ||||
|         self.assertEqual(len(msgs), 1) | ||||
|  | ||||
|         msg = msgs[0] | ||||
|  | ||||
|         self.assertIn('OCR output mode "makeitso"', msg.msg) | ||||
|  | ||||
|     @override_settings(OCR_CLEAN="cleanme") | ||||
|     def test_invalid_ocr_clean(self): | ||||
|         """ | ||||
|         GIVEN: | ||||
|             - Default settings | ||||
|             - OCR cleaning type is invalid | ||||
|         WHEN: | ||||
|             - Settings are validated | ||||
|         THEN: | ||||
|             - system check error reported for OCR cleaning type | ||||
|         """ | ||||
|         msgs = settings_values_check(None) | ||||
|         self.assertEqual(len(msgs), 1) | ||||
|  | ||||
|         msg = msgs[0] | ||||
|  | ||||
|         self.assertIn('OCR clean mode "cleanme"', msg.msg) | ||||
|  | ||||
|     @override_settings(TIME_ZONE="TheMoon\\MyCrater") | ||||
|     def test_invalid_timezone(self): | ||||
|         """ | ||||
|         GIVEN: | ||||
|             - Default settings | ||||
|             - Timezone is invalid | ||||
|         WHEN: | ||||
|             - Settings are validated | ||||
|         THEN: | ||||
|             - system check error reported for timezone | ||||
|         """ | ||||
|         msgs = settings_values_check(None) | ||||
|         self.assertEqual(len(msgs), 1) | ||||
|  | ||||
|         msg = msgs[0] | ||||
|  | ||||
|         self.assertIn('Timezone "TheMoon\\MyCrater"', msg.msg) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Trenton Holmes
					Trenton Holmes