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:
parent
1b1cb2f3b5
commit
480cb04cd6
|
@ -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']
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
16
ietf/message/utils.py
Normal 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
|
|
@ -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]))
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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 })
|
||||
|
|
Loading…
Reference in a new issue