createfakeposts.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import random
  2. import time
  3. from django.contrib.auth import get_user_model
  4. from django.core.management.base import BaseCommand
  5. from faker import Factory
  6. from ....categories.models import Category
  7. from ....core.management.progressbar import show_progress
  8. from ....threads.models import Thread
  9. from ...posts import get_fake_hidden_post, get_fake_post, get_fake_unapproved_post
  10. User = get_user_model()
  11. class Command(BaseCommand):
  12. help = "Creates random posts for dev and testing purposes."
  13. def add_arguments(self, parser):
  14. parser.add_argument(
  15. "posts", help="number of posts to create", nargs="?", type=int, default=5
  16. )
  17. def handle(self, *args, **options):
  18. items_to_create = options["posts"]
  19. fake = Factory.create()
  20. message = "Creating %s fake posts...\n"
  21. self.stdout.write(message % items_to_create)
  22. created_posts = 0
  23. start_time = time.time()
  24. show_progress(self, created_posts, items_to_create)
  25. while created_posts < items_to_create:
  26. thread = Thread.objects.order_by("?")[:1].first()
  27. # 10% chance poster is anonymous
  28. if random.randint(0, 100) > 90:
  29. poster = None
  30. else:
  31. poster = User.objects.order_by("?")[:1].last()
  32. # There's 5% chance post is unapproved
  33. if random.randint(0, 100) > 90:
  34. get_fake_unapproved_post(fake, thread, poster)
  35. # There's further 5% chance post is hidden
  36. elif random.randint(0, 100) > 95:
  37. if random.randint(0, 100) > 90:
  38. hidden_by = None
  39. else:
  40. hidden_by = User.objects.order_by("?")[:1].last()
  41. get_fake_hidden_post(fake, thread, poster, hidden_by)
  42. # Default, standard post
  43. else:
  44. get_fake_post(fake, thread, poster)
  45. thread.synchronize()
  46. thread.save()
  47. created_posts += 1
  48. show_progress(self, created_posts, items_to_create, start_time)
  49. for category in Category.objects.all():
  50. category.synchronize()
  51. category.save()
  52. total_time = time.time() - start_time
  53. total_humanized = time.strftime("%H:%M:%S", time.gmtime(total_time))
  54. message = "\nSuccessfully created %s fake posts in %s"
  55. self.stdout.write(message % (created_posts, total_humanized))