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
This commit is contained in:
Ole Laursen 2012-02-08 21:05:28 +00:00
parent 1b1cb2f3b5
commit 480cb04cd6
7 changed files with 70 additions and 13 deletions

View file

@ -795,7 +795,7 @@ class ApproveBallotTestCase(django.test.TestCase):
# approve
mailbox_before = len(outbox)
r = self.client.post(url, dict())
self.assertEquals(r.status_code, 302)
@ -805,6 +805,7 @@ class ApproveBallotTestCase(django.test.TestCase):
self.assertTrue("Protocol Action" in outbox[-2]['Subject'])
# the IANA copy
self.assertTrue("Protocol Action" in outbox[-1]['Subject'])
self.assertTrue("Protocol Action" in draft.message_set.order_by("-time")[0].subject)
def test_disapprove_ballot(self):
draft = make_test_data()
@ -859,6 +860,7 @@ class MakeLastCallTestCase(django.test.TestCase):
self.assertTrue("Last Call" in outbox[-4]['Subject'])
# the IANA copy
self.assertTrue("Last Call" in outbox[-3]['Subject'])
self.assertTrue("Last Call" in draft.message_set.order_by("-time")[0].subject)
class ExpireIDsTestCase(django.test.TestCase):
fixtures = ['names']

View file

