createfakefollowers.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import random
  2. from django.contrib.auth import get_user_model
  3. from django.core.management.base import BaseCommand
  4. from misago.core.management.progressbar import show_progress
  5. class Command(BaseCommand):
  6. help = 'Adds random followers for testing purposes'
  7. def handle(self, *args, **options):
  8. User = get_user_model()
  9. total_users = User.objects.count()
  10. message = 'Adding fake followers to %s users...\n'
  11. self.stdout.write(message % total_users)
  12. message = '\nSuccessfully added %s fake followers'
  13. total_followers = 0
  14. processed_count = 0
  15. show_progress(self, processed_count, total_users)
  16. for user in User.objects.iterator():
  17. user.followed_by.clear()
  18. if random.randint(1, 100) > 10:
  19. processed_count += 1
  20. show_progress(self, processed_count, total_users)
  21. continue # 10% active users
  22. users_to_add = random.randint(1, total_users / 5)
  23. random_queryset = User.objects.exclude(id=user.id).order_by('?')
  24. while users_to_add > 0:
  25. new_follower = random_queryset[:1][0]
  26. if not new_follower.is_following(user):
  27. user.followed_by.add(new_follower)
  28. users_to_add -= 1
  29. total_followers += 1
  30. processed_count += 1
  31. show_progress(self, processed_count, total_users)
  32. self.stdout.write('\nSyncing models...')
  33. for user in User.objects.iterator():
  34. user.followers = user.followed_by.count()
  35. user.following = user.follows.count()
  36. user.save(update_fields=['followers', 'following'])
  37. self.stdout.write(message % total_followers)