invalidatebans.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. from django.core.management.base import BaseCommand
  2. from django.utils import timezone
  3. from misago.core import cachebuster
  4. from misago.users.models import Ban, BanCache
  5. class Command(BaseCommand):
  6. help = (
  7. "Runs maintenance on Misago bans system, "
  8. "invalidating expired bans and pruning caches."
  9. )
  10. def handle(self, *args, **options):
  11. self.handle_expired_bans()
  12. self.handle_bans_caches()
  13. def handle_expired_bans(self):
  14. queryset = Ban.objects.filter(is_checked=True)
  15. queryset = queryset.filter(expires_on__lt=timezone.now())
  16. expired_count = queryset.update(is_checked=False)
  17. self.stdout.write('Bans invalidated: %s' % expired_count)
  18. def handle_bans_caches(self):
  19. queryset = BanCache.objects.filter(expires_on__lt=timezone.now())
  20. expired_count = queryset.count()
  21. queryset.delete()
  22. bans_version = cachebuster.get_version('misago_bans')
  23. queryset = BanCache.objects.filter(bans_version__lt=bans_version)
  24. expired_count += queryset.count()
  25. queryset.delete()
  26. self.stdout.write('Ban caches emptied: %s' % expired_count)