Skip to content

Commit a70b86e

Browse files
joemullmauromsl
authored andcommitted
Management command for creating fake news items
1 parent 891066d commit a70b86e

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
from django.core.management.base import BaseCommand
2+
from django.contrib.contenttypes.models import ContentType
3+
from faker import Faker
4+
from faker.providers import DynamicProvider
5+
import secrets
6+
7+
from utils.logic import get_aware_datetime
8+
from utils.logger import get_logger
9+
from press import models as press_models
10+
from journal import models as journal_models
11+
from core import models as core_models
12+
from utils.testing.helpers import create_news_item
13+
14+
fake = Faker()
15+
logger = get_logger(__name__)
16+
17+
18+
class Command(BaseCommand):
19+
help = "Generates fake news items at the press and journal levels"
20+
21+
press = press_models.Press.objects.first()
22+
press_content_type = ContentType.objects.get_for_model(press_models.Press)
23+
journals = journal_models.Journal.objects.all()
24+
journal_content_type = ContentType.objects.get_for_model(journal_models.Journal)
25+
26+
@classmethod
27+
def build_fake_news_item(cls, content_type, obj_pk, posted_by):
28+
title = fake.sentence()
29+
body = ""
30+
for num in range(0, 10):
31+
body += f"<p>{fake.text()}</p>"
32+
date = get_aware_datetime(fake.date())
33+
tags = [fake.word() for i in range(0, 3)]
34+
create_news_item(
35+
content_type,
36+
obj_pk,
37+
title=title,
38+
body=body,
39+
posted=date,
40+
posted_by=posted_by,
41+
start_display=date,
42+
tags=tags,
43+
)
44+
45+
def handle(self, *args, **options):
46+
confirmation = input(
47+
"News items will be public if this installation is live. Create fake items? (y/n)"
48+
)
49+
if confirmation.lower() != "y":
50+
return
51+
52+
for each in range(0, 30):
53+
posted_by = core_models.Account.objects.filter(is_staff=True).first()
54+
if not posted_by:
55+
logger.warn("Staff member required")
56+
return
57+
self.build_fake_news_item(self.press_content_type, self.press.pk, posted_by)
58+
for journal in self.journals:
59+
for each in range(0, 30):
60+
posted_by = core_models.Account.objects.filter(
61+
accountrole__role__slug="editor", accountrole__journal=journal
62+
).first()
63+
if not posted_by:
64+
logger.warn(f"Editor required for journal {journal}")
65+
return
66+
self.build_fake_news_item(
67+
self.journal_content_type, journal.pk, posted_by
68+
)
69+
logger.debug(self.style.SUCCESS("Successfully created news items"))

0 commit comments

Comments
 (0)