Skip to content

Commit 6ded341

Browse files
committed
Allow IANA to switch to (BEGIN IANA COMMENTS) at their leisure. Make sure the captured events are obviously from IANA. Commit ready for merge.
- Legacy-Id: 9548
1 parent 99e351f commit 6ded341

2 files changed

Lines changed: 48 additions & 32 deletions

File tree

ietf/sync/iana.py

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -252,10 +252,16 @@ def parse_review_email(text):
252252

253253
# comment
254254
body = msg.get_payload().decode('quoted-printable').replace("\r", "")
255-
b = body.find("(BEGIN IANA LAST CALL COMMENTS)")
256-
e = body.find("(END IANA LAST CALL COMMENTS)")
257-
258-
comment = body[b + len("(BEGIN IANA LAST CALL COMMENTS)"):e].strip()
255+
if "BEGIN IANA LAST CALL COMMENTS" in body:
256+
b = body.find("(BEGIN IANA LAST CALL COMMENTS)")
257+
e = body.find("(END IANA LAST CALL COMMENTS)")
258+
comment = body[b + len("(BEGIN IANA LAST CALL COMMENTS)"):e].strip()
259+
elif "BEGIN IANA COMMENTS" in body:
260+
b = body.find("(BEGIN IANA COMMENTS)")
261+
e = body.find("(END IANA COMMENTS)")
262+
comment = body[b + len("(BEGIN IANA COMMENTS)"):e].strip()
263+
else:
264+
comment = ""
259265

260266
# strip leading IESG:
261267
if comment.startswith("IESG:"):
@@ -266,16 +272,21 @@ def parse_review_email(text):
266272
if m:
267273
comment = comment[:m.start()].rstrip()
268274

275+
m = re.search(r"<(.*)>", msg["From"])
276+
if m:
277+
comment = '(Via %s): %s' % ( m.group(1).strip() , comment )
278+
269279
return doc_name, review_time, by, comment
270280

271281
def add_review_comment(doc_name, review_time, by, comment):
272-
try:
273-
e = DocEvent.objects.get(doc__name=doc_name, time=review_time, type="iana_review")
274-
except DocEvent.DoesNotExist:
275-
doc = Document.objects.get(name=doc_name)
276-
e = DocEvent(doc=doc, time=review_time, type="iana_review")
282+
if comment:
283+
try:
284+
e = DocEvent.objects.get(doc__name=doc_name, time=review_time, type="iana_review")
285+
except DocEvent.DoesNotExist:
286+
doc = Document.objects.get(name=doc_name)
287+
e = DocEvent(doc=doc, time=review_time, type="iana_review")
277288

278-
e.desc = comment
279-
e.by = by
289+
e.desc = comment
290+
e.by = by
280291

281-
e.save()
292+
e.save()

ietf/sync/tests.py

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,11 @@ def test_changes_sync_errors(self):
131131
def test_iana_review_mail(self):
132132
draft = make_test_data()
133133

134-
msg = u"""From: "%(person)s via RT" <drafts-lastcall@iana.org>
135-
Date: Thu, 10 May 2012 12:00:00 +0000
134+
msg_template = u"""From: "%(person)s via RT" <drafts-lastcall@iana.org>
135+
Date: Thu, 10 May 2012 12:00:0%(rtime)d +0000
136136
Subject: [IANA #12345] Last Call: <%(draft)s-%(rev)s.txt> (Long text) to Informational RFC
137137
138-
(BEGIN IANA LAST CALL COMMENTS)
138+
(BEGIN IANA %(tag)s)
139139
140140
IESG:
141141
@@ -151,30 +151,35 @@ def test_iana_review_mail(self):
151151
IANA “Fake Test” Person
152152
ICANN
153153
154-
(END IANA LAST CALL COMMENTS)
154+
(END IANA %(tag)s)
155155
"""
156156

157-
msg = msg % dict(person=Person.objects.get(user__username="iana").name,
158-
draft=draft.name,
159-
rev=draft.rev)
157+
tags = ("LAST CALL COMMENTS","COMMENTS")
158+
for tag in tags:
159+
msg = msg_template % dict(person=Person.objects.get(user__username="iana").name,
160+
draft=draft.name,
161+
rev=draft.rev,
162+
tag=tag,
163+
rtime=tags.index(tag))
160164

161-
doc_name, review_time, by, comment = iana.parse_review_email(msg.encode('utf-8'))
165+
doc_name, review_time, by, comment = iana.parse_review_email(msg.encode('utf-8'))
162166

163-
self.assertEqual(doc_name, draft.name)
164-
# self.assertEqual(review_time, datetime.datetime(2012, 5, 10, 5, 0, 0))
165-
self.assertEqual(by, Person.objects.get(user__username="iana"))
166-
self.assertTrue("there are no IANA Actions" in comment.replace("\n", ""))
167+
self.assertEqual(doc_name, draft.name)
168+
# self.assertEqual(review_time, datetime.datetime(2012, 5, 10, 5, 0, 0))
169+
self.assertEqual(by, Person.objects.get(user__username="iana"))
170+
self.assertTrue("there are no IANA Actions" in comment.replace("\n", ""))
167171

168-
iana.add_review_comment(doc_name, review_time, by, comment)
172+
events_before = DocEvent.objects.filter(doc=draft, type="iana_review").count()
173+
iana.add_review_comment(doc_name, review_time, by, comment)
169174

170-
e = draft.latest_event(type="iana_review")
171-
self.assertTrue(e)
172-
self.assertEqual(e.desc, comment)
173-
self.assertEqual(e.by, by)
175+
e = draft.latest_event(type="iana_review")
176+
self.assertTrue(e)
177+
self.assertEqual(e.desc, comment)
178+
self.assertEqual(e.by, by)
174179

175-
# make sure it doesn't create duplicates
176-
iana.add_review_comment(doc_name, review_time, by, comment)
177-
self.assertEqual(DocEvent.objects.filter(doc=draft, type="iana_review").count(), 1)
180+
# make sure it doesn't create duplicates
181+
iana.add_review_comment(doc_name, review_time, by, comment)
182+
self.assertEqual(DocEvent.objects.filter(doc=draft, type="iana_review").count(), events_before+1)
178183

179184
def test_notify_page(self):
180185
# check that we can get the notify page

0 commit comments

Comments
 (0)