SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 86005ddf authored by Jorran de Wit's avatar Jorran de Wit
Browse files

Add NewsItem to populate_db

parent f98e49fe
No related branches found
No related tags found
No related merge requests found
import factory
from .models import NewsItem
class NewsItemFactory(factory.django.DjangoModelFactory):
class Meta:
model = NewsItem
date = factory.Faker('date_time')
headline = factory.Faker('sentence', nb_words=6)
blurb = factory.Faker('text', max_nb_chars=200)
followup_link = factory.Faker('url')
followup_link_text = factory.Faker('sentence', nb_words=4)
import factory
import random
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from .models import Contributor, EditorialCollege, EditorialCollegeMember
class ContributorFactory(factory.django.DjangoModelFactory):
class Meta:
model = Contributor
title = "MR"
user = factory.SubFactory('scipost.factories.UserFactory', contributor=None)
status = 1 # normal user
vetted_by = factory.SubFactory('scipost.factories.ContributorFactory', vetted_by=None)
class VettingEditorFactory(ContributorFactory):
@factory.post_generation
def add_to_vetting_editors(self, create, extracted, **kwargs):
if not create:
return
self.user.groups.add(Group.objects.get(name="Vetting Editors"))
class UserFactory(factory.django.DjangoModelFactory):
class Meta:
model = get_user_model()
username = factory.Faker('user_name')
password = factory.PostGenerationMethodCall('set_password', 'adm1n')
email = factory.Faker('safe_email')
first_name = factory.Faker('first_name')
last_name = factory.Faker('last_name')
is_active = True
# When user object is created, associate new Contributor object to it.
contributor = factory.RelatedFactory(ContributorFactory, 'user')
@factory.post_generation
def groups(self, create, extracted, **kwargs):
# If the object is not saved, we cannot use many-to-many relationship.
if not create:
return
# If group objects were passed in, use those.
if extracted:
for group in extracted:
self.groups.add(group)
else:
self.groups.add(Group.objects.get(name="Registered Contributors"))
class EditorialCollegeFactory(factory.django.DjangoModelFactory):
class Meta:
model = EditorialCollege
django_get_or_create = ('discipline', )
discipline = random.choice(['Physics', 'Chemistry', 'Medicine'])
class EditorialCollegeMemberFactory(factory.django.DjangoModelFactory):
class Meta:
model = EditorialCollegeMember
title = factory.Faker('prefix')
name = factory.Faker('name')
link = factory.Faker('url')
subtitle = factory.Faker('company')
college = factory.Iterator(EditorialCollege.objects.all())
from django.core.management.base import BaseCommand
from news.factories import NewsItemFactory
from ...factories import EditorialCollegeFactory, EditorialCollegeMemberFactory
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument(
'--news',
action='store_true',
dest='news',
default=False,
help='Add NewsItems',
)
parser.add_argument(
'--editorial-college',
action='store_true',
dest='editorial-college',
default=False,
help='Add Editorial College and members',
)
parser.add_argument(
'--all',
action='store_true',
dest='all',
default=False,
help='Add all available',
)
def handle(self, *args, **kwargs):
if kwargs['editorial-college'] or kwargs['all']:
self.create_editorial_college()
self.create_editorial_college_members()
if kwargs['news'] or kwargs['all']:
self.create_news_items()
def create_editorial_college(self):
EditorialCollegeFactory.create_batch(5)
self.stdout.write(self.style.SUCCESS('Successfully created Editorial College\'s.'))
......@@ -12,6 +44,6 @@ class Command(BaseCommand):
EditorialCollegeMemberFactory.create_batch(20)
self.stdout.write(self.style.SUCCESS('Successfully created Editorial College Members.'))
def handle(self, *args, **kwargs):
self.create_editorial_college()
self.create_editorial_college_members()
def create_news_items(self):
NewsItemFactory.create_batch(5)
self.stdout.write(self.style.SUCCESS('Successfully created News items.'))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment