From 86005ddf9c440ae38ac7989266544681faaea79f Mon Sep 17 00:00:00 2001 From: Jorran de Wit <jorrandewit@outlook.com> Date: Sun, 19 Mar 2017 11:40:52 +0100 Subject: [PATCH] Add NewsItem to populate_db --- news/factories.py | 14 +++++ scipost/management/commands/factories.py | 70 ++++++++++++++++++++++ scipost/management/commands/populate_db.py | 38 +++++++++++- 3 files changed, 119 insertions(+), 3 deletions(-) create mode 100644 news/factories.py create mode 100644 scipost/management/commands/factories.py diff --git a/news/factories.py b/news/factories.py new file mode 100644 index 000000000..74dcad744 --- /dev/null +++ b/news/factories.py @@ -0,0 +1,14 @@ +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) diff --git a/scipost/management/commands/factories.py b/scipost/management/commands/factories.py new file mode 100644 index 000000000..8a747b60b --- /dev/null +++ b/scipost/management/commands/factories.py @@ -0,0 +1,70 @@ +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()) diff --git a/scipost/management/commands/populate_db.py b/scipost/management/commands/populate_db.py index ae0f171dc..e1296b85e 100644 --- a/scipost/management/commands/populate_db.py +++ b/scipost/management/commands/populate_db.py @@ -1,9 +1,41 @@ 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.')) -- GitLab