SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 8e6a75e4 authored by Geert Kapteijns's avatar Geert Kapteijns
Browse files

Fix CommentaryFactory so that it has a valid url

The url is based off of the DOI. Because the DOI is always the same,
making more than one factory instance crashes the detail page.

UnpublishedVettedCommentaryFactory does not have this problem,
as it has an empty DOI field and a valid (random) arxiv identifier.
parent bb34923a
No related branches found
No related tags found
No related merge requests found
......@@ -107,7 +107,11 @@ SHELL_PLUS_POST_IMPORTS = (
('theses.factories', ('ThesisLinkFactory')),
('comments.factories', ('CommentFactory')),
('submissions.factories', ('SubmissionFactory', 'EICassignedSubmissionFactory')),
('commentaries.factories', ('EmptyCommentaryFactory', 'VettedCommentaryFactory', 'UnvettedCommentaryFactory')),
('commentaries.factories',
('EmptyCommentaryFactory',
'VettedCommentaryFactory',
'UnvettedCommentaryFactory',
'UnpublishedVettedCommentaryFactory',)),
)
MATHJAX_ENABLED = True
......
import factory
from .models import Commentary, COMMENTARY_TYPES
from scipost.constants import DISCIPLINE_PHYSICS, SCIPOST_SUBJECT_AREAS
from scipost.factories import ContributorFactory
from journals.models import SCIPOST_JOURNALS_DOMAINS
from common.helpers import random_arxiv_identifier_with_version_number
from .models import Commentary, COMMENTARY_TYPES
class CommentaryFactory(factory.django.DjangoModelFactory):
class Meta:
......@@ -18,12 +18,16 @@ class CommentaryFactory(factory.django.DjangoModelFactory):
discipline = DISCIPLINE_PHYSICS
domain = SCIPOST_JOURNALS_DOMAINS[0][0]
subject_area = SCIPOST_SUBJECT_AREAS[0][1][0][0]
pub_title = factory.Sequence(lambda n: "Commentary %d" % n)
pub_title = factory.Faker('bs')
pub_DOI = '10.1103/PhysRevB.92.214427'
arxiv_identifier = '1610.06911v1'
arxiv_identifier = factory.Sequence(lambda n: random_arxiv_identifier_with_version_number())
author_list = factory.Faker('name')
pub_abstract = factory.Faker('text')
@factory.post_generation
def create_urls(self, create, extracted, **kwargs):
self.parse_links_into_urls(commit=create)
class EmptyCommentaryFactory(CommentaryFactory):
pub_DOI = None
......@@ -34,5 +38,9 @@ class VettedCommentaryFactory(CommentaryFactory):
vetted = True
class UnpublishedVettedCommentaryFactory(VettedCommentaryFactory):
pub_DOI = ''
class UnvettedCommentaryFactory(CommentaryFactory):
vetted = False
import random
import string
def model_form_data(model, form_class, form_kwargs={}):
'''
Returns a dict that can be used to instantiate a form object.
......@@ -25,6 +28,14 @@ def model_form_data(model, form_class, form_kwargs={}):
form_fields = list(form_class(**form_kwargs).fields.keys())
return filter_keys(model_data, form_fields)
def random_arxiv_identifier_with_version_number():
return random_arxiv_identifier_without_version_number() + "v0"
def random_arxiv_identifier_without_version_number():
return random_digits(4) + "." + random_digits(5)
def random_digits(n):
return "".join(random.choice(string.digits) for _ in range(n))
def filter_keys(dictionary, keys_to_keep):
# Field is empty if not on model.
......
import factory
import random
import string
from scipost.factories import ContributorFactory
from common.helpers import random_arxiv_identifier_with_version_number
from .models import Submission
......@@ -18,7 +17,6 @@ class SubmissionFactory(factory.django.DjangoModelFactory):
abstract = factory.Faker('text')
arxiv_link = factory.Faker('uri')
arxiv_identifier_w_vn_nr = factory.Sequence(lambda n: random_arxiv_identifier_with_version_number())
arxiv_identifier_wo_vn_nr = factory.LazyAttribute(lambda obj: obj.arxiv_identifier_w_vn_nr[0:-2])
domain = 'E'
......@@ -26,13 +24,3 @@ class EICassignedSubmissionFactory(SubmissionFactory):
status = 'EICassigned'
editor_in_charge = factory.SubFactory(ContributorFactory)
open_for_commenting = True
def random_arxiv_identifier_with_version_number():
return random_arxiv_identifier_without_version_number() + "v0"
def random_arxiv_identifier_without_version_number():
return random_digits(4) + "." + random_digits(5)
def random_digits(n):
return "".join(random.choice(string.digits) for _ in range(n))
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