createfakeusers.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import random
  2. import time
  3. from faker import Factory
  4. from django.contrib.auth import get_user_model
  5. from django.core.exceptions import ValidationError
  6. from django.core.management.base import BaseCommand
  7. from django.db import IntegrityError
  8. from misago.core.management.progressbar import show_progress
  9. from misago.users.avatars import dynamic, gallery
  10. from misago.users.models import Rank
  11. UserModel = get_user_model()
  12. class Command(BaseCommand):
  13. help = "Creates fake users for dev and testing purposes."
  14. def add_arguments(self, parser):
  15. parser.add_argument(
  16. "users", help="number of users to create", nargs="?", type=int, default=5
  17. )
  18. def handle(self, *args, **options):
  19. items_to_create = options["users"]
  20. fake = Factory.create()
  21. ranks = [r for r in Rank.objects.all()]
  22. message = "Creating %s fake user accounts...\n"
  23. self.stdout.write(message % items_to_create)
  24. created_count = 0
  25. start_time = time.time()
  26. show_progress(self, created_count, items_to_create)
  27. while created_count < items_to_create:
  28. try:
  29. possible_usernames = [
  30. fake.first_name(),
  31. fake.last_name(),
  32. fake.name().replace(" ", ""),
  33. fake.user_name(),
  34. ]
  35. user = UserModel.objects.create_user(
  36. random.choice(possible_usernames),
  37. fake.email(),
  38. "pass123",
  39. set_default_avatar=False,
  40. rank=random.choice(ranks),
  41. )
  42. dynamic.set_avatar(user)
  43. user.save(update_fields=["avatars"])
  44. except (ValidationError, IntegrityError):
  45. pass
  46. else:
  47. created_count += 1
  48. show_progress(self, created_count, items_to_create, start_time)
  49. total_time = time.time() - start_time
  50. total_humanized = time.strftime("%H:%M:%S", time.gmtime(total_time))
  51. message = "\n\nSuccessfully created %s fake user accounts in %s"
  52. self.stdout.write(message % (created_count, total_humanized))