Skip to content

Commit 480cb04

Browse files
committed
Save announcements generated by the system as Messages, adding an
extra relation to be able to associate a draft with the message - Legacy-Id: 3917
1 parent 1b1cb2f commit 480cb04

File tree

7 files changed

+70
-13
lines changed

7 files changed

+70
-13
lines changed

ietf/idrfc/testsREDESIGN.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -795,7 +795,7 @@ def test_approve_ballot(self):
795795

796796
# approve
797797
mailbox_before = len(outbox)
798-
798+
799799
r = self.client.post(url, dict())
800800
self.assertEquals(r.status_code, 302)
801801

@@ -805,6 +805,7 @@ def test_approve_ballot(self):
805805
self.assertTrue("Protocol Action" in outbox[-2]['Subject'])
806806
# the IANA copy
807807
self.assertTrue("Protocol Action" in outbox[-1]['Subject'])
808+
self.assertTrue("Protocol Action" in draft.message_set.order_by("-time")[0].subject)
808809

809810
def test_disapprove_ballot(self):
810811
draft = make_test_data()
@@ -859,6 +860,7 @@ def test_make_last_call(self):
859860
self.assertTrue("Last Call" in outbox[-4]['Subject'])
860861
# the IANA copy
861862
self.assertTrue("Last Call" in outbox[-3]['Subject'])
863+
self.assertTrue("Last Call" in draft.message_set.order_by("-time")[0].subject)
862864

863865
class ExpireIDsTestCase(django.test.TestCase):
864866
fixtures = ['names']

ietf/idrfc/views_ballot.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
from ietf.doc.models import *
2929
from ietf.name.models import BallotPositionName
30+
from ietf.message.utils import infer_message
3031

3132

