Skip to content

Commit ca1f334

Browse files
committed
Changed a ReviewAssignmentDocEvent type from 'closed_review_request' to 'closed_review_assignment', for consistency and readability.
- Legacy-Id: 16181
1 parent 9bfb488 commit ca1f334

8 files changed

Lines changed: 80 additions & 24 deletions

File tree

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.11.20 on 2019-05-01 04:43
3+
from __future__ import unicode_literals
4+
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('doc', '0011_reviewassignmentdocevent'),
12+
]
13+
14+
operations = [
15+
migrations.AlterField(
16+
model_name='docevent',
17+
name='type',
18+
field=models.CharField(choices=[(b'new_revision', b'Added new revision'), (b'new_submission', b'Uploaded new revision'), (b'changed_document', b'Changed document metadata'), (b'added_comment', b'Added comment'), (b'added_message', b'Added message'), (b'edited_authors', b'Edited the documents author list'), (b'deleted', b'Deleted document'), (b'changed_state', b'Changed state'), (b'changed_stream', b'Changed document stream'), (b'expired_document', b'Expired document'), (b'extended_expiry', b'Extended expiry of document'), (b'requested_resurrect', b'Requested resurrect'), (b'completed_resurrect', b'Completed resurrect'), (b'changed_consensus', b'Changed consensus'), (b'published_rfc', b'Published RFC'), (b'added_suggested_replaces', b'Added suggested replacement relationships'), (b'reviewed_suggested_replaces', b'Reviewed suggested replacement relationships'), (b'changed_group', b'Changed group'), (b'changed_protocol_writeup', b'Changed protocol writeup'), (b'changed_charter_milestone', b'Changed charter milestone'), (b'initial_review', b'Set initial review time'), (b'changed_review_announcement', b'Changed WG Review text'), (b'changed_action_announcement', b'Changed WG Action text'), (b'started_iesg_process', b'Started IESG process on document'), (b'created_ballot', b'Created ballot'), (b'closed_ballot', b'Closed ballot'), (b'sent_ballot_announcement', b'Sent ballot announcement'), (b'changed_ballot_position', b'Changed ballot position'), (b'changed_ballot_approval_text', b'Changed ballot approval text'), (b'changed_ballot_writeup_text', b'Changed ballot writeup text'), (b'changed_rfc_editor_note_text', b'Changed RFC Editor Note text'), (b'changed_last_call_text', b'Changed last call text'), (b'requested_last_call', b'Requested last call'), (b'sent_last_call', b'Sent last call'), (b'scheduled_for_telechat', b'Scheduled for telechat'), (b'iesg_approved', b'IESG approved document (no problem)'), (b'iesg_disapproved', b'IESG disapproved document (do not publish)'), (b'approved_in_minute', b'Approved in minute'), (b'iana_review', b'IANA review comment'), (b'rfc_in_iana_registry', b'RFC is in IANA registry'), (b'rfc_editor_received_announcement', b'Announcement was received by RFC Editor'), (b'requested_publication', b'Publication at RFC Editor requested'), (b'sync_from_rfc_editor', b'Received updated information from RFC Editor'), (b'requested_review', b'Requested review'), (b'assigned_review_request', b'Assigned review request'), (b'closed_review_request', b'Closed review request'), (b'closed_review_assignment', b'Closed review assignment'), (b'downref_approved', b'Downref approved')], max_length=50),
19+
),
20+
]

ietf/doc/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -994,6 +994,7 @@ class DocReminder(models.Model):
994994
("requested_review", "Requested review"),
995995
("assigned_review_request", "Assigned review request"),
996996
("closed_review_request", "Closed review request"),
997+
("closed_review_assignment", "Closed review assignment"),
997998

998999
# downref
9991000
("downref_approved", "Downref approved"),

ietf/doc/tests_review.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
import ietf.review.mailarch
2121
from ietf.doc.factories import NewRevisionDocEventFactory, WgDraftFactory, WgRfcFactory, ReviewFactory
22-
from ietf.doc.models import DocumentAuthor, RelatedDocument, DocEvent, ReviewAssignmentDocEvent
22+
from ietf.doc.models import DocumentAuthor, RelatedDocument, DocEvent, ReviewRequestDocEvent, ReviewAssignmentDocEvent
2323
from ietf.group.factories import RoleFactory, ReviewTeamFactory
2424
from ietf.group.models import Group
2525
from ietf.message.models import Message
@@ -207,9 +207,15 @@ def test_close_request(self):
207207

208208
review_req = reload_db_objects(review_req)
209209
self.assertEqual(review_req.state_id, "withdrawn")
210-
e = doc.latest_event()
210+
211+
e = doc.latest_event(ReviewRequestDocEvent)
211212
self.assertEqual(e.type, "closed_review_request")
212213
self.assertTrue("closed" in e.desc.lower())
214+
215+
e = doc.latest_event(ReviewAssignmentDocEvent)
216+
self.assertEqual(e.type, "closed_review_assignment")
217+
self.assertTrue("closed" in e.desc.lower())
218+
213219
self.assertEqual(len(outbox), 1)
214220
self.assertTrue("closed" in outbox[0].get_payload(decode=True).decode("utf-8").lower())
215221

