Coverage for documents/management/commands/prune_audit_logs.py: 0%
15 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 09:07 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 09:07 +0000
1from auditlog.models import LogEntry
2from django.db import transaction
4from documents.management.commands.base import PaperlessCommand
7class Command(PaperlessCommand):
8 """Prune the audit logs of objects that no longer exist."""
10 help = "Prunes the audit logs of objects that no longer exist."
12 supports_progress_bar = True
13 supports_multiprocessing = False
15 def handle(self, *args, **options):
16 with transaction.atomic():
17 for log_entry in self.track(
18 LogEntry.objects.all(),
19 description="Pruning audit logs...",
20 ):
21 model_class = log_entry.content_type.model_class()
22 objects = (
23 model_class.global_objects
24 if hasattr(model_class, "global_objects")
25 else model_class.objects
26 )
27 if (
28 log_entry.object_id
29 and not objects.filter(pk=log_entry.object_id).exists()
30 ):
31 log_entry.delete()
32 self.console.print(
33 f"Deleted audit log entry for "
34 f"{model_class.__name__} #{log_entry.object_id}",
35 style="yellow",
36 )