createfakeusers.py 2.2 KB

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