mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-12-12 01:26:47 +01:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
94ede7389d
17 changed files with 486 additions and 195 deletions
103
src/documents/actions.py
Normal file → Executable file
103
src/documents/actions.py
Normal file → Executable file
|
|
@ -5,10 +5,13 @@ from django.core.exceptions import PermissionDenied
|
|||
from django.template.response import TemplateResponse
|
||||
|
||||
from documents.classifier import DocumentClassifier
|
||||
from documents.models import Tag, Correspondent, DocumentType
|
||||
from documents.models import Correspondent, DocumentType, Tag
|
||||
|
||||
|
||||
def select_action(modeladmin, request, queryset, title, action, modelclass, success_message="", document_action=None, queryset_action=None):
|
||||
def select_action(
|
||||
modeladmin, request, queryset, title, action, modelclass,
|
||||
success_message="", document_action=None, queryset_action=None):
|
||||
|
||||
opts = modeladmin.model._meta
|
||||
app_label = opts.app_label
|
||||
|
||||
|
|
@ -28,7 +31,9 @@ def select_action(modeladmin, request, queryset, title, action, modelclass, succ
|
|||
queryset_action(queryset, selected_object)
|
||||
|
||||
modeladmin.message_user(request, success_message % {
|
||||
"selected_object": selected_object.name, "count": n, "items": model_ngettext(modeladmin.opts, n)
|
||||
"selected_object": selected_object.name,
|
||||
"count": n,
|
||||
"items": model_ngettext(modeladmin.opts, n)
|
||||
}, messages.SUCCESS)
|
||||
|
||||
# Return None to display the change list page again.
|
||||
|
|
@ -48,10 +53,17 @@ def select_action(modeladmin, request, queryset, title, action, modelclass, succ
|
|||
|
||||
request.current_app = modeladmin.admin_site.name
|
||||
|
||||
return TemplateResponse(request, "admin/%s/%s/select_object.html" % (app_label, opts.model_name), context)
|
||||
return TemplateResponse(
|
||||
request,
|
||||
"admin/{}/{}/select_object.html".format(app_label, opts.model_name),
|
||||
context
|
||||
)
|
||||
|
||||
|
||||
def simple_action(modeladmin, request, queryset, success_message="", document_action=None, queryset_action=None):
|
||||
def simple_action(
|
||||
modeladmin, request, queryset, success_message="",
|
||||
document_action=None, queryset_action=None):
|
||||
|
||||
if not modeladmin.has_change_permission(request):
|
||||
raise PermissionDenied
|
||||
|
||||
|
|
@ -73,40 +85,57 @@ def simple_action(modeladmin, request, queryset, success_message="", document_ac
|
|||
|
||||
|
||||
def add_tag_to_selected(modeladmin, request, queryset):
|
||||
return select_action(modeladmin=modeladmin, request=request, queryset=queryset,
|
||||
title="Add tag to multiple documents",
|
||||
action="add_tag_to_selected",
|
||||
modelclass=Tag,
|
||||
success_message="Successfully added tag %(selected_object)s to %(count)d %(items)s.",
|
||||
document_action=lambda doc, tag: doc.tags.add(tag))
|
||||
add_tag_to_selected.short_description = "Add tag to selected documents"
|
||||
return select_action(
|
||||
modeladmin=modeladmin,
|
||||
request=request,
|
||||
queryset=queryset,
|
||||
title="Add tag to multiple documents",
|
||||
action="add_tag_to_selected",
|
||||
modelclass=Tag,
|
||||
success_message="Successfully added tag %(selected_object)s to "
|
||||
"%(count)d %(items)s.",
|
||||
document_action=lambda doc, tag: doc.tags.add(tag)
|
||||
)
|
||||
|
||||
|
||||
def remove_tag_from_selected(modeladmin, request, queryset):
|
||||
return select_action(modeladmin=modeladmin, request=request, queryset=queryset,
|
||||
title="Remove tag from multiple documents",
|
||||
action="remove_tag_from_selected",
|
||||
modelclass=Tag,
|
||||
success_message="Successfully removed tag %(selected_object)s from %(count)d %(items)s.",
|
||||
document_action=lambda doc, tag: doc.tags.remove(tag))
|
||||
remove_tag_from_selected.short_description = "Remove tag from selected documents"
|
||||
return select_action(
|
||||
modeladmin=modeladmin,
|
||||
request=request,
|
||||
queryset=queryset,
|
||||
title="Remove tag from multiple documents",
|
||||
action="remove_tag_from_selected",
|
||||
modelclass=Tag,
|
||||
success_message="Successfully removed tag %(selected_object)s from "
|
||||
"%(count)d %(items)s.",
|
||||
document_action=lambda doc, tag: doc.tags.remove(tag)
|
||||
)
|
||||
|
||||
|
||||
def set_correspondent_on_selected(modeladmin, request, queryset):
|
||||
return select_action(modeladmin=modeladmin, request=request, queryset=queryset,
|
||||
title="Set correspondent on multiple documents",
|
||||
action="set_correspondent_on_selected",
|
||||
modelclass=Correspondent,
|
||||
success_message="Successfully set correspondent %(selected_object)s on %(count)d %(items)s.",
|
||||
queryset_action=lambda qs, correspondent: qs.update(correspondent=correspondent))
|
||||
set_correspondent_on_selected.short_description = "Set correspondent on selected documents"
|
||||
|
||||
return select_action(
|
||||
modeladmin=modeladmin,
|
||||
request=request,
|
||||
queryset=queryset,
|
||||
title="Set correspondent on multiple documents",
|
||||
action="set_correspondent_on_selected",
|
||||
modelclass=Correspondent,
|
||||
success_message="Successfully set correspondent %(selected_object)s "
|
||||
"on %(count)d %(items)s.",
|
||||
queryset_action=lambda qs, corr: qs.update(correspondent=corr)
|
||||
)
|
||||
|
||||
|
||||
def remove_correspondent_from_selected(modeladmin, request, queryset):
|
||||
return simple_action(modeladmin=modeladmin, request=request, queryset=queryset,
|
||||
success_message="Successfully removed correspondent from %(count)d %(items)s.",
|
||||
queryset_action=lambda qs: qs.update(correspondent=None))
|
||||
remove_correspondent_from_selected.short_description = "Remove correspondent from selected documents"
|
||||
return simple_action(
|
||||
modeladmin=modeladmin,
|
||||
request=request,
|
||||
queryset=queryset,
|
||||
success_message="Successfully removed correspondent from %(count)d "
|
||||
"%(items)s.",
|
||||
queryset_action=lambda qs: qs.update(correspondent=None)
|
||||
)
|
||||
|
||||
|
||||
def set_document_type_on_selected(modeladmin, request, queryset):
|
||||
|
|
@ -116,14 +145,12 @@ def set_document_type_on_selected(modeladmin, request, queryset):
|
|||
modelclass=DocumentType,
|
||||
success_message="Successfully set document type %(selected_object)s on %(count)d %(items)s.",
|
||||
queryset_action=lambda qs, document_type: qs.update(document_type=document_type))
|
||||
set_document_type_on_selected.short_description = "Set document type on selected documents"
|
||||
|
||||
|
||||
def remove_document_type_from_selected(modeladmin, request, queryset):
|
||||
return simple_action(modeladmin=modeladmin, request=request, queryset=queryset,
|
||||
success_message="Successfully removed document type from %(count)d %(items)s.",
|
||||
queryset_action=lambda qs: qs.update(document_type=None))
|
||||
remove_document_type_from_selected.short_description = "Remove document type from selected documents"
|
||||
|
||||
|
||||
def run_document_classifier_on_selected(modeladmin, request, queryset):
|
||||
|
|
@ -135,4 +162,16 @@ def run_document_classifier_on_selected(modeladmin, request, queryset):
|
|||
except FileNotFoundError:
|
||||
modeladmin.message_user(request, "Classifier model file not found.", messages.ERROR)
|
||||
return None
|
||||
|
||||
|
||||
add_tag_to_selected.short_description = "Add tag to selected documents"
|
||||
remove_tag_from_selected.short_description = \
|
||||
"Remove tag from selected documents"
|
||||
set_correspondent_on_selected.short_description = \
|
||||
"Set correspondent on selected documents"
|
||||
remove_correspondent_from_selected.short_description = \
|
||||
"Remove correspondent from selected documents"
|
||||
set_document_type_on_selected.short_description = "Set document type on selected documents"
|
||||
remove_document_type_from_selected.short_description = "Remove document type from selected documents"
|
||||
run_document_classifier_on_selected.short_description = "Run document classifier on selected"
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue