Skip to content

Commit 9df5839

Browse files
author
Sasha Romijn
committed
Fix ietf-tools#2123 - Use a DBTemplate when a review assignment is mailed.
The message sent to a reviewer when a new review is assigned to them, is now taken from a DBTemplate, allowing it to be customised per team. This includes a migration to create a default template, which looks the same as before. Commit ready for merge. - Legacy-Id: 16921
1 parent 82c63b4 commit 9df5839

4 files changed

Lines changed: 62 additions & 13 deletions

File tree

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Copyright The IETF Trust 2019, All Rights Reserved
2+
# -*- coding: utf-8 -*-
3+
4+
5+
from __future__ import absolute_import, print_function, unicode_literals
6+
7+
from django.db import migrations
8+
9+
def forward(apps, schema_editor):
10+
DBTemplate = apps.get_model('dbtemplate', 'DBTemplate')
11+
12+
DBTemplate.objects.create(path='/group/defaults/email/review_assigned.txt', type_id='django',
13+
content="""{{ assigner.ascii }} has assigned you as a reviewer for this document.
14+
15+
{% if prev_team_reviews %}This team has completed other reviews of this document:{% endif %}{% for assignment in prev_team_reviews %}
16+
- {{ assignment.completed_on }} {{ assignment.reviewer.person.ascii }} -{% if assignment.reviewed_rev %}{{ assignment.reviewed_rev }}{% else %}{{ assignment.review_request.requested_rev }}{% endif %} {{ assignment.result.name }}
17+
{% endfor %}
18+
""")
19+
20+
21+
def reverse(apps, schema_editor):
22+
DBTemplate = apps.get_model('dbtemplate', 'DBTemplate')
23+
24+
DBTemplate.objects.get(path='/group/defaults/email/review_assigned.txt').delete()
25+
26+
27+
class Migration(migrations.Migration):
28+
29+
dependencies = [
30+
('dbtemplate', '0005_adjust_assignment_email_summary_templates_2526'),
31+
]
32+
33+
operations = [
34+
migrations.RunPython(forward,reverse),
35+
]

ietf/doc/tests_review.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ def test_assign_reviewer(self):
322322
review_team = ReviewTeamFactory(acronym="reviewteam", name="Review Team", type_id="review", list_email="reviewteam@ietf.org", parent=Group.objects.get(acronym="farfut"))
323323
rev_role = RoleFactory(group=review_team,person__user__username='reviewer',person__user__email='reviewer@example.com',person__name='Some Reviewer',name_id='reviewer')
324324
RoleFactory(group=review_team,person__user__username='marschairman',person__name='WG Cháir Man',name_id='reviewer')
325-
RoleFactory(group=review_team,person__user__username='reviewsecretary',person__user__email='reviewsecretary@example.com',name_id='secr')
325+
secretary = RoleFactory(group=review_team,person__user__username='reviewsecretary',person__user__email='reviewsecretary@example.com',name_id='secr')
326326
ReviewerSettings.objects.create(team=review_team, person=rev_role.person, min_interval=14, skip_next=0)
327327

328328
# review to assign to
@@ -421,10 +421,14 @@ def test_assign_reviewer(self):
421421
assignment = review_req.reviewassignment_set.first()
422422
self.assertEqual(assignment.reviewer, reviewer)
423423
self.assertEqual(assignment.state_id, "assigned")
424+
self.assertEqual(NextReviewerInTeam.objects.get(team=review_req.team).next_reviewer, rotation_list[1])
425+
424426
self.assertEqual(len(outbox), 1)
425427
self.assertEqual('"Some Reviewer" <reviewer@example.com>', outbox[0]["To"])
426-
self.assertTrue("assigned" in outbox[0].get_payload(decode=True).decode("utf-8"))
427-
self.assertEqual(NextReviewerInTeam.objects.get(team=review_req.team).next_reviewer, rotation_list[1])
428+
message = outbox[0].get_payload(decode=True).decode("utf-8")
429+
self.assertTrue("{} has assigned you".format(secretary.person.ascii) in message)
430+
self.assertTrue("This team has completed other reviews" in message)
431+
self.assertTrue("{} -01 Serious Issues".format(reviewer_email.person.ascii) in message)
428432

429433
def test_accept_reviewer_assignment(self):
430434

ietf/name/fixtures/names.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
[
2+
{
3+
"fields": {
4+
"path": "/group/defaults/email/review_assigned.txt",
5+
"type_id": "django",
6+
"content": "{{ assigner.ascii }} has assigned you as a reviewer for this document.\n\n{% if prev_team_reviews %}This team has completed other reviews of this document:{% endif %}{% for assignment in prev_team_reviews %}\n- {{ assignment.completed_on }} {{ assignment.reviewer.person.ascii }} -{% if assignment.reviewed_rev %}{{ assignment.reviewed_rev }}{% else %}{{ assignment.review_request.requested_rev }}{% endif %} {{ assignment.result.name }}\n{% endfor %}"
7+
},
8+
"model": "dbtemplate.dbtemplate",
9+
"pk": "1000"
10+
},
211
{
312
"fields": {
413
"doc_type": "charter",

ietf/review/utils.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@
1313

1414
from django.db.models import Q, Max, F
1515
from django.template.defaultfilters import pluralize
16+
from django.template.loader import render_to_string
1617
from django.urls import reverse as urlreverse
1718
from django.contrib.sites.models import Site
1819

1920
import debug # pyflakes:ignore
21+
from ietf.dbtemplate.models import DBTemplate
2022

2123
from ietf.group.models import Group, Role
2224
from ietf.doc.models import (Document, ReviewRequestDocEvent, ReviewAssignmentDocEvent, State,
@@ -451,21 +453,20 @@ def assign_review_request_to_reviewer(request, review_req, reviewer, add_skip=Fa
451453
state_id='assigned',
452454
)
453455

454-
msg = "%s has assigned you as a reviewer for this document." % request.user.person.ascii
455456
prev_team_reviews = ReviewAssignment.objects.filter(
456457
review_request__doc=review_req.doc,
457458
state="completed",
458459
review_request__team=review_req.team,
459460
)
460-
if prev_team_reviews.exists():
461-
msg = msg + '\n\nThis team has completed other reviews of this document:\n'
462-
for assignment in prev_team_reviews:
463-
msg += '%s %s -%s %s\n'% (
464-
assignment.completed_on.strftime('%d %b %Y'),
465-
assignment.reviewer.person.ascii,
466-
assignment.reviewed_rev or assignment.review_request.requested_rev,
467-
assignment.result.name,
468-
)
461+
462+
try:
463+
template = DBTemplate.objects.get(
464+
path="/group/%s/email/review_assigned.txt" % review_req.team.acronym)
465+
except DBTemplate.DoesNotExist:
466+
template = DBTemplate.objects.get(path="/group/defaults/email/review_assigned.txt")
467+
468+
context = {'assigner': request.user.person, 'prev_team_reviews': prev_team_reviews}
469+
msg = render_to_string(template.path, context, request=request)
469470

470471
email_review_request_change(
471472
request, review_req,

0 commit comments

Comments
 (0)