3233
BALLOT_CHOICES = (("yes", "Yes"),
@@ -1248,11 +1249,17 @@ def approve_ballotREDESIGN(request, name):
12481249
email_owner(request, doc, doc.ad, login, change_description)
12491250

12501251
# send announcement
1252+
12511253
send_mail_preformatted(request, announcement)
12521254

12531255
if action == "to_announcement_list":
12541256
email_iana(request, doc, "drafts-approval@icann.org", announcement)
12551257

1258+
msg = infer_message(announcement)
1259+
msg.by = login
1260+
msg.save()
1261+
msg.related_docs.add(doc)
1262+
12561263
return HttpResponseRedirect(doc.get_absolute_url())
12571264

12581265
return render_to_response('idrfc/approve_ballot.html',
@@ -1341,6 +1348,11 @@ def make_last_callREDESIGN(request, name):
13411348
send_mail_preformatted(request, announcement)
13421349
email_iana(request, doc, "drafts-lastcall@icann.org", announcement)
13431350

1351+
msg = infer_message(announcement)
1352+
msg.by = login
1353+
msg.save()
1354+
msg.related_docs.add(doc)
1355+
13441356
save_document_in_history(doc)
13451357

13461358
prev = doc.get_state("draft-iesg")

ietf/message/models.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from ietf.person.models import Email, Person
66
from ietf.group.models import Group
7+
from ietf.doc.models import Document
78

89
class Message(models.Model):
910
time = models.DateTimeField(default=datetime.datetime.now)
@@ -16,9 +17,10 @@ class Message(models.Model):
1617
bcc = models.CharField(max_length=255, blank=True)
1718
reply_to = models.CharField(max_length=255, blank=True)
1819
body = models.TextField()
19-
content_type = models.CharField(max_length=255, blank=True)
20+
content_type = models.CharField(default="text/plain", max_length=255, blank=True)
2021

2122
related_groups = models.ManyToManyField(Group, blank=True)
23+
related_docs = models.ManyToManyField(Document, blank=True)
2224

2325
class Meta:
2426
ordering = ['time']

ietf/message/utils.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from ietf.message.models import Message
2+
3+
def infer_message(s):
4+
from email import message_from_string
5+
6+
parsed = message_from_string(s.encode("utf-8"))
7+
8+
m = Message()
9+
m.subject = parsed.get("Subject", "").decode("utf-8")
10+
m.frm = parsed.get("From", "").decode("utf-8")
11+
m.to = parsed.get("To", "").decode("utf-8")
12+
m.bcc = parsed.get("Bcc", "").decode("utf-8")
13+
m.reply_to = parsed.get("Reply-to", "").decode("utf-8")
14+
m.body = parsed.get_payload().decode("utf-8")
15+
16+
return m

ietf/submit/tests.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ def test_submit_existing(self):
224224
self.assertEquals(draft.authors.all()[0].address, "testname@example.com")
225225
self.assertEquals(len(outbox), mailbox_before + 3)
226226
self.assertTrue((u"I-D Action: %s" % name) in outbox[-3]["Subject"])
227+
self.assertTrue((u"I-D Action: %s" % name) in draft.message_set.order_by("-time")[0].subject)
227228
self.assertTrue("Test Name" in unicode(outbox[-3]))
228229
self.assertTrue("New Version Notification" in outbox[-2]["Subject"])
229230
self.assertTrue(name in unicode(outbox[-2]))

ietf/submit/utils.py

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,18 @@
55
from django.conf import settings
66
from django.contrib.sites.models import Site
77
from django.core.urlresolvers import reverse as urlreverse
8+
from django.template.loader import render_to_string
89

910
from ietf.idtracker.models import (InternetDraft, PersonOrOrgInfo, IETFWG,
1011
IDAuthor, EmailAddress, IESGLogin, BallotInfo)
1112
from ietf.submit.models import TempIdAuthors
12-
from ietf.utils.mail import send_mail
13+
from ietf.utils.mail import send_mail, send_mail_message
1314
from ietf.utils import unaccent
1415

1516
from ietf.doc.models import *
1617
from ietf.person.models import Person, Alias, Email
1718
from ietf.doc.utils import active_ballot_positions
19+
from ietf.message.models import Message
1820

1921
# Some useful states
2022
UPLOADED = 1
@@ -186,21 +188,38 @@ def send_announcements(submission, draft, state_change_msg):
186188

187189

188190
def announce_to_lists(request, submission):
189-
subject = 'I-D Action: %s-%s.txt' % (submission.filename, submission.revision)
190-
from_email = settings.IDSUBMIT_ANNOUNCE_FROM_EMAIL
191-
to_email = [settings.IDSUBMIT_ANNOUNCE_LIST_EMAIL]
192191
authors = []
193192
for i in submission.tempidauthors_set.order_by('author_order'):
194193
if not i.author_order:
195194
continue
196195
authors.append(i.get_full_name())
197-
if submission.group_acronym:
198-
cc = [submission.group_acronym.email_address]
196+
197+
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
198+
m = Message()
199+
m.by = request.user.get_profile() if request.user.is_authenticated() else Person.objects.get(name="(System)")
200+
m.subject = 'I-D Action: %s-%s.txt' % (submission.filename, submission.revision)
201+
m.frm = settings.IDSUBMIT_ANNOUNCE_FROM_EMAIL
202+
m.to = settings.IDSUBMIT_ANNOUNCE_LIST_EMAIL
203+
if submission.group_acronym:
204+
m.cc = submission.group_acronym.email_address
205+
m.body = render_to_string('submit/announce_to_lists.txt', dict(submission=submission,
206+
authors=authors))
207+
m.save()
208+
m.related_docs.add(Document.objects.get(name=submission.filename))
209+
210+
send_mail_message(request, m)
199211
else:
200-
cc = None
201-
send_mail(request, to_email, from_email, subject, 'submit/announce_to_lists.txt',
202-
{'submission': submission,
203-
'authors': authors}, cc=cc)
212+
subject = 'I-D Action: %s-%s.txt' % (submission.filename, submission.revision)
213+
from_email = settings.IDSUBMIT_ANNOUNCE_FROM_EMAIL
214+
to_email = [settings.IDSUBMIT_ANNOUNCE_LIST_EMAIL]
215+
if submission.group_acronym:
216+
cc = [submission.group_acronym.email_address]
217+
else:
218+
cc = None
219+
220+
send_mail(request, to_email, from_email, subject, 'submit/announce_to_lists.txt',
221+
{'submission': submission,
222+
'authors': authors}, cc=cc, save_message=True)
204223

205224

206225
def announce_new_version(request, submission, draft, state_change_msg):

ietf/utils/mail.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,8 @@ def send_mail_mime(request, to, frm, subject, msg, cc=None, extra=None, toUser=F
169169
msg['X-IETF-IDTracker'] = ietf.__version__
170170
if extra:
171171
for k, v in extra.items():
172-
msg[k] = v
172+
if v:
173+
msg[k] = v
173174
if test_mode or settings.SERVER_MODE == 'production':
174175
send_smtp(msg, bcc)
175176
elif settings.SERVER_MODE == 'test':
@@ -195,3 +196,7 @@ def send_mail_preformatted(request, preformatted):
195196
for key in ['To', 'From', 'Subject', ]:
196197
del extra[key]
197198
send_mail_text(request, msg['To'], msg["From"], msg["Subject"], msg.get_payload(), extra=extra)
199+
200+
def send_mail_message(request, message):
201+
# note that this doesn't handle MIME messages at the moment
202+
send_mail_text(request, message.to, message.frm, message.subject, message.body, cc=message.cc, bcc=message.bcc, extra={ 'Reply-to': message.reply_to })

0 commit comments

Comments
 (0)