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

56 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-08-11 09:47 +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(review, email_content, email_subject) 

116 

117 if date: 

118 review.override_saved_date( 

119 date_created=date, 

120 date_last_modified=date, 

121 created_by_user=request.user, 

122 last_modified_by_user=request.user, 

123 # created_by_user=editor, 

124 # last_modified_by_user=editor, 

125 ) 

126 review.save() 

127 

128 SubmissionLog.add_message( 

129 review.version.submission, 

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

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

132 user=request.user, 

133 # user=editor, 

134 significant=True, 

135 date=date, 

136 ) 

137 return review 

138 

139 

140# TODO : Rework send_review_request and create_review_request 

141def create_review_request( 

142 editor, 

143 reviewer, 

144 version: SubmissionVersion, 

145 date: timezone.datetime | None = None, 

146 review: Review | None = None, 

147 **kwargs, 

148): 

149 """Creates a review request""" 

150 if not review: 

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

152 else: 

153 review.version = version 

154 review.reviewer = reviewer 

155 review._user = editor 

156 if date: 

157 review.override_saved_date( 

158 date_created=date, 

159 date_last_modified=date, 

160 created_by_user=editor, 

161 last_modified_by_user=editor, 

162 ) 

163 review.save() 

164 

165 SubmissionLog.add_message( 

166 review.version.submission, 

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

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

169 user=editor, 

170 significant=True, 

171 date=date, 

172 ) 

173 

174 return review