From 6ded3411c2c3bacfa0334772c8a52dec12066acc Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Fri, 24 Apr 2015 19:11:33 +0000 Subject: [PATCH] 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 --- ietf/sync/iana.py | 35 +++++++++++++++++++++++------------ ietf/sync/tests.py | 45 +++++++++++++++++++++++++-------------------- 2 files changed, 48 insertions(+), 32 deletions(-) diff --git a/ietf/sync/iana.py b/ietf/sync/iana.py index c75c4b17f..5b9288915 100644 --- a/ietf/sync/iana.py +++ b/ietf/sync/iana.py @@ -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() diff --git a/ietf/sync/tests.py b/ietf/sync/tests.py index c005d2117..9b9424f8b 100644 --- a/ietf/sync/tests.py +++ b/ietf/sync/tests.py @@ -131,11 +131,11 @@ class IANASyncTests(TestCase): def test_iana_review_mail(self): draft = make_test_data() - msg = u"""From: "%(person)s via RT" -Date: Thu, 10 May 2012 12:00:00 +0000 + msg_template = u"""From: "%(person)s via RT" +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