createfakeusers.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import random
  2. import sys
  3. import time
  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 django.utils.six.moves import range
  9. from faker import Factory
  10. from misago.core.management.progressbar import show_progress
  11. from misago.users.avatars import dynamic, gallery, get_avatar_hash
  12. from misago.users.models import Rank
  13. class Command(BaseCommand):
  14. help = "Creates fake users for dev and testing purposes."
  15. def add_arguments(self, parser):
  16. parser.add_argument(
  17. 'users',
  18. help="number of users to create",
  19. nargs='?',
  20. type=int,
  21. default=5
  22. )
  23. def handle(self, *args, **options):
  24. items_to_create = options['users']
  25. fake = Factory.create()
  26. User = get_user_model()
  27. ranks = [r for r in Rank.objects.all()]
  28. message = 'Creating %s fake user accounts...\n'
  29. self.stdout.write(message % items_to_create)
  30. message = '\n\nSuccessfully created %s fake user accounts in %s'
  31. created_count = 0
  32. start_time = time.time()
  33. show_progress(self, created_count, items_to_create)
  34. while created_count < items_to_create:
  35. try:
  36. kwargs = {
  37. 'rank': random.choice(ranks),
  38. }
  39. user = User.objects.create_user(
  40. fake.first_name(), fake.email(), 'pass123',
  41. set_default_avatar=False, **kwargs)
  42. if random.randint(0, 100) > 90:
  43. dynamic.set_avatar(user)
  44. else:
  45. gallery.set_random_avatar(user)
  46. user.avatar_hash = get_avatar_hash(user)
  47. user.save(update_fields=['avatar_hash'])
  48. except (ValidationError, IntegrityError):
  49. pass
  50. else:
  51. created_count += 1
  52. show_progress(
  53. self, created_count, items_to_create, start_time)
  54. total_time = time.time() - start_time
  55. total_humanized = time.strftime('%H:%M:%S', time.gmtime(total_time))
  56. self.stdout.write(message % (created_count, total_humanized))