createfakefollowers.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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 ....core.management.progressbar import show_progress
  6. User = get_user_model()
  7. class Command(BaseCommand):
  8. help = "Adds random followers for testing purposes"
  9. def handle(self, *args, **options):
  10. total_users = User.objects.count()
  11. if total_users < 2:
  12. self.stderr.write(
  13. "At least two users must exist in the databse in order for "
  14. "fake followers creation to be possible.\n"
  15. )
  16. return
  17. message = "Adding fake followers to %s users...\n"
  18. self.stdout.write(message % total_users)
  19. total_followers = 0
  20. processed_count = 0
  21. start_time = time.time()
  22. show_progress(self, processed_count, total_users)
  23. for user in User.objects.iterator():
  24. user.followed_by.clear()
  25. followers_to_create = random.randint(0, total_users - 1)
  26. while followers_to_create:
  27. # There's 34% chance we'll skip follower creation
  28. if random.randint(0, 100) > 34:
  29. new_follower = (
  30. User.objects.exclude(pk=user.pk).order_by("?")[:1].first()
  31. )
  32. if not user.is_following(new_follower):
  33. user.follows.add(new_follower)
  34. followers_to_create -= 1
  35. processed_count += 1
  36. show_progress(self, processed_count, total_users)
  37. self.stdout.write("\nSynchronizing users...")
  38. for user in User.objects.iterator():
  39. user.followers = user.followed_by.count()
  40. user.following = user.follows.count()
  41. user.save(update_fields=["followers", "following"])
  42. total_time = time.time() - start_time
  43. total_humanized = time.strftime("%H:%M:%S", time.gmtime(total_time))
  44. message = "\nSuccessfully added %s fake followers in %s"
  45. self.stdout.write(message % (total_followers, total_humanized))