From 6658d94f77a92ee6fcc660de8a93a4ae55c8ef23 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Thu, 26 Mar 2026 13:39:49 -0700 Subject: [PATCH] feat!: drop skip_archive_file field, add archive_file_generation to ApplicationConfiguration Replace the old skip_archive_file DB field with the correctly-named archive_file_generation field on ApplicationConfiguration. Remove the temporary getattr fallback in OcrConfig now that the migration exists. Update all test fixtures and API response assertions to use the new field name. Co-Authored-By: Claude Sonnet 4.6 --- src/documents/tests/test_api_app_config.py | 2 +- src/paperless/config.py | 11 ++--- .../0008_replace_skip_archive_file.py | 44 +++++++++++++++++++ src/paperless/models.py | 6 +-- src/paperless/tests/parsers/conftest.py | 1 - src/paperless/tests/test_ocr_config.py | 1 - 6 files changed, 51 insertions(+), 14 deletions(-) create mode 100644 src/paperless/migrations/0008_replace_skip_archive_file.py diff --git a/src/documents/tests/test_api_app_config.py b/src/documents/tests/test_api_app_config.py index b946bc1bf..e7b599cbb 100644 --- a/src/documents/tests/test_api_app_config.py +++ b/src/documents/tests/test_api_app_config.py @@ -46,7 +46,7 @@ class TestApiAppConfig(DirectoriesMixin, APITestCase): "pages": None, "language": None, "mode": None, - "skip_archive_file": None, + "archive_file_generation": None, "image_dpi": None, "unpaper_clean": None, "deskew": None, diff --git a/src/paperless/config.py b/src/paperless/config.py index 77fd8ce32..50cd80b6a 100644 --- a/src/paperless/config.py +++ b/src/paperless/config.py @@ -64,14 +64,9 @@ class OcrConfig(OutputTypeConfig): self.pages = app_config.pages or settings.OCR_PAGES self.language = app_config.language or settings.OCR_LANGUAGE self.mode = app_config.mode or settings.OCR_MODE - # Task 4 renames the DB field from skip_archive_file to archive_file_generation. - # Until that migration runs, fall back to the old field name. - _db_archive = getattr( - app_config, - "archive_file_generation", - None, - ) or getattr(app_config, "skip_archive_file", None) - self.archive_file_generation = _db_archive or settings.ARCHIVE_FILE_GENERATION + self.archive_file_generation = ( + app_config.archive_file_generation or settings.ARCHIVE_FILE_GENERATION + ) self.image_dpi = app_config.image_dpi or settings.OCR_IMAGE_DPI self.clean = app_config.unpaper_clean or settings.OCR_CLEAN self.deskew = ( diff --git a/src/paperless/migrations/0008_replace_skip_archive_file.py b/src/paperless/migrations/0008_replace_skip_archive_file.py new file mode 100644 index 000000000..b80512f76 --- /dev/null +++ b/src/paperless/migrations/0008_replace_skip_archive_file.py @@ -0,0 +1,44 @@ +# Generated by Django 5.2.12 on 2026-03-26 20:31 + +from django.db import migrations +from django.db import models + + +class Migration(migrations.Migration): + dependencies = [ + ("paperless", "0007_optimize_integer_field_sizes"), + ] + + operations = [ + migrations.RemoveField( + model_name="applicationconfiguration", + name="skip_archive_file", + ), + migrations.AddField( + model_name="applicationconfiguration", + name="archive_file_generation", + field=models.CharField( + blank=True, + choices=[("auto", "auto"), ("always", "always"), ("never", "never")], + max_length=8, + null=True, + verbose_name="Controls archive file generation", + ), + ), + migrations.AlterField( + model_name="applicationconfiguration", + name="mode", + field=models.CharField( + blank=True, + choices=[ + ("auto", "auto"), + ("force", "force"), + ("redo", "redo"), + ("off", "off"), + ], + max_length=16, + null=True, + verbose_name="Sets the OCR mode", + ), + ), + ] diff --git a/src/paperless/models.py b/src/paperless/models.py index 1e5a58bb2..192e429d4 100644 --- a/src/paperless/models.py +++ b/src/paperless/models.py @@ -126,11 +126,11 @@ class ApplicationConfiguration(AbstractSingletonModel): choices=ModeChoices.choices, ) - skip_archive_file = models.CharField( - verbose_name=_("Controls the generation of an archive file"), + archive_file_generation = models.CharField( + verbose_name=_("Controls archive file generation"), null=True, blank=True, - max_length=16, + max_length=8, choices=ArchiveFileGenerationChoices.choices, ) diff --git a/src/paperless/tests/parsers/conftest.py b/src/paperless/tests/parsers/conftest.py index abe00efce..843ffdb88 100644 --- a/src/paperless/tests/parsers/conftest.py +++ b/src/paperless/tests/parsers/conftest.py @@ -709,7 +709,6 @@ def null_app_config(mocker: MockerFixture) -> MagicMock: language=None, mode=None, archive_file_generation=None, - skip_archive_file=None, image_dpi=None, unpaper_clean=None, deskew=None, diff --git a/src/paperless/tests/test_ocr_config.py b/src/paperless/tests/test_ocr_config.py index fe7deffeb..12204b903 100644 --- a/src/paperless/tests/test_ocr_config.py +++ b/src/paperless/tests/test_ocr_config.py @@ -22,7 +22,6 @@ def null_app_config(mocker) -> MagicMock: language=None, mode=None, archive_file_generation=None, - skip_archive_file=None, image_dpi=None, unpaper_clean=None, deskew=None,