123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- import random
- import time
- from django.contrib.auth import get_user_model
- from django.core.management.base import BaseCommand
- from faker import Factory
- from ....categories.models import Category
- from ....core.management.progressbar import show_progress
- from ....threads.models import Thread
- from ...threads import (
- get_fake_closed_thread,
- get_fake_hidden_thread,
- get_fake_thread,
- get_fake_unapproved_thread,
- )
- User = get_user_model()
- class Command(BaseCommand):
- help = "Creates random threads for dev and testing purposes."
- def add_arguments(self, parser):
- parser.add_argument(
- "threads",
- help="number of threads to create",
- nargs="?",
- type=int,
- default=5,
- )
- def handle(
- self, *args, **options
- ): # pylint: disable=too-many-locals, too-many-branches
- items_to_create = options["threads"]
- fake = Factory.create()
- categories = list(Category.objects.all_categories())
- message = "Creating %s fake threads...\n"
- self.stdout.write(message % items_to_create)
- created_threads = 0
- start_time = time.time()
- show_progress(self, created_threads, items_to_create)
- while created_threads < items_to_create:
- category = random.choice(categories)
- # 10% chance thread poster is anonymous
- if random.randint(0, 100) > 90:
- starter = None
- else:
- starter = User.objects.order_by("?").last()
- # There's 10% chance thread is closed
- if random.randint(0, 100) > 90:
- thread = get_fake_closed_thread(fake, category, starter)
- # There's further 5% chance thread is hidden
- elif random.randint(0, 100) > 95:
- if random.randint(0, 100) > 90:
- hidden_by = None
- else:
- hidden_by = User.objects.order_by("?").last()
- thread = get_fake_hidden_thread(fake, category, starter, hidden_by)
- # And further 5% chance thread is unapproved
- elif random.randint(0, 100) > 95:
- thread = get_fake_unapproved_thread(fake, category, starter)
- # Default, standard thread
- else:
- thread = get_fake_thread(fake, category, starter)
- thread.synchronize()
- thread.save()
- created_threads += 1
- show_progress(self, created_threads, items_to_create, start_time)
- pinned_threads = random.randint(0, int(created_threads * 0.025)) or 1
- self.stdout.write("\nPinning %s threads..." % pinned_threads)
- for _ in range(0, pinned_threads):
- thread = Thread.objects.order_by("?")[:1][0]
- if random.randint(0, 100) > 90:
- thread.weight = 2
- else:
- thread.weight = 1
- thread.save()
- for category in categories:
- category.synchronize()
- category.save()
- total_time = time.time() - start_time
- total_humanized = time.strftime("%H:%M:%S", time.gmtime(total_time))
- message = "\nSuccessfully created %s fake threads in %s"
- self.stdout.write(message % (created_threads, total_humanized))
|