Oh this needs to be here

This commit is contained in:
shamoon
2026-03-04 15:59:12 -08:00
parent 8ecbc7035b
commit f8e91cc20e
2 changed files with 19 additions and 16 deletions
+14 -6
View File
@@ -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"]:
"""
+5 -10
View File
@@ -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