createfakeusers.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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 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))