createfakeusers.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import random
  2. import sys
  3. import time
  4. from faker import Factory
  5. from django.contrib.auth import get_user_model
  6. from django.core.exceptions import ValidationError
  7. from django.core.management.base import BaseCommand
  8. from django.db import IntegrityError
  9. from django.utils.six.moves import range
  10. from misago.core.management.progressbar import show_progress
  11. from misago.users.avatars import dynamic, gallery
  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.save(update_fields=['avatars'])
  47. except (ValidationError, IntegrityError):
  48. pass
  49. else:
  50. created_count += 1
  51. show_progress(
  52. 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. self.stdout.write(message % (created_count, total_humanized))