mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-05-24 02:02:23 -04:00
40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
from auditlog.models import LogEntry
|
|
from django.core.management.base import BaseCommand
|
|
from django.db import transaction
|
|
from tqdm import tqdm
|
|
|
|
from paperless.management.commands.mixins import ProgressBarMixin
|
|
|
|
|
|
class Command(BaseCommand, ProgressBarMixin):
|
|
"""
|
|
Prune the audit logs of objects that no longer exist.
|
|
"""
|
|
|
|
help = "Prunes the audit logs of objects that no longer exist."
|
|
|
|
def add_arguments(self, parser):
|
|
self.add_argument_progress_bar_mixin(parser)
|
|
|
|
def handle(self, **options):
|
|
self.handle_progress_bar_mixin(**options)
|
|
with transaction.atomic():
|
|
for log_entry in tqdm(LogEntry.objects.all(), disable=self.no_progress_bar):
|
|
model_class = log_entry.content_type.model_class()
|
|
# use global_objects for SoftDeleteModel
|
|
objects = (
|
|
model_class.global_objects
|
|
if hasattr(model_class, "global_objects")
|
|
else model_class.objects
|
|
)
|
|
if (
|
|
log_entry.object_id
|
|
and not objects.filter(pk=log_entry.object_id).exists()
|
|
):
|
|
log_entry.delete()
|
|
tqdm.write(
|
|
self.style.NOTICE(
|
|
f"Deleted audit log entry for {model_class.__name__} #{log_entry.object_id}",
|
|
),
|
|
)
|