Coverage for src / mesh / models / crud.py: 73%

56 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-05-04 12:41 +0000

1from typing import TYPE_CHECKING 

2 

3from django.utils import timezone 

4from django.utils.translation import gettext_lazy as _ 

5from ptf.external.fetch_metadata import fetch_article 

6 

7from mesh.models.orm.review_models import Review 

8from mesh.models.orm.submission_models import ( 

9 Submission, 

10 SubmissionAuthor, 

11 SubmissionLog, 

12 SubmissionVersion, 

13) 

14from mesh.views.utils import send_review_request_email 

15 

16if TYPE_CHECKING: 

17 from mesh.views.forms.review_forms import ReviewCreateForm 

18 

19 

20def create_submission( 

21 user, name="", abstract="", preprint_id="", date: timezone.datetime | None = None 

22): 

23 article_data = None 

24 if preprint_id != "": 

25 article_data = fetch_article(preprint_id, with_bib=False) 

26 if not article_data: 

27 raise ValueError(f"Couldn't fetch Article with preprint_id: {preprint_id}") 

28 

29 name = article_data.title_html 

30 if len(article_data.abstracts) > 0: 

31 abstract = article_data.abstracts[0]["value"] 

32 

33 submission = Submission(name=name, abstract=abstract, author_agreement=False) 

34 submission._user = user 

35 

36 version = SubmissionVersion(submission=submission) 

37 

38 # Date override (for import) 

39 if date: 

40 submission.override_saved_date( 

41 date_created=date, 

42 date_last_modified=date, 

43 created_by_user=user, 

44 last_modified_by_user=user, 

45 ) 

46 version.override_saved_date( 

47 date_created=date, 

48 date_last_modified=date, 

49 created_by_user=user, 

50 last_modified_by_user=user, 

51 ) 

52 else: 

53 date = timezone.now() 

54 

55 submission.save() 

56 version.save() 

57 

58 if article_data is not None: 

59 for contrib in article_data.contributors: 

60 author = SubmissionAuthor( 

61 submission=submission, 

62 first_name=contrib["first_name"], 

63 last_name=contrib["last_name"], 

64 email=contrib["email"], 

65 corresponding=contrib["corresponding"], 

66 ) 

67 author.save() 

68 

69 SubmissionLog.add_message( 

70 submission, 

71 content=_("Creation of the submission"), 

72 content_en="Creation of the submission", 

73 user=user, 

74 significant=True, 

75 date=date, 

76 ) 

77 

78 submission.refresh_from_db() 

79 return submission 

80 

81 

82def send_review_request( 

83 request, 

84 reviewer, 

85 version: SubmissionVersion, 

86 form: "ReviewCreateForm", 

87 date=None, 

88 # editor, reviewer, version: SubmissionVersion, form: "ReviewCreateForm", date=None 

89): 

90 """Creates a review request and send email to reviewer""" 

91 review = create_review_request( 

92 # editor=editor 

93 editor=request.user, 

94 reviewer=reviewer, 

95 version=version, 

96 review=form.save(commit=False), 

97 date=date, 

98 ) 

99 

100 is_quick_review = form.cleaned_data["quick"] 

101 if is_quick_review: 

102 form.instance.request_email = form.cleaned_data["quick_request_email"] 

103 

104 email_subject = ( 

105 form.cleaned_data["quick_request_email_subject"] 

106 if is_quick_review 

107 else form.cleaned_data["request_email_subject"] 

108 ) 

109 email_content = ( 

110 form.cleaned_data["quick_request_email"] 

111 if is_quick_review 

112 else form.cleaned_data["request_email"] 

113 ) 

114 

115 send_review_request_email( 

116 review, email_content, email_subject, review.version.submission.get_absolute_url() 

117 ) 

118 

119 if date: 

120 review.override_saved_date( 

121 date_created=date, 

122 date_last_modified=date, 

123 created_by_user=request.user, 

124 last_modified_by_user=request.user, 

125 # created_by_user=editor, 

126 # last_modified_by_user=editor, 

127 ) 

128 review.save() 

129 

130 SubmissionLog.add_message( 

131 review.version.submission, 

132 content=_("Referee request sent to") + f" {reviewer}", 

133 content_en=f"Referee request sent to {reviewer}", 

134 user=request.user, 

135 # user=editor, 

136 significant=True, 

137 date=date, 

138 ) 

139 return review 

140 

141 

142# TODO : Rework send_review_request and create_review_request 

143def create_review_request( 

144 editor, 

145 reviewer, 

146 version: SubmissionVersion, 

147 date: timezone.datetime | None = None, 

148 review: Review | None = None, 

149 **kwargs, 

150): 

151 """Creates a review request""" 

152 if not review: 

153 review = Review(version=version, reviewer=reviewer, **kwargs) 

154 else: 

155 review.version = version 

156 review.reviewer = reviewer 

157 review._user = editor 

158 if date: 

159 review.override_saved_date( 

160 date_created=date, 

161 date_last_modified=date, 

162 created_by_user=editor, 

163 last_modified_by_user=editor, 

164 ) 

165 review.save() 

166 

167 SubmissionLog.add_message( 

168 review.version.submission, 

169 content=_("Created referee request to") + f" {reviewer}", 

170 content_en=f"Created referee request to {reviewer}", 

171 user=editor, 

172 significant=True, 

173 date=date, 

174 ) 

175 

176 return review