createfakeposts.py 2.5 KB

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