From f8e91cc20e19c3af34a919c3c14c54ab6d71c356 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 3 Mar 2026 11:16:13 -0800 Subject: [PATCH] Oh this needs to be here --- src/documents/bulk_edit.py | 20 ++++++++++++++------ src/documents/serialisers.py | 15 +++++---------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/documents/bulk_edit.py b/src/documents/bulk_edit.py index c2c219ec2..5cf150ad3 100644 --- a/src/documents/bulk_edit.py +++ b/src/documents/bulk_edit.py @@ -26,7 +26,6 @@ from documents.models import StoragePath from documents.models import Tag from documents.permissions import set_permissions_for_object from documents.plugins.helpers import DocumentsStatusManager -from documents.serialisers import SourceModeChoices from documents.tasks import bulk_update_documents from documents.tasks import consume_file from documents.tasks import update_document_content_maybe_archive_file @@ -38,6 +37,13 @@ if TYPE_CHECKING: logger: logging.Logger = logging.getLogger("paperless.bulk_edit") +SourceMode = Literal["latest_version", "explicit_selection"] + + +class SourceModeChoices: + LATEST_VERSION: SourceMode = "latest_version" + EXPLICIT_SELECTION: SourceMode = "explicit_selection" + @shared_task(bind=True) def restore_archive_serial_numbers_task( @@ -109,12 +115,14 @@ def _get_root_and_current_docs_by_root_id( def _resolve_root_and_source_doc( doc: Document, *, - source_mode: SourceModeChoices = SourceModeChoices.LATEST_VERSION, + source_mode: SourceMode = SourceModeChoices.LATEST_VERSION, ) -> tuple[Document, Document]: root_doc = get_root_document(doc) if source_mode == SourceModeChoices.EXPLICIT_SELECTION: return root_doc, doc + if source_mode != SourceModeChoices.LATEST_VERSION: + raise ValueError(f"Unsupported source mode: {source_mode}") # Version IDs are explicit by default, only a selected root resolves to latest if doc.root_document_id is not None: @@ -430,7 +438,7 @@ def rotate( doc_ids: list[int], degrees: int, *, - source_mode: SourceModeChoices = SourceModeChoices.LATEST_VERSION, + source_mode: SourceMode = SourceModeChoices.LATEST_VERSION, user: User | None = None, ) -> Literal["OK"]: logger.info( @@ -679,7 +687,7 @@ def delete_pages( doc_ids: list[int], pages: list[int], *, - source_mode: SourceModeChoices = SourceModeChoices.LATEST_VERSION, + source_mode: SourceMode = SourceModeChoices.LATEST_VERSION, user: User | None = None, ) -> Literal["OK"]: logger.info( @@ -734,7 +742,7 @@ def edit_pdf( delete_original: bool = False, update_document: bool = False, include_metadata: bool = True, - source_mode: SourceModeChoices = SourceModeChoices.LATEST_VERSION, + source_mode: SourceMode = SourceModeChoices.LATEST_VERSION, user: User | None = None, ) -> Literal["OK"]: """ @@ -863,7 +871,7 @@ def remove_password( update_document: bool = False, delete_original: bool = False, include_metadata: bool = True, - source_mode: SourceModeChoices = SourceModeChoices.LATEST_VERSION, + source_mode: SourceMode = SourceModeChoices.LATEST_VERSION, user: User | None = None, ) -> Literal["OK"]: """ diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index f5ef3db07..c6ae846be 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -1517,11 +1517,6 @@ class DocumentListSerializer(serializers.Serializer): return documents -class SourceModeChoices: - LATEST_VERSION = "latest_version" - EXPLICIT_SELECTION = "explicit_selection" - - class BulkEditSerializer( SerializerWithPerms, DocumentListSerializer, @@ -1729,11 +1724,11 @@ class BulkEditSerializer( raise serializers.ValidationError("invalid rotation degrees") def _validate_source_mode(self, parameters) -> None: - source_mode = parameters.get("source_mode", SourceModeChoices.LATEST_VERSION) - if source_mode not in { - SourceModeChoices.LATEST_VERSION, - SourceModeChoices.EXPLICIT_SELECTION, - }: + source_mode = parameters.get( + "source_mode", + bulk_edit.SourceModeChoices.LATEST_VERSION, + ) + if source_mode not in bulk_edit.SourceModeChoices.__dict__.values(): raise serializers.ValidationError("Invalid source_mode") parameters["source_mode"] = source_mode