From 62e9b0cba7b94aaaaaf46f5801ccb75ace8aa7d5 Mon Sep 17 00:00:00 2001 From: Jorran de Wit <jorrandewit@outlook.com> Date: Sun, 14 May 2017 17:22:36 +0200 Subject: [PATCH] Improve SubFactory use --- commentaries/factories.py | 5 ++-- comments/factories.py | 6 ++-- journals/factories.py | 14 +++++---- scipost/factories.py | 3 +- scipost/management/commands/populate_db.py | 33 ++++++++++++++++------ submissions/factories.py | 6 ++-- theses/factories.py | 6 ++-- 7 files changed, 47 insertions(+), 26 deletions(-) diff --git a/commentaries/factories.py b/commentaries/factories.py index 1f9a3fd28..940e958cb 100644 --- a/commentaries/factories.py +++ b/commentaries/factories.py @@ -1,7 +1,6 @@ import factory from scipost.constants import SCIPOST_DISCIPLINES, SCIPOST_SUBJECT_AREAS -from scipost.factories import ContributorFactory from scipost.models import Contributor from journals.constants import SCIPOST_JOURNALS_DOMAINS from common.helpers import random_arxiv_identifier_with_version_number, random_external_doi @@ -16,7 +15,7 @@ class CommentaryFactory(factory.django.DjangoModelFactory): class Meta: model = Commentary - requested_by = factory.SubFactory(ContributorFactory) + requested_by = factory.Iterator(Contributor.objects.all()) type = factory.Iterator(COMMENTARY_TYPES, getter=lambda c: c[0]) discipline = factory.Iterator(SCIPOST_DISCIPLINES, getter=lambda c: c[0]) domain = factory.Iterator(SCIPOST_JOURNALS_DOMAINS, getter=lambda c: c[0]) @@ -48,7 +47,7 @@ class CommentaryFactory(factory.django.DjangoModelFactory): class VettedCommentaryFactory(CommentaryFactory): vetted = True - vetted_by = factory.SubFactory(ContributorFactory) + vetted_by = factory.Iterator(Contributor.objects.all()) class UnpublishedVettedCommentaryFactory(VettedCommentaryFactory): diff --git a/comments/factories.py b/comments/factories.py index de3bf4106..d74370a13 100644 --- a/comments/factories.py +++ b/comments/factories.py @@ -4,7 +4,7 @@ import pytz from django.utils import timezone from commentaries.factories import VettedCommentaryFactory -from scipost.factories import ContributorFactory +from scipost.models import Contributor from submissions.factories import EICassignedSubmissionFactory from theses.factories import VettedThesisLinkFactory @@ -17,12 +17,12 @@ timezone.now() class CommentFactory(factory.django.DjangoModelFactory): - author = factory.SubFactory(ContributorFactory) + author = factory.Iterator(Contributor.objects.all()) comment_text = factory.lazy_attribute(lambda x: Faker().paragraph()) remarks_for_editors = factory.lazy_attribute(lambda x: Faker().paragraph()) file_attachment = Faker().file_name(extension='pdf') status = STATUS_VETTED # All comments will have status vetted! - vetted_by = factory.SubFactory(ContributorFactory) + vetted_by = factory.Iterator(Contributor.objects.all()) date_submitted = Faker().date_time_between(start_date="-3y", end_date="now", tzinfo=pytz.UTC) class Meta: diff --git a/journals/factories.py b/journals/factories.py index 203fe8cb6..8d8de8ee1 100644 --- a/journals/factories.py +++ b/journals/factories.py @@ -25,11 +25,12 @@ class JournalFactory(factory.django.DjangoModelFactory): class VolumeFactory(factory.django.DjangoModelFactory): in_journal = factory.SubFactory(JournalFactory) - number = factory.Sequence(lambda n: n + 1) + number = 9999 doi_label = factory.Faker('md5') @factory.post_generation def doi(self, create, extracted, **kwargs): + self.number = self.in_journal.volume_set.count() self.doi_label = self.in_journal.doi_label + '.' + str(self.number) @factory.post_generation @@ -45,12 +46,13 @@ class VolumeFactory(factory.django.DjangoModelFactory): class IssueFactory(factory.django.DjangoModelFactory): - in_volume = factory.SubFactory(VolumeFactory) - number = factory.Sequence(lambda n: n + 1) + in_volume = factory.Iterator(Volume.objects.all()) + number = 9999 doi_label = factory.Faker('md5') @factory.post_generation def doi(self, create, extracted, **kwargs): + self.number = self.in_volume.issue_set.count() self.doi_label = self.in_volume.doi_label + '.' + str(self.number) @factory.post_generation @@ -68,9 +70,9 @@ class IssueFactory(factory.django.DjangoModelFactory): class PublicationFactory(factory.django.DjangoModelFactory): accepted_submission = factory.SubFactory(PublishedSubmissionFactory) - paper_nr = factory.Sequence(lambda n: n) + paper_nr = 9999 pdf_file = Faker().file_name(extension='pdf') - in_issue = factory.SubFactory(IssueFactory) + in_issue = factory.Iterator(Issue.objects.all()) submission_date = factory.Faker('date') acceptance_date = factory.Faker('date') publication_date = factory.Faker('date') @@ -78,7 +80,7 @@ class PublicationFactory(factory.django.DjangoModelFactory): @factory.post_generation def doi(self, create, extracted, **kwargs): - paper_nr = self.in_issue.publication_set.count() + 1 + paper_nr = self.in_issue.publication_set.count() self.paper_nr = paper_nr self.doi_label = self.in_issue.doi_label + '.' + str(paper_nr).rjust(3, '0') diff --git a/scipost/factories.py b/scipost/factories.py index a10f06c56..ce122a655 100644 --- a/scipost/factories.py +++ b/scipost/factories.py @@ -7,7 +7,7 @@ from django.contrib.auth.models import Group from submissions.models import Submission from .models import Contributor, EditorialCollege, EditorialCollegeFellowship, Remark -from .constants import TITLE_CHOICES +from .constants import TITLE_CHOICES, SCIPOST_SUBJECT_AREAS from django_countries.data import COUNTRIES from faker import Faker @@ -21,6 +21,7 @@ class ContributorFactory(factory.django.DjangoModelFactory): personalwebpage = factory.Faker('url') country_of_employment = factory.Iterator(list(COUNTRIES)) affiliation = factory.Faker('company') + expertises = factory.Iterator(SCIPOST_SUBJECT_AREAS[0][1], getter=lambda c: [c[0]]) class Meta: model = Contributor diff --git a/scipost/management/commands/populate_db.py b/scipost/management/commands/populate_db.py index a8561b693..4efe19d85 100644 --- a/scipost/management/commands/populate_db.py +++ b/scipost/management/commands/populate_db.py @@ -4,7 +4,7 @@ from commentaries.factories import VettedCommentaryFactory from comments.factories import CommentaryCommentFactory, SubmissionCommentFactory,\ ThesislinkCommentFactory from scipost.factories import SubmissionRemarkFactory -from journals.factories import JournalFactory, IssueFactory, PublicationFactory +from journals.factories import JournalFactory, VolumeFactory, IssueFactory, PublicationFactory from news.factories import NewsItemFactory from submissions.factories import EICassignedSubmissionFactory from theses.factories import VettedThesisLinkFactory @@ -50,12 +50,19 @@ class Command(BaseCommand): default=False, help='Add 5 Editorial College and Fellows (Contributors required)', ) + parser.add_argument( + '--pubset', + action='store_true', + dest='pubset', + default=False, + help='Add 5 Issues, Volumes and Journals', + ) parser.add_argument( '--issues', action='store_true', dest='issues', default=False, - help='Add 5 sets of {Journal, Volume and Issue}', + help='Add 5 Issues', ) parser.add_argument( '--submissions', @@ -95,7 +102,10 @@ class Command(BaseCommand): def handle(self, *args, **kwargs): if kwargs['contributor'] or kwargs['all']: - self.create_contributors() + n = 5 + if kwargs['all']: + n += 10 + self.create_contributors(n) if kwargs['commentaries'] or kwargs['all']: self.create_commentaries() if kwargs['comments'] or kwargs['all']: @@ -107,6 +117,8 @@ class Command(BaseCommand): self.create_news_items() if kwargs['submissions'] or kwargs['all']: self.create_submissions() + if kwargs['pubset'] or kwargs['all']: + self.create_pubset() if kwargs['issues'] or kwargs['all']: self.create_issues() if kwargs['publications'] or kwargs['all']: @@ -116,9 +128,9 @@ class Command(BaseCommand): if kwargs['theses'] or kwargs['all']: self.create_theses() - def create_contributors(self): - ContributorFactory.create_batch(5) - self.stdout.write(self.style.SUCCESS('Successfully created 5 Contributors.')) + def create_contributors(self, n=5): + ContributorFactory.create_batch(n) + self.stdout.write(self.style.SUCCESS('Successfully created %i Contributors.' % n)) def create_commentaries(self): VettedCommentaryFactory.create_batch(5) @@ -146,13 +158,18 @@ class Command(BaseCommand): EICassignedSubmissionFactory.create_batch(5) self.stdout.write(self.style.SUCCESS('Successfully created 5 Submissions.')) - def create_issues(self): + def create_pubset(self): + VolumeFactory.create_batch(5) IssueFactory.create_batch(5) self.stdout.write(self.style.SUCCESS( 'Successfully created 5x {Journal, Volume and Issue}.')) + def create_issues(self): + IssueFactory.create_batch(5) + self.stdout.write(self.style.SUCCESS( + 'Successfully created 5 Issue.')) + def create_publications(self): - JournalFactory.create_batch(4) PublicationFactory.create_batch(5) self.stdout.write(self.style.SUCCESS('Successfully created 5 Publications.')) diff --git a/submissions/factories.py b/submissions/factories.py index 39aab654c..6c6022754 100644 --- a/submissions/factories.py +++ b/submissions/factories.py @@ -3,6 +3,7 @@ import pytz from django.utils import timezone +from scipost.constants import SCIPOST_SUBJECT_AREAS from scipost.models import Contributor from journals.constants import SCIPOST_JOURNALS_DOMAINS from common.helpers import random_arxiv_identifier_without_version_number, random_scipost_journal @@ -19,14 +20,15 @@ class SubmissionFactory(factory.django.DjangoModelFactory): model = Submission author_list = factory.Faker('name') - submitted_by = Contributor.objects.first() + submitted_by = factory.Iterator(Contributor.objects.all()) submitted_to_journal = factory.Sequence(lambda n: random_scipost_journal()) title = factory.lazy_attribute(lambda x: Faker().sentence()) abstract = factory.lazy_attribute(lambda x: Faker().paragraph()) arxiv_link = factory.Faker('uri') arxiv_identifier_wo_vn_nr = factory.Sequence( lambda n: random_arxiv_identifier_without_version_number()) - domain = SCIPOST_JOURNALS_DOMAINS[0][0] + subject_area = factory.Iterator(SCIPOST_SUBJECT_AREAS[0][1], getter=lambda c: c[0]) + domain = factory.Iterator(SCIPOST_JOURNALS_DOMAINS, getter=lambda c: c[0]) abstract = Faker().paragraph() author_comments = Faker().paragraph() remarks_for_editors = Faker().paragraph() diff --git a/theses/factories.py b/theses/factories.py index 76bf49969..c5461a1a6 100644 --- a/theses/factories.py +++ b/theses/factories.py @@ -5,7 +5,7 @@ from django.utils import timezone from common.helpers.factories import FormFactory from journals.constants import SCIPOST_JOURNALS_DOMAINS from scipost.constants import SCIPOST_DISCIPLINES, SCIPOST_SUBJECT_AREAS -from scipost.factories import ContributorFactory +from scipost.models import Contributor from .models import ThesisLink from .forms import VetThesisLinkForm @@ -20,7 +20,7 @@ class ThesisLinkFactory(factory.django.DjangoModelFactory): class Meta: model = ThesisLink - requested_by = factory.SubFactory(ContributorFactory) + requested_by = factory.Iterator(Contributor.objects.all()) type = factory.Iterator(THESIS_TYPES, getter=lambda c: c[0]) domain = factory.Iterator(SCIPOST_JOURNALS_DOMAINS, getter=lambda c: c[0]) discipline = factory.Iterator(SCIPOST_DISCIPLINES, getter=lambda c: c[0]) @@ -35,7 +35,7 @@ class ThesisLinkFactory(factory.django.DjangoModelFactory): class VettedThesisLinkFactory(ThesisLinkFactory): - vetted_by = factory.SubFactory(ContributorFactory) + vetted_by = factory.Iterator(Contributor.objects.all()) vetted = True -- GitLab