createfakeusers.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. message = '\n\nSuccessfully created %s fake user accounts in %s'
  25. created_count = 0
  26. start_time = time.time()
  27. show_progress(self, created_count, items_to_create)
  28. while created_count < items_to_create:
  29. try:
  30. kwargs = {
  31. 'rank': random.choice(ranks),
  32. }
  33. user = UserModel.objects.create_user(
  34. fake.first_name(), fake.email(), 'pass123', set_default_avatar=False, **kwargs
  35. )
  36. if random.randint(0, 100) > 90:
  37. dynamic.set_avatar(user)
  38. else:
  39. gallery.set_random_avatar(user)
  40. user.save(update_fields=['avatars'])
  41. except (ValidationError, IntegrityError):
  42. pass
  43. else:
  44. created_count += 1
  45. show_progress(self, created_count, items_to_create, start_time)
  46. total_time = time.time() - start_time
  47. total_humanized = time.strftime('%H:%M:%S', time.gmtime(total_time))
  48. self.stdout.write(message % (created_count, total_humanized))