deleteinactiveusers.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from datetime import timedelta
  2. from django.contrib.auth import get_user_model
  3. from django.core.management.base import BaseCommand
  4. from django.utils import timezone
  5. from ....conf.shortcuts import get_dynamic_settings
  6. from ....core.pgutils import chunk_queryset
  7. from ...deletesrecord import record_user_deleted_by_system
  8. User = get_user_model()
  9. class Command(BaseCommand):
  10. help = "Deletes inactive user accounts older than set time."
  11. def handle(self, *args, **options):
  12. settings = get_dynamic_settings()
  13. if not settings.new_inactive_accounts_delete:
  14. self.stdout.write(
  15. "Automatic deletion of inactive user accounts is currently disabled."
  16. )
  17. return
  18. users_deleted = 0
  19. joined_on_cutoff = timezone.now() - timedelta(
  20. days=settings.new_inactive_accounts_delete
  21. )
  22. queryset = User.objects.filter(
  23. requires_activation__gt=User.ACTIVATION_NONE, joined_on__lt=joined_on_cutoff
  24. )
  25. for user in chunk_queryset(queryset):
  26. user.delete(anonymous_username=settings.anonymous_username)
  27. record_user_deleted_by_system()
  28. users_deleted += 1
  29. self.stdout.write("Deleted inactive user accounts: %s" % users_deleted)