createfakefollowers.py 1.9 KB

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