createfakeusers.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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',
  17. help="number of users to create",
  18. nargs='?',
  19. type=int,
  20. default=5,
  21. )
  22. def handle(self, *args, **options):
  23. items_to_create = options['users']
  24. fake = Factory.create()
  25. ranks = [r for r in Rank.objects.all()]
  26. message = 'Creating %s fake user accounts...\n'
  27. self.stdout.write(message % items_to_create)
  28. created_count = 0
  29. start_time = time.time()
  30. show_progress(self, created_count, items_to_create)
  31. while created_count < items_to_create:
  32. try:
  33. possible_usernames = [
  34. fake.first_name(),
  35. fake.last_name(),
  36. fake.name().replace(' ', ''),
  37. fake.user_name(),
  38. ]
  39. user = UserModel.objects.create_user(
  40. random.choice(possible_usernames),
  41. fake.email(),
  42. 'pass123',
  43. set_default_avatar=False,
  44. rank=random.choice(ranks),
  45. )
  46. dynamic.set_avatar(user)
  47. user.save(update_fields=['avatars'])
  48. except (ValidationError, IntegrityError):
  49. pass
  50. else:
  51. created_count += 1
  52. show_progress(self, created_count, items_to_create, start_time)
  53. total_time = time.time() - start_time
  54. total_humanized = time.strftime('%H:%M:%S', time.gmtime(total_time))
  55. message = '\n\nSuccessfully created %s fake user accounts in %s'
  56. self.stdout.write(message % (created_count, total_humanized))