From 155305b2a4e17e52fc3c590d5fcf62e5f88e6ae6 Mon Sep 17 00:00:00 2001 From: Jorran de Wit <jorrandewit@outlook.com> Date: Mon, 8 May 2017 21:09:23 +0200 Subject: [PATCH] Add Commentary factories --- commentaries/constants.py | 6 +++++ commentaries/factories.py | 46 ++++++++++++++++++++++++--------------- commentaries/models.py | 9 +------- 3 files changed, 36 insertions(+), 25 deletions(-) create mode 100644 commentaries/constants.py diff --git a/commentaries/constants.py b/commentaries/constants.py new file mode 100644 index 000000000..5fe492bf1 --- /dev/null +++ b/commentaries/constants.py @@ -0,0 +1,6 @@ +COMMENTARY_PUBLISHED = 'published' +COMMENTARY_PREPRINT = 'preprint' +COMMENTARY_TYPES = ( + (COMMENTARY_PUBLISHED, 'published paper'), + (COMMENTARY_PREPRINT, 'arXiv preprint'), +) diff --git a/commentaries/factories.py b/commentaries/factories.py index 60f1625f2..1f9a3fd28 100644 --- a/commentaries/factories.py +++ b/commentaries/factories.py @@ -1,42 +1,54 @@ import factory -from scipost.constants import DISCIPLINE_PHYSICS, SCIPOST_SUBJECT_AREAS +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 +from common.helpers import random_arxiv_identifier_with_version_number, random_external_doi -from .models import Commentary, COMMENTARY_TYPES +from .constants import COMMENTARY_TYPES +from .models import Commentary + +from faker import Faker class CommentaryFactory(factory.django.DjangoModelFactory): class Meta: model = Commentary - abstract = True requested_by = factory.SubFactory(ContributorFactory) - vetted_by = factory.SubFactory(ContributorFactory) - type = COMMENTARY_TYPES[0][0] - discipline = DISCIPLINE_PHYSICS - domain = SCIPOST_JOURNALS_DOMAINS[0][0] - subject_area = SCIPOST_SUBJECT_AREAS[0][1][0][0] - pub_title = factory.Faker('bs') - pub_DOI = '10.1103/PhysRevB.92.214427' + 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]) + subject_area = factory.Iterator(SCIPOST_SUBJECT_AREAS[0][1], getter=lambda c: c[0]) + pub_title = factory.Faker('text') + pub_DOI = factory.Sequence(lambda n: random_external_doi()) arxiv_identifier = factory.Sequence(lambda n: random_arxiv_identifier_with_version_number()) - author_list = factory.Faker('name') - pub_abstract = factory.Faker('text') + arxiv_link = factory.Faker('uri') + pub_abstract = factory.lazy_attribute(lambda x: Faker().paragraph()) + + @factory.post_generation + def arxiv_link(self, create, extracted, **kwargs): + self.arxiv_link = 'https://arxiv.org/abs/%s' % self.arxiv_identifier + self.arxiv_or_DOI_string = self.arxiv_identifier @factory.post_generation def create_urls(self, create, extracted, **kwargs): self.parse_links_into_urls(commit=create) - -class EmptyCommentaryFactory(CommentaryFactory): - pub_DOI = None - arxiv_identifier = None + @factory.post_generation + def add_authors(self, create, extracted, **kwargs): + contributors = list(Contributor.objects.order_by('?') + .exclude(pk=self.requested_by.pk).all()[:4]) + for contrib in contributors: + self.author_list += ', %s %s' % (contrib.user.first_name, contrib.user.last_name) + if create: + self.authors.add(contrib) class VettedCommentaryFactory(CommentaryFactory): vetted = True + vetted_by = factory.SubFactory(ContributorFactory) class UnpublishedVettedCommentaryFactory(VettedCommentaryFactory): diff --git a/commentaries/models.py b/commentaries/models.py index ac6dab51b..51490c7d8 100644 --- a/commentaries/models.py +++ b/commentaries/models.py @@ -8,17 +8,10 @@ from scipost.behaviors import ArxivCallable, TimeStampedModel from scipost.models import Contributor from scipost.constants import SCIPOST_DISCIPLINES, DISCIPLINE_PHYSICS, SCIPOST_SUBJECT_AREAS +from .constants import COMMENTARY_TYPES from .managers import CommentaryManager -COMMENTARY_PUBLISHED = 'published' -COMMENTARY_PREPRINT = 'preprint' -COMMENTARY_TYPES = ( - (COMMENTARY_PUBLISHED, 'published paper'), - (COMMENTARY_PREPRINT, 'arXiv preprint'), -) - - class Commentary(ArxivCallable, TimeStampedModel): """ A Commentary contains all the contents of a SciPost Commentary page for a given publication. -- GitLab