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

56 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-10-22 07:20 +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) 

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 html_class="success-log", 

77 ) 

78 

79 submission.refresh_from_db() 

80 return submission 

81 

82 

83def send_review_request( 

84 request, 

85 reviewer, 

86 version: SubmissionVersion, 

87 form: "ReviewCreateForm", 

88 date=None, 

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

90): 

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

92 review = create_review_request( 

93 # editor=editor 

94 editor=request.user, 

95 reviewer=reviewer, 

96 version=version, 

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

98 date=date, 

99 ) 

100 

101 is_quick_review = form.cleaned_data["quick"] 

102 if is_quick_review: 

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

104 

105 email_subject = ( 

106 form.cleaned_data["quick_request_email_subject"] 

107 if is_quick_review 

108 else form.cleaned_data["request_email_subject"] 

109 ) 

110 email_content = ( 

111 form.cleaned_data["quick_request_email"] 

112 if is_quick_review 

113 else form.cleaned_data["request_email"] 

114 ) 

115 

116 send_review_request_email(review, email_content, email_subject) 

117 

118 if date: 

119 review.override_saved_date( 

120 date_created=date, 

121 date_last_modified=date, 

122 created_by_user=request.user, 

123 last_modified_by_user=request.user, 

124 # created_by_user=editor, 

125 # last_modified_by_user=editor, 

126 ) 

127 review.save() 

128 

129 SubmissionLog.add_message( 

130 review.version.submission, 

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

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

133 user=request.user, 

134 # user=editor, 

135 significant=True, 

136 date=date, 

137 html_class="info-log", 

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