diff --git a/commentaries/constants.py b/commentaries/constants.py new file mode 100644 index 0000000000000000000000000000000000000000..5fe492bf1f29a6f2d63f6d10742f5ee9c8ba05e2 --- /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 60f1625f2f365bd240db1d1aa7e5d7beb2a9fa73..1f9a3fd2844931cad7b986eb92d695ffd72f46c9 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 ac6dab51bf5723cbad95556ed95bfa5c13ec9641..51490c7d8fc3c344e9ed2f3104db5a3cb2b80823 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.