Merged in [9548] from rjsparks@nostrum.com:

Allow IANA to switch to (BEGIN IANA COMMENTS) at their leisure. Make sure the captured events are obviously from IANA.
 - Legacy-Id: 9568
Note: SVN reference [9548] has been migrated to Git commit 6ded3411c2
This commit is contained in:
Henrik Levkowetz 2015-04-26 21:11:05 +00:00
commit 48e24c0a1e
2 changed files with 48 additions and 32 deletions

View file

@ -252,10 +252,16 @@ def parse_review_email(text):
# comment
body = msg.get_payload().decode('quoted-printable').replace("\r", "")
b = body.find("(BEGIN IANA LAST CALL COMMENTS)")
e = body.find("(END IANA LAST CALL COMMENTS)")
comment = body[b + len("(BEGIN IANA LAST CALL COMMENTS)"):e].strip()
if "BEGIN IANA LAST CALL COMMENTS" in body:
b = body.find("(BEGIN IANA LAST CALL COMMENTS)")
e = body.find("(END IANA LAST CALL COMMENTS)")
comment = body[b + len("(BEGIN IANA LAST CALL COMMENTS)"):e].strip()
elif "BEGIN IANA COMMENTS" in body:
b = body.find("(BEGIN IANA COMMENTS)")
e = body.find("(END IANA COMMENTS)")
comment = body[b + len("(BEGIN IANA COMMENTS)"):e].strip()
else:
comment = ""
# strip leading IESG:
if comment.startswith("IESG:"):
@ -266,16 +272,21 @@ def parse_review_email(text):
if m:
comment = comment[:m.start()].rstrip()
m = re.search(r"<(.*)>", msg["From"])
if m:
comment = '(Via %s): %s' % ( m.group(1).strip() , comment )
return doc_name, review_time, by, comment
def add_review_comment(doc_name, review_time, by, comment):
try:
e = DocEvent.objects.get(doc__name=doc_name, time=review_time, type="iana_review")
except DocEvent.DoesNotExist:
doc = Document.objects.get(name=doc_name)
e = DocEvent(doc=doc, time=review_time, type="iana_review")
if comment:
try:
e = DocEvent.objects.get(doc__name=doc_name, time=review_time, type="iana_review")
except DocEvent.DoesNotExist:
doc = Document.objects.get(name=doc_name)
e = DocEvent(doc=doc, time=review_time, type="iana_review")
e.desc = comment
e.by = by
e.desc = comment
e.by = by
e.save()
e.save()

View file

@ -131,11 +131,11 @@ class IANASyncTests(TestCase):
def test_iana_review_mail(self):
draft = make_test_data()
msg = u"""From: "%(person)s via RT" <drafts-lastcall@iana.org>
Date: Thu, 10 May 2012 12:00:00 +0000
msg_template = u"""From: "%(person)s via RT" <drafts-lastcall@iana.org>
Date: Thu, 10 May 2012 12:00:0%(rtime)d +0000
Subject: [IANA #12345] Last Call: <%(draft)s-%(rev)s.txt> (Long text) to Informational RFC
(BEGIN IANA LAST CALL COMMENTS)
(BEGIN IANA %(tag)s)
IESG:
@ -151,30 +151,35 @@ Thanks,
IANA Fake Test Person
ICANN
(END IANA LAST CALL COMMENTS)
(END IANA %(tag)s)
"""
msg = msg % dict(person=Person.objects.get(user__username="iana").name,
draft=draft.name,
rev=draft.rev)
tags = ("LAST CALL COMMENTS","COMMENTS")
for tag in tags:
msg = msg_template % dict(person=Person.objects.get(user__username="iana").name,
draft=draft.name,
rev=draft.rev,
tag=tag,
rtime=tags.index(tag))
doc_name, review_time, by, comment = iana.parse_review_email(msg.encode('utf-8'))
doc_name, review_time, by, comment = iana.parse_review_email(msg.encode('utf-8'))
self.assertEqual(doc_name, draft.name)
# self.assertEqual(review_time, datetime.datetime(2012, 5, 10, 5, 0, 0))
self.assertEqual(by, Person.objects.get(user__username="iana"))
self.assertTrue("there are no IANA Actions" in comment.replace("\n", ""))
self.assertEqual(doc_name, draft.name)
# self.assertEqual(review_time, datetime.datetime(2012, 5, 10, 5, 0, 0))
self.assertEqual(by, Person.objects.get(user__username="iana"))
self.assertTrue("there are no IANA Actions" in comment.replace("\n", ""))
iana.add_review_comment(doc_name, review_time, by, comment)
events_before = DocEvent.objects.filter(doc=draft, type="iana_review").count()
iana.add_review_comment(doc_name, review_time, by, comment)
e = draft.latest_event(type="iana_review")
self.assertTrue(e)
self.assertEqual(e.desc, comment)
self.assertEqual(e.by, by)
e = draft.latest_event(type="iana_review")
self.assertTrue(e)
self.assertEqual(e.desc, comment)
self.assertEqual(e.by, by)
# make sure it doesn't create duplicates
iana.add_review_comment(doc_name, review_time, by, comment)
self.assertEqual(DocEvent.objects.filter(doc=draft, type="iana_review").count(), 1)
# make sure it doesn't create duplicates
iana.add_review_comment(doc_name, review_time, by, comment)
self.assertEqual(DocEvent.objects.filter(doc=draft, type="iana_review").count(), events_before+1)
def test_notify_page(self):
# check that we can get the notify page