@@ -465,7 +471,7 @@ def test_reject_reviewer_assignment(self):
465471
assignment = reload_db_objects(assignment)
466472
self.assertEqual(assignment.state_id, "rejected")
467473
e = doc.latest_event()
468-
self.assertEqual(e.type, "closed_review_request")
474+
self.assertEqual(e.type, "closed_review_assignment")
469475
self.assertTrue("rejected" in e.desc)
470476
self.assertEqual(len(outbox), 1)
471477
self.assertTrue("Test message" in outbox[0].get_payload(decode=True).decode("utf-8"))
@@ -867,7 +873,7 @@ def test_revise_review_enter_content(self):
867873

868874
assignment = reload_db_objects(assignment)
869875
self.assertEqual(assignment.state_id, "completed")
870-
event = ReviewAssignmentDocEvent.objects.get(type="closed_review_request", review_assignment=assignment)
876+
event = ReviewAssignmentDocEvent.objects.get(type="closed_review_assignment", review_assignment=assignment)
871877
self.assertEqual(event.time, datetime.datetime(2012, 12, 24, 12, 13, 14))
872878

873879
with open(os.path.join(self.review_subdir, assignment.review.name + ".txt")) as f:
@@ -892,7 +898,7 @@ def test_revise_review_enter_content(self):
892898

893899
assignment = reload_db_objects(assignment)
894900
self.assertEqual(assignment.review.rev, "01")
895-
event = ReviewAssignmentDocEvent.objects.get(type="closed_review_request", review_assignment=assignment)
901+
event = ReviewAssignmentDocEvent.objects.get(type="closed_review_assignment", review_assignment=assignment)
896902
self.assertEqual(event.time, datetime.datetime(2013, 12, 24, 11, 11, 11))
897903

898904
self.assertEqual(len(outbox), 0)

ietf/doc/views_review.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ def reject_reviewer_assignment(request, name, assignment_id):
333333
review_assignment.save()
334334

