synchronizeusers.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import time
  2. from django.contrib.auth import get_user_model
  3. from django.core.management.base import BaseCommand
  4. from misago.categories.models import Category
  5. from misago.core.management.progressbar import show_progress
  6. from misago.core.pgutils import batch_update
  7. UserModel = get_user_model()
  8. class Command(BaseCommand):
  9. help = "Synchronizes users"
  10. def handle(self, *args, **options):
  11. users_to_sync = UserModel.objects.count()
  12. if not users_to_sync:
  13. self.stdout.write("\n\nNo users were found")
  14. else:
  15. self.sync_users(users_to_sync)
  16. def sync_users(self, users_to_sync):
  17. categories = Category.objects.root_category().get_descendants()
  18. message = "Synchronizing %s users...\n"
  19. self.stdout.write(message % users_to_sync)
  20. synchronized_count = 0
  21. show_progress(self, synchronized_count, users_to_sync)
  22. start_time = time.time()
  23. for user in batch_update(UserModel.objects.all()):
  24. user.threads = user.thread_set.filter(
  25. category__in=categories,
  26. is_hidden=False,
  27. is_unapproved=False,
  28. ).count()
  29. user.posts = user.post_set.filter(
  30. category__in=categories,
  31. is_event=False,
  32. is_unapproved=False,
  33. ).count()
  34. user.followers = user.followed_by.count()
  35. user.following = user.follows.count()
  36. user.save()
  37. synchronized_count += 1
  38. show_progress(self, synchronized_count, users_to_sync, start_time)
  39. self.stdout.write("\n\nSynchronized %s users" % synchronized_count)