createfakeusers.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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, get_avatar_hash
  12. from misago.users.models import Rank
  13. class Command(BaseCommand):
  14. help = 'Creates random fakey users for testing purposes'
  15. def handle(self, *args, **options):
  16. try:
  17. fake_users_to_create = int(args[0])
  18. except IndexError:
  19. fake_users_to_create = 5
  20. except ValueError:
  21. self.stderr.write("\nOptional argument should be integer.")
  22. sys.exit(1)
  23. fake = Factory.create()
  24. User = get_user_model()
  25. ranks = [r for r in Rank.objects.all()]
  26. message = 'Creating %s fake user accounts...\n'
  27. self.stdout.write(message % fake_users_to_create)
  28. message = '\n\nSuccessfully created %s fake user accounts in %s'
  29. created_count = 0
  30. start_time = time.time()
  31. show_progress(self, created_count, fake_users_to_create)
  32. for i in range(fake_users_to_create):
  33. try:
  34. kwargs = {
  35. 'rank': random.choice(ranks),
  36. }
  37. user = User.objects.create_user(
  38. fake.first_name(), fake.email(), 'pass123',
  39. set_default_avatar=False, **kwargs)
  40. if random.randint(0, 100) > 90:
  41. dynamic.set_avatar(user)
  42. else:
  43. gallery.set_random_avatar(user)
  44. user.avatar_hash = get_avatar_hash(user)
  45. user.save(update_fields=['avatar_hash'])
  46. except (ValidationError, IntegrityError):
  47. pass
  48. else:
  49. created_count += 1
  50. show_progress(
  51. self, created_count, fake_users_to_create, start_time)
  52. total_time = time.time() - start_time
  53. total_humanized = time.strftime('%H:%M:%S', time.gmtime(total_time))
  54. self.stdout.write(message % (created_count, total_humanized))