""" Script to create cobalt test data """
from django.core.exceptions import SuspiciousOperation
from cobalt.settings import (
RBAC_EVERYONE,
TIME_ZONE,
DUMMY_DATA_COUNT,
TBA_PLAYER,
COBALT_HOSTNAME,
ALL_SYSTEM_ACCOUNTS,
)
from accounts.models import User
from django.core.management.base import BaseCommand
from accounts.management.commands.accounts_core import create_fake_user
from forums.models import (
Post,
Comment1,
Comment2,
LikePost,
LikeComment1,
LikeComment2,
Forum,
)
import random
from essential_generators import DocumentGenerator
import datetime
import pytz
from django.utils.timezone import make_aware, now
import glob
import sys
from inspect import currentframe, getframeinfo
from importlib import import_module
TZ = pytz.timezone(TIME_ZONE)
DATA_DIR = "tests/test_data"
[docs]
class Command(BaseCommand):
def __init__(self):
super().__init__()
self.gen = DocumentGenerator()
self.id_array = {}
[docs]
def random_paragraphs(self):
"""generate a random paragraph"""
text = self.gen.paragraph()
for _ in range(random.randrange(10)):
text += "\n\n" + self.gen.paragraph()
return text
[docs]
def random_sentence(self):
"""generate a random sentence"""
return self.gen.sentence()
[docs]
def random_paragraphs_with_stuff(self):
"""generate a more realistic rich test paragraph with headings and pics"""
sizes = [
("400x500", "400px"),
("400x300", "400px"),
("700x300", "700px"),
("900x500", "900px"),
("200x200", "200px"),
("800x200", "800px"),
("500x400", "500px"),
]
text = self.gen.paragraph()
for _ in range(random.randrange(10)):
type = random.randrange(8)
if type == 5: # no good reason
text += f"<h2>{self.gen.sentence()}</h2>"
elif type == 7:
index = random.randrange(len(sizes))
text += (
"<p><img src='https://source.unsplash.com/random/%s' style='width: %s;'><br></p>"
% (sizes[index][0], sizes[index][1])
)
else:
text += f"<p>{self.gen.paragraph()}</p>"
return text
[docs]
def handle(self, *args, **options):
if COBALT_HOSTNAME in ["myabf.com.au", "www.myabf.com.au"]:
raise SuspiciousOperation(
"Not for use in production. This cannot be used in a production system."
)
print("Running add_rbac_test_data_forum_posts")
try:
# This process is extremely slow (~1 min per post) so don't create 10*anything
# print(f"\nCreating {DUMMY_DATA_COUNT *10} dummy forum posts")
# for count, _ in enumerate(range(DUMMY_DATA_COUNT * 10), start=1):
# create dummy Posts
post_count = 2
print(f"\nCreating {post_count} dummy forum posts")
for count, _ in enumerate(range(post_count), start=1):
user_list = User.objects.exclude(id__in=ALL_SYSTEM_ACCOUNTS)
forums = Forum.objects.all()
post = Post(
forum=random.choice(forums),
title=self.random_sentence(),
text=self.random_paragraphs_with_stuff(),
author=random.choice(user_list),
)
post.save()
print(".", end="", flush=True)
self.add_comments(post, user_list)
if count % 100 == 0:
print(count, flush=True)
print("\n")
except KeyboardInterrupt:
print("\n\nTest data loading interrupted by user\n")
sys.exit(0)