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

1from auditlog.models import LogEntry 

2from django.db import transaction 

3 

4from documents.management.commands.base import PaperlessCommand 

5 

6 

7class Command(PaperlessCommand): 

8 """Prune the audit logs of objects that no longer exist.""" 

9 

10 help = "Prunes the audit logs of objects that no longer exist." 

11 

12 supports_progress_bar = True 

13 supports_multiprocessing = False 

14 

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 )