@ -27,6 +27,7 @@ from ietf.idrfc.idrfc_wrapper import BallotWrapper
from ietf.doc.models import *
from ietf.name.models import BallotPositionName
from ietf.message.utils import infer_message
BALLOT_CHOICES = (("yes", "Yes"),
@ -1248,11 +1249,17 @@ def approve_ballotREDESIGN(request, name):
email_owner(request, doc, doc.ad, login, change_description)
# send announcement
send_mail_preformatted(request, announcement)
if action == "to_announcement_list":
email_iana(request, doc, "drafts-approval@icann.org", announcement)
msg = infer_message(announcement)
msg.by = login
msg.save()
msg.related_docs.add(doc)
return HttpResponseRedirect(doc.get_absolute_url())
return render_to_response('idrfc/approve_ballot.html',
@ -1341,6 +1348,11 @@ def make_last_callREDESIGN(request, name):
send_mail_preformatted(request, announcement)
email_iana(request, doc, "drafts-lastcall@icann.org", announcement)
msg = infer_message(announcement)
msg.by = login
msg.save()
msg.related_docs.add(doc)
save_document_in_history(doc)
prev = doc.get_state("draft-iesg")

View file

@ -4,6 +4,7 @@ import datetime
from ietf.person.models import Email, Person
from ietf.group.models import Group
from ietf.doc.models import Document
class Message(models.Model):
time = models.DateTimeField(default=datetime.datetime.now)
@ -16,9 +17,10 @@ class Message(models.Model):
bcc = models.CharField(max_length=255, blank=True)
reply_to = models.CharField(max_length=255, blank=True)
body = models.TextField()
content_type = models.CharField(max_length=255, blank=True)
content_type = models.CharField(default="text/plain", max_length=255, blank=True)
related_groups = models.ManyToManyField(Group, blank=True)
related_docs = models.ManyToManyField(Document, blank=True)
class Meta:
ordering = ['time']

16
ietf/message/utils.py Normal file
View file

@ -0,0 +1,16 @@
from ietf.message.models import Message
def infer_message(s):
from email import message_from_string
parsed = message_from_string(s.encode("utf-8"))
m = Message()
m.subject = parsed.get("Subject", "").decode("utf-8")
m.frm = parsed.get("From", "").decode("utf-8")
m.to = parsed.get("To", "").decode("utf-8")
m.bcc = parsed.get("Bcc", "").decode("utf-8")
m.reply_to = parsed.get("Reply-to", "").decode("utf-8")
m.body = parsed.get_payload().decode("utf-8")
return m

View file

@ -224,6 +224,7 @@ class SubmitTestCase(django.test.TestCase):
self.assertEquals(draft.authors.all()[0].address, "testname@example.com")
self.assertEquals(len(outbox), mailbox_before + 3)
self.assertTrue((u"I-D Action: %s" % name) in outbox[-3]["Subject"])
self.assertTrue((u"I-D Action: %s" % name) in draft.message_set.order_by("-time")[0].subject)
self.assertTrue("Test Name" in unicode(outbox[-3]))
self.assertTrue("New Version Notification" in outbox[-2]["Subject"])
self.assertTrue(name in unicode(outbox[-2]))

View file

@ -5,16 +5,18 @@ import datetime
from django.conf import settings
from django.contrib.sites.models import Site
from django.core.urlresolvers import reverse as urlreverse
from django.template.loader import render_to_string
from ietf.idtracker.models import (InternetDraft, PersonOrOrgInfo, IETFWG,
IDAuthor, EmailAddress, IESGLogin, BallotInfo)
from ietf.submit.models import TempIdAuthors
from ietf.utils.mail import send_mail
from ietf.utils.mail import send_mail, send_mail_message
from ietf.utils import unaccent
from ietf.doc.models import *
from ietf.person.models import Person, Alias, Email
from ietf.doc.utils import active_ballot_positions
from ietf.message.models import Message
# Some useful states
UPLOADED = 1
@ -186,21 +188,38 @@ def send_announcements(submission, draft, state_change_msg):
def announce_to_lists(request, submission):
subject = 'I-D Action: %s-%s.txt' % (submission.filename, submission.revision)
from_email = settings.IDSUBMIT_ANNOUNCE_FROM_EMAIL
to_email = [settings.IDSUBMIT_ANNOUNCE_LIST_EMAIL]
authors = []
for i in submission.tempidauthors_set.order_by('author_order'):
if not i.author_order:
continue
authors.append(i.get_full_name())
if submission.group_acronym:
cc = [submission.group_acronym.email_address]
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
m = Message()
m.by = request.user.get_profile() if request.user.is_authenticated() else Person.objects.get(name="(System)")
m.subject = 'I-D Action: %s-%s.txt' % (submission.filename, submission.revision)
m.frm = settings.IDSUBMIT_ANNOUNCE_FROM_EMAIL
m.to = settings.IDSUBMIT_ANNOUNCE_LIST_EMAIL
if submission.group_acronym:
m.cc = submission.group_acronym.email_address
m.body = render_to_string('submit/announce_to_lists.txt', dict(submission=submission,
authors=authors))
m.save()
m.related_docs.add(Document.objects.get(name=submission.filename))
send_mail_message(request, m)
else:
cc = None
send_mail(request, to_email, from_email, subject, 'submit/announce_to_lists.txt',
{'submission': submission,
'authors': authors}, cc=cc)
subject = 'I-D Action: %s-%s.txt' % (submission.filename, submission.revision)
from_email = settings.IDSUBMIT_ANNOUNCE_FROM_EMAIL
to_email = [settings.IDSUBMIT_ANNOUNCE_LIST_EMAIL]
if submission.group_acronym:
cc = [submission.group_acronym.email_address]
else:
cc = None
send_mail(request, to_email, from_email, subject, 'submit/announce_to_lists.txt',
{'submission': submission,
'authors': authors}, cc=cc, save_message=True)
def announce_new_version(request, submission, draft, state_change_msg):

View file

@ -169,7 +169,8 @@ def send_mail_mime(request, to, frm, subject, msg, cc=None, extra=None, toUser=F
msg['X-IETF-IDTracker'] = ietf.__version__
if extra:
for k, v in extra.items():
msg[k] = v
if v:
msg[k] = v
if test_mode or settings.SERVER_MODE == 'production':
send_smtp(msg, bcc)
elif settings.SERVER_MODE == 'test':
@ -195,3 +196,7 @@ def send_mail_preformatted(request, preformatted):
for key in ['To', 'From', 'Subject', ]:
del extra[key]
send_mail_text(request, msg['To'], msg["From"], msg["Subject"], msg.get_payload(), extra=extra)
def send_mail_message(request, message):
# note that this doesn't handle MIME messages at the moment
send_mail_text(request, message.to, message.frm, message.subject, message.body, cc=message.cc, bcc=message.bcc, extra={ 'Reply-to': message.reply_to })