+++ /dev/null
-from django.conf import settings
-from django.contrib import admin
-from guardian.admin import GuardedModelAdmin
-
-from paperless.models import Correspondent
-from paperless.models import CustomField
-from paperless.models import CustomFieldInstance
-from paperless.models import Document
-from paperless.models import DocumentType
-from paperless.models import Note
-from paperless.models import PaperlessTask
-from paperless.models import SavedView
-from paperless.models import SavedViewFilterRule
-from paperless.models import ShareLink
-from paperless.models import StoragePath
-from paperless.models import Tag
-
-if settings.AUDIT_LOG_ENABLED:
- from auditlog.admin import LogEntryAdmin
- from auditlog.models import LogEntry
-
-
-class CorrespondentAdmin(GuardedModelAdmin):
- list_display = ("name", "match", "matching_algorithm")
- list_filter = ("matching_algorithm",)
- list_editable = ("match", "matching_algorithm")
-
-
-class TagAdmin(GuardedModelAdmin):
- list_display = ("name", "color", "match", "matching_algorithm")
- list_filter = ("matching_algorithm",)
- list_editable = ("color", "match", "matching_algorithm")
- search_fields = ("color", "name")
-
-
-class DocumentTypeAdmin(GuardedModelAdmin):
- list_display = ("name", "match", "matching_algorithm")
- list_filter = ("matching_algorithm",)
- list_editable = ("match", "matching_algorithm")
-
-
-class DocumentAdmin(GuardedModelAdmin):
- search_fields = ("correspondent__name", "title", "content", "tags__name")
- readonly_fields = (
- "added",
- "modified",
- "mime_type",
- "storage_type",
- "filename",
- "checksum",
- "archive_filename",
- "archive_checksum",
- "original_filename",
- "deleted_at",
- )
-
- list_display_links = ("title",)
-
- list_display = ("id", "title", "mime_type", "filename", "archive_filename")
-
- list_filter = (
- ("mime_type"),
- ("archive_serial_number", admin.EmptyFieldListFilter),
- ("archive_filename", admin.EmptyFieldListFilter),
- )
-
- filter_horizontal = ("tags",)
-
- ordering = ["-id"]
-
- date_hierarchy = "created"
-
- def has_add_permission(self, request):
- return False
-
- def created_(self, obj):
- return obj.created.date().strftime("%Y-%m-%d")
-
- created_.short_description = "Created"
-
- def get_queryset(self, request): # pragma: no cover
- """
- Include trashed documents
- """
- return Document.global_objects.all()
-
- def delete_queryset(self, request, queryset):
- from paperless import index
-
- with index.open_index_writer() as writer:
- for o in queryset:
- index.remove_document(writer, o)
-
- super().delete_queryset(request, queryset)
-
- def delete_model(self, request, obj):
- from paperless import index
-
- index.remove_document_from_index(obj)
- super().delete_model(request, obj)
-
- def save_model(self, request, obj, form, change):
- from paperless import index
-
- index.add_or_update_document(obj)
- super().save_model(request, obj, form, change)
-
-
-class RuleInline(admin.TabularInline):
- model = SavedViewFilterRule
-
-
-class SavedViewAdmin(GuardedModelAdmin):
- list_display = ("name", "owner")
-
- inlines = [RuleInline]
-
- def get_queryset(self, request): # pragma: no cover
- return super().get_queryset(request).select_related("owner")
-
-
-class StoragePathInline(admin.TabularInline):
- model = StoragePath
-
-
-class StoragePathAdmin(GuardedModelAdmin):
- list_display = ("name", "path", "match", "matching_algorithm")
- list_filter = ("path", "matching_algorithm")
- list_editable = ("path", "match", "matching_algorithm")
-
-
-class TaskAdmin(admin.ModelAdmin):
- list_display = ("task_id", "task_file_name", "task_name", "date_done", "status")
- list_filter = ("status", "date_done", "task_name")
- search_fields = ("task_name", "task_id", "status", "task_file_name")
- readonly_fields = (
- "task_id",
- "task_file_name",
- "task_name",
- "status",
- "date_created",
- "date_started",
- "date_done",
- "result",
- )
-
-
-class NotesAdmin(GuardedModelAdmin):
- list_display = ("user", "created", "note", "document")
- list_filter = ("created", "user")
- list_display_links = ("created",)
- raw_id_fields = ("document",)
- search_fields = ("document__title",)
-
- def get_queryset(self, request): # pragma: no cover
- return (
- super()
- .get_queryset(request)
- .select_related("user", "document__correspondent")
- )
-
-
-class ShareLinksAdmin(GuardedModelAdmin):
- list_display = ("created", "expiration", "document")
- list_filter = ("created", "expiration", "owner")
- list_display_links = ("created",)
- raw_id_fields = ("document",)
-
- def get_queryset(self, request): # pragma: no cover
- return super().get_queryset(request).select_related("document__correspondent")
-
-
-class CustomFieldsAdmin(GuardedModelAdmin):
- fields = ("name", "created", "data_type")
- readonly_fields = ("created", "data_type")
- list_display = ("name", "created", "data_type")
- list_filter = ("created", "data_type")
-
-
-class CustomFieldInstancesAdmin(GuardedModelAdmin):
- fields = ("field", "document", "created", "value")
- readonly_fields = ("field", "document", "created", "value")
- list_display = ("field", "document", "value", "created")
- search_fields = ("document__title",)
- list_filter = ("created", "field")
-
- def get_queryset(self, request): # pragma: no cover
- return (
- super()
- .get_queryset(request)
- .select_related("field", "document__correspondent")
- )
-
-
-admin.site.register(Correspondent, CorrespondentAdmin)
-admin.site.register(Tag, TagAdmin)
-admin.site.register(DocumentType, DocumentTypeAdmin)
-admin.site.register(Document, DocumentAdmin)
-admin.site.register(SavedView, SavedViewAdmin)
-admin.site.register(StoragePath, StoragePathAdmin)
-admin.site.register(PaperlessTask, TaskAdmin)
-admin.site.register(Note, NotesAdmin)
-admin.site.register(ShareLink, ShareLinksAdmin)
-admin.site.register(CustomField, CustomFieldsAdmin)
-admin.site.register(CustomFieldInstance, CustomFieldInstancesAdmin)
-
-if settings.AUDIT_LOG_ENABLED:
-
- class LogEntryAUDIT(LogEntryAdmin):
- def has_delete_permission(self, request, obj=None):
- return False
-
- admin.site.unregister(LogEntry)
- admin.site.register(LogEntry, LogEntryAUDIT)
from django.test import TestCase
from django.utils import timezone
-from documents.admin import DocumentAdmin
from documents.tests.utils import DirectoriesMixin
from paperless import index
+from paperless.admin import DocumentAdmin
from paperless.admin import PaperlessUserAdmin
from paperless.models import Document
from django import forms
+from django.conf import settings
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
+from guardian.admin import GuardedModelAdmin
+
+from paperless.models import Correspondent
+from paperless.models import CustomField
+from paperless.models import CustomFieldInstance
+from paperless.models import Document
+from paperless.models import DocumentType
+from paperless.models import Note
+from paperless.models import PaperlessTask
+from paperless.models import SavedView
+from paperless.models import SavedViewFilterRule
+from paperless.models import ShareLink
+from paperless.models import StoragePath
+from paperless.models import Tag
+
+if settings.AUDIT_LOG_ENABLED:
+ from auditlog.admin import LogEntryAdmin
+ from auditlog.models import LogEntry
class PaperlessUserForm(forms.ModelForm):
admin.site.unregister(User)
admin.site.register(User, PaperlessUserAdmin)
+
+
+class CorrespondentAdmin(GuardedModelAdmin):
+ list_display = ("name", "match", "matching_algorithm")
+ list_filter = ("matching_algorithm",)
+ list_editable = ("match", "matching_algorithm")
+
+
+class TagAdmin(GuardedModelAdmin):
+ list_display = ("name", "color", "match", "matching_algorithm")
+ list_filter = ("matching_algorithm",)
+ list_editable = ("color", "match", "matching_algorithm")
+ search_fields = ("color", "name")
+
+
+class DocumentTypeAdmin(GuardedModelAdmin):
+ list_display = ("name", "match", "matching_algorithm")
+ list_filter = ("matching_algorithm",)
+ list_editable = ("match", "matching_algorithm")
+
+
+class DocumentAdmin(GuardedModelAdmin):
+ search_fields = ("correspondent__name", "title", "content", "tags__name")
+ readonly_fields = (
+ "added",
+ "modified",
+ "mime_type",
+ "storage_type",
+ "filename",
+ "checksum",
+ "archive_filename",
+ "archive_checksum",
+ "original_filename",
+ "deleted_at",
+ )
+
+ list_display_links = ("title",)
+
+ list_display = ("id", "title", "mime_type", "filename", "archive_filename")
+
+ list_filter = (
+ ("mime_type"),
+ ("archive_serial_number", admin.EmptyFieldListFilter),
+ ("archive_filename", admin.EmptyFieldListFilter),
+ )
+
+ filter_horizontal = ("tags",)
+
+ ordering = ["-id"]
+
+ date_hierarchy = "created"
+
+ def has_add_permission(self, request):
+ return False
+
+ def created_(self, obj):
+ return obj.created.date().strftime("%Y-%m-%d")
+
+ created_.short_description = "Created"
+
+ def get_queryset(self, request): # pragma: no cover
+ """
+ Include trashed documents
+ """
+ return Document.global_objects.all()
+
+ def delete_queryset(self, request, queryset):
+ from paperless import index
+
+ with index.open_index_writer() as writer:
+ for o in queryset:
+ index.remove_document(writer, o)
+
+ super().delete_queryset(request, queryset)
+
+ def delete_model(self, request, obj):
+ from paperless import index
+
+ index.remove_document_from_index(obj)
+ super().delete_model(request, obj)
+
+ def save_model(self, request, obj, form, change):
+ from paperless import index
+
+ index.add_or_update_document(obj)
+ super().save_model(request, obj, form, change)
+
+
+class RuleInline(admin.TabularInline):
+ model = SavedViewFilterRule
+
+
+class SavedViewAdmin(GuardedModelAdmin):
+ list_display = ("name", "owner")
+
+ inlines = [RuleInline]
+
+ def get_queryset(self, request): # pragma: no cover
+ return super().get_queryset(request).select_related("owner")
+
+
+class StoragePathInline(admin.TabularInline):
+ model = StoragePath
+
+
+class StoragePathAdmin(GuardedModelAdmin):
+ list_display = ("name", "path", "match", "matching_algorithm")
+ list_filter = ("path", "matching_algorithm")
+ list_editable = ("path", "match", "matching_algorithm")
+
+
+class TaskAdmin(admin.ModelAdmin):
+ list_display = ("task_id", "task_file_name", "task_name", "date_done", "status")
+ list_filter = ("status", "date_done", "task_name")
+ search_fields = ("task_name", "task_id", "status", "task_file_name")
+ readonly_fields = (
+ "task_id",
+ "task_file_name",
+ "task_name",
+ "status",
+ "date_created",
+ "date_started",
+ "date_done",
+ "result",
+ )
+
+
+class NotesAdmin(GuardedModelAdmin):
+ list_display = ("user", "created", "note", "document")
+ list_filter = ("created", "user")
+ list_display_links = ("created",)
+ raw_id_fields = ("document",)
+ search_fields = ("document__title",)
+
+ def get_queryset(self, request): # pragma: no cover
+ return (
+ super()
+ .get_queryset(request)
+ .select_related("user", "document__correspondent")
+ )
+
+
+class ShareLinksAdmin(GuardedModelAdmin):
+ list_display = ("created", "expiration", "document")
+ list_filter = ("created", "expiration", "owner")
+ list_display_links = ("created",)
+ raw_id_fields = ("document",)
+
+ def get_queryset(self, request): # pragma: no cover
+ return super().get_queryset(request).select_related("document__correspondent")
+
+
+class CustomFieldsAdmin(GuardedModelAdmin):
+ fields = ("name", "created", "data_type")
+ readonly_fields = ("created", "data_type")
+ list_display = ("name", "created", "data_type")
+ list_filter = ("created", "data_type")
+
+
+class CustomFieldInstancesAdmin(GuardedModelAdmin):
+ fields = ("field", "document", "created", "value")
+ readonly_fields = ("field", "document", "created", "value")
+ list_display = ("field", "document", "value", "created")
+ search_fields = ("document__title",)
+ list_filter = ("created", "field")
+
+ def get_queryset(self, request): # pragma: no cover
+ return (
+ super()
+ .get_queryset(request)
+ .select_related("field", "document__correspondent")
+ )
+
+
+admin.site.register(Correspondent, CorrespondentAdmin)
+admin.site.register(Tag, TagAdmin)
+admin.site.register(DocumentType, DocumentTypeAdmin)
+admin.site.register(Document, DocumentAdmin)
+admin.site.register(SavedView, SavedViewAdmin)
+admin.site.register(StoragePath, StoragePathAdmin)
+admin.site.register(PaperlessTask, TaskAdmin)
+admin.site.register(Note, NotesAdmin)
+admin.site.register(ShareLink, ShareLinksAdmin)
+admin.site.register(CustomField, CustomFieldsAdmin)
+admin.site.register(CustomFieldInstance, CustomFieldInstancesAdmin)
+
+if settings.AUDIT_LOG_ENABLED:
+
+ class LogEntryAUDIT(LogEntryAdmin):
+ def has_delete_permission(self, request, obj=None):
+ return False
+
+ admin.site.unregister(LogEntry)
+ admin.site.register(LogEntry, LogEntryAUDIT)