335335
ReviewAssignmentDocEvent.objects.create(
336-
type="closed_review_request",
336+
type="closed_review_assignment",
337337
doc=review_assignment.review_request.doc,
338338
rev=review_assignment.review_request.doc.rev,
339339
by=request.user.person,
@@ -378,7 +378,7 @@ def withdraw_reviewer_assignment(request, name, assignment_id):
378378
review_assignment.save()
379379

380380
ReviewAssignmentDocEvent.objects.create(
381-
type="closed_review_request",
381+
type="closed_review_assignment",
382382
doc=review_assignment.review_request.doc,
383383
rev=review_assignment.review_request.doc.rev,
384384
by=request.user.person,
@@ -415,7 +415,7 @@ def mark_reviewer_assignment_no_response(request, name, assignment_id):
415415
review_assignment.save()
416416

417417
ReviewAssignmentDocEvent.objects.create(
418-
type="closed_review_request",
418+
type="closed_review_assignment",
419419
doc=review_assignment.review_request.doc,
420420
rev=review_assignment.review_request.doc.rev,
421421
by=request.user.person,
@@ -652,9 +652,9 @@ def complete_review(request, name, assignment_id):
652652
if need_to_email_review:
653653
desc += " " + "Sent review to list."
654654

655-
close_event = ReviewAssignmentDocEvent.objects.filter(type="closed_review_request", review_assignment=assignment).first()
655+
close_event = ReviewAssignmentDocEvent.objects.filter(type="closed_review_assignment", review_assignment=assignment).first()
656656
if not close_event:
657-
close_event = ReviewAssignmentDocEvent(type="closed_review_request", review_assignment=assignment)
657+
close_event = ReviewAssignmentDocEvent(type="closed_review_assignment", review_assignment=assignment)
658658

659659
close_event.doc = assignment.review_request.doc
660660
close_event.rev = assignment.review_request.doc.rev

ietf/review/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,7 @@ def close_review_request(request, review_req, close_state):
583583
assignment.state_id = 'withdrawn'
584584
assignment.save()
585585
ReviewAssignmentDocEvent.objects.create(
586-
type='closed_review_request',
586+
type='closed_review_assignment',
587587
doc=review_req.doc,
588588
rev=review_req.doc.rev,
589589
by=request.user.person,

ietf/utils/mail.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,8 @@ def send_smtp(msg, bcc=None):
129129
server.quit()
130130
except smtplib.SMTPServerDisconnected:
131131
pass
132-
log(u"sent email from '%s' to %s id %s subject '%s'" % (frm, to, msg.get('Message-ID', ''), msg.get('Subject', '[no subject]')))
132+
subj = msg.get('Subject', u'[no subject]')
133+
log(u"sent email from '%s' to %s id %s subject '%s'" % (frm, to, msg.get('Message-ID', u''), subj))
133134

134135
def copy_email(msg, to, toUser=False, originalBcc=None):
135136
'''
@@ -377,6 +378,23 @@ def parse_preformatted(preformatted, extra={}, override={}):
377378
else:
378379
extra[k] = v
379380

381+
# Handle non-ascii address names and some other fields
382+
for key in ['To', 'From', 'Cc', 'Bcc']:
383+
values = msg.get_all(key, [])
384+
if values:
385+
values = getaddresses(values)
386+
del msg[key]
387+
msg[key] = ',\n '.join(formataddr(v) for v in values)
388+
for key in ['Subject', ]:
389+
values = msg.get_all(key)
390+
if values:
391+
del msg[key]
392+
for v in values:
393+
if isascii(v):
394+
msg[key] = v
395+
else:
396+
msg[key] = Header(v, 'utf-8')
397+
380398
bcc = msg['Bcc']
381399
del msg['Bcc']
382400

ietf/utils/test_utils.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434

3535
import os
3636
import re
37+
import email
3738
import html5lib
3839
import sys
3940
import urllib2
@@ -109,6 +110,16 @@ def assertValidHTMLResponse(self, resp):
109110
self.assertTrue(resp['Content-Type'].startswith('text/html'))
110111
self.assertValidHTML(resp.content)
111112

113+
def assertSameEmail(self, a, b, msg=None):
114+
def normalize(x):
115+
if x:
116+
if not isinstance(x, list):
117+
x = [ x ]
118+
x = email.utils.getaddresses(x)
119+
x.sort()
120+
return x
121+
return self.assertEqual(normalize(a), normalize(b), msg)
122+
112123
def tempdir(self, label):
113124
slug = slugify(self.__class__.__name__.replace('.','-'))
114125
dirname = "tmp-{label}-{slug}-dir".format(**locals())

ietf/utils/tests.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,10 @@ def test_send_mail_preformatted(self):
7373
"""
7474
send_mail_preformatted(None, msg, {}, {})
7575
recv = outbox[-1]
76-
self.assertEqual(recv['To'], '<to1@example.com>, <to2@example.com>')
77-
self.assertEqual(recv['From'], 'from1@ietf.org, from2@ietf.org')
78-
self.assertEqual(recv['Cc'], 'cc1@example.com, cc2@example.com')
79-
self.assertEqual(recv['Bcc'], None)
76+
self.assertSameEmail(recv['To'], '<to1@example.com>, <to2@example.com>')
77+
self.assertSameEmail(recv['From'], 'from1@ietf.org, from2@ietf.org')
78+
self.assertSameEmail(recv['Cc'], 'cc1@example.com, cc2@example.com')
79+
self.assertSameEmail(recv['Bcc'], None)
8080
self.assertEqual(recv['Subject'], 'subject')
8181
self.assertEqual(recv.get_payload(), 'body\n')
8282

@@ -88,10 +88,10 @@ def test_send_mail_preformatted(self):
8888
}
8989
send_mail_preformatted(request=None, preformatted=msg, extra={}, override=override)
9090
recv = outbox[-1]
91-
self.assertEqual(recv['To'], '<oto1@example.net>, <oto2@example.net>')
92-
self.assertEqual(recv['From'], 'ofrom1@ietf.org, ofrom2@ietf.org')
93-
self.assertEqual(recv['Cc'], 'occ1@example.net, occ2@example.net')
94-
self.assertEqual(recv['Bcc'], None)
91+
self.assertSameEmail(recv['To'], '<oto1@example.net>, <oto2@example.net>')
92+
self.assertSameEmail(recv['From'], 'ofrom1@ietf.org, ofrom2@ietf.org')
93+
self.assertSameEmail(recv['Cc'], 'occ1@example.net, occ2@example.net')
94+
self.assertSameEmail(recv['Bcc'], None)
9595
self.assertEqual(recv['Subject'], 'osubject')
9696
self.assertEqual(recv.get_payload(), 'body\n')
9797

@@ -103,10 +103,10 @@ def test_send_mail_preformatted(self):
103103
}
104104
send_mail_preformatted(request=None, preformatted=msg, extra={}, override=override)
105105
recv = outbox[-1]
106-
self.assertEqual(recv['To'], '<oto1@example.net>, <oto2@example.net>')
107-
self.assertEqual(recv['From'], '<ofrom1@ietf.org>, ofrom2@ietf.org')
108-
self.assertEqual(recv['Cc'], '<occ1@example.net>, occ2@example.net')
109-
self.assertEqual(recv['Bcc'], None)
106+
self.assertSameEmail(recv['To'], '<oto1@example.net>, <oto2@example.net>')
107+
self.assertSameEmail(recv['From'], '<ofrom1@ietf.org>, ofrom2@ietf.org')
108+
self.assertSameEmail(recv['Cc'], '<occ1@example.net>, occ2@example.net')
109+
self.assertSameEmail(recv['Bcc'], None)
110110
self.assertEqual(recv['Subject'], 'osubject')
111111
self.assertEqual(recv.get_payload(), 'body\n')
112112

0 commit comments

Comments
 (0)