checkpoint. Sets initial notify to empty
- Legacy-Id: 10009
This commit is contained in:
parent
ecad71eb82
commit
6c85bc558c
|
@ -105,14 +105,11 @@ def generate_ballot_writeup(request, doc):
|
|||
|
||||
def generate_last_call_announcement(request, doc):
|
||||
expiration_date = datetime.date.today() + datetime.timedelta(days=14)
|
||||
cc = []
|
||||
if doc.group.type_id in ("individ", "area"):
|
||||
group = "an individual submitter"
|
||||
expiration_date += datetime.timedelta(days=14)
|
||||
else:
|
||||
group = "the %s WG (%s)" % (doc.group.name, doc.group.acronym)
|
||||
if doc.group.list_email:
|
||||
cc.append(doc.group.list_email)
|
||||
|
||||
doc.filled_title = textwrap.fill(doc.title, width=70, subsequent_indent=" " * 3)
|
||||
|
||||
|
@ -127,7 +124,8 @@ def generate_last_call_announcement(request, doc):
|
|||
dict(doc=doc,
|
||||
doc_url=settings.IDTRACKER_BASE_URL + doc.get_absolute_url() + "ballot/",
|
||||
expiration_date=expiration_date.strftime("%Y-%m-%d"), #.strftime("%B %-d, %Y"),
|
||||
cc=", ".join("<%s>" % e for e in cc),
|
||||
to=",\n ".join(gather_addresses('last_call_issued',doc=doc)),
|
||||
cc=",\n ".join(gather_addresses('last_call_issued_cc',doc=doc)),
|
||||
group=group,
|
||||
docs=[ doc ],
|
||||
urls=[ settings.IDTRACKER_BASE_URL + doc.get_absolute_url() ],
|
||||
|
@ -256,14 +254,17 @@ def generate_publication_request(request, doc):
|
|||
)
|
||||
|
||||
def send_last_call_request(request, doc):
|
||||
to = "iesg-secretary@ietf.org"
|
||||
to = gather_addresses('last_call_requested',doc=doc)
|
||||
cc = gather_addresses('last_call_requested_cc',doc=doc)
|
||||
frm = '"DraftTracker Mail System" <iesg-secretary@ietf.org>'
|
||||
|
||||
send_mail(request, to, frm,
|
||||
"Last Call: %s" % doc.file_tag(),
|
||||
"doc/mail/last_call_request.txt",
|
||||
dict(docs=[doc],
|
||||
doc_url=settings.IDTRACKER_BASE_URL + doc.get_absolute_url()))
|
||||
doc_url=settings.IDTRACKER_BASE_URL + doc.get_absolute_url(),
|
||||
),
|
||||
cc=cc)
|
||||
|
||||
def email_resurrect_requested(request, doc, by):
|
||||
to = "I-D Administrator <internet-drafts@ietf.org>"
|
||||
|
|
|
@ -196,8 +196,7 @@ class EditCharterTests(TestCase):
|
|||
self.assertEqual(charter.notify,newlist)
|
||||
q = PyQuery(r.content)
|
||||
formlist = q('form input[name=notify]')[0].value
|
||||
self.assertTrue('marschairman@ietf.org' in formlist)
|
||||
self.assertFalse('someone@example.com' in formlist)
|
||||
self.assertEqual(formlist, None)
|
||||
|
||||
def test_edit_ad(self):
|
||||
make_test_data()
|
||||
|
|
|
@ -189,9 +189,7 @@ class ConflictReviewTests(TestCase):
|
|||
# Regenerate does not save!
|
||||
self.assertEqual(doc.notify,newlist)
|
||||
q = PyQuery(r.content)
|
||||
self.assertTrue('draft-imaginary-irtf-submission@ietf.org' in q('form input[name=notify]')[0].value)
|
||||
self.assertTrue('irtf-chair@ietf.org' in q('form input[name=notify]')[0].value)
|
||||
self.assertTrue('foo@bar.baz.com' not in q('form input[name=notify]')[0].value)
|
||||
self.assertEqual(None,q('form input[name=notify]')[0].value)
|
||||
|
||||
def test_edit_ad(self):
|
||||
doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission')
|
||||
|
|
|
@ -330,7 +330,7 @@ class EditInfoTests(TestCase):
|
|||
self.assertEqual(r.status_code, 200)
|
||||
q = PyQuery(r.content)
|
||||
self.assertEqual(len(q('form select[name=intended_std_level]')), 1)
|
||||
self.assertTrue('@' in q('form input[name=notify]')[0].get('value'))
|
||||
self.assertEqual(None,q('form input[name=notify]')[0].value)
|
||||
|
||||
# add
|
||||
events_before = draft.docevent_set.count()
|
||||
|
@ -734,7 +734,7 @@ class IndividualInfoFormsTests(TestCase):
|
|||
# Regenerate does not save!
|
||||
self.assertEqual(self.doc.notify,'TJ2APh2P@ietf.org')
|
||||
q = PyQuery(r.content)
|
||||
self.assertTrue('TJ2Aph2P' not in q('form input[name=notify]')[0].value)
|
||||
self.assertEqual(None,q('form input[name=notify]')[0].value)
|
||||
|
||||
def test_doc_change_intended_status(self):
|
||||
url = urlreverse('doc_change_intended_status', kwargs=dict(name=self.docname))
|
||||
|
@ -1092,9 +1092,7 @@ class AdoptDraftTests(TestCase):
|
|||
self.assertEqual(draft.group.acronym, "mars")
|
||||
self.assertEqual(draft.stream_id, "ietf")
|
||||
self.assertEqual(draft.docevent_set.count() - events_before, 5)
|
||||
self.assertTrue('draft-ietf-mars-test@ietf.org' in draft.notify)
|
||||
self.assertTrue('draft-ietf-mars-test.ad@ietf.org' in draft.notify)
|
||||
self.assertTrue('draft-ietf-mars-test.shepherd@ietf.org' in draft.notify)
|
||||
self.assertEqual(draft.notify,"aliens@example.mars")
|
||||
self.assertEqual(len(outbox), mailbox_before + 1)
|
||||
self.assertTrue("state changed" in outbox[-1]["Subject"].lower())
|
||||
self.assertTrue("marschairman@ietf.org" in unicode(outbox[-1]))
|
||||
|
|
|
@ -111,7 +111,6 @@ class StatusChangeTests(TestCase):
|
|||
doc = Document.objects.get(name='status-change-imaginary-mid-review')
|
||||
self.assertEquals(doc.get_state('statchg').slug,'lc-req')
|
||||
self.assertEquals(len(outbox), messages_before + 1)
|
||||
self.assertTrue('iesg-secretary' in outbox[-1]['To'])
|
||||
self.assertTrue('Last Call:' in outbox[-1]['Subject'])
|
||||
|
||||
# successful change to IESG Evaluation
|
||||
|
@ -157,9 +156,7 @@ class StatusChangeTests(TestCase):
|
|||
self.assertEqual(doc.notify,newlist)
|
||||
q = PyQuery(r.content)
|
||||
formlist = q('form input[name=notify]')[0].value
|
||||
self.assertTrue('draft-ietf-random-thing@ietf.org' in formlist)
|
||||
self.assertTrue('draft-ietf-random-otherthing@ietf.org' in formlist)
|
||||
self.assertFalse('foo@bar.baz.com' in formlist)
|
||||
self.assertEqual(None,formlist)
|
||||
|
||||
def test_edit_title(self):
|
||||
doc = Document.objects.get(name='status-change-imaginary-mid-review')
|
||||
|
@ -285,7 +282,6 @@ class StatusChangeTests(TestCase):
|
|||
self.assertEqual(r.status_code,200)
|
||||
self.assertTrue( 'Last call requested' in ''.join(wrap(r.content,2**16)))
|
||||
self.assertEqual(len(outbox), messages_before + 1)
|
||||
self.assertTrue('iesg-secretary' in outbox[-1]['To'])
|
||||
self.assertTrue('Last Call:' in outbox[-1]['Subject'])
|
||||
self.assertTrue('Last Call Request has been submitted' in ''.join(wrap(unicode(outbox[-1]),2**16)))
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ import math
|
|||
import datetime
|
||||
|
||||
from django.conf import settings
|
||||
from django.db.models import Q
|
||||
from django.db.models.query import EmptyQuerySet
|
||||
from django.forms import ValidationError
|
||||
from django.utils.html import strip_tags, escape
|
||||
|
@ -13,10 +12,9 @@ from django.utils.html import strip_tags, escape
|
|||
from ietf.doc.models import Document, DocHistory, State
|
||||
from ietf.doc.models import DocAlias, RelatedDocument, BallotType, DocReminder
|
||||
from ietf.doc.models import DocEvent, BallotDocEvent, NewRevisionDocEvent, StateDocEvent
|
||||
from ietf.doc.models import save_document_in_history, STATUSCHANGE_RELATIONS
|
||||
from ietf.doc.models import save_document_in_history
|
||||
from ietf.name.models import DocReminderTypeName, DocRelationshipName
|
||||
from ietf.group.models import Role
|
||||
from ietf.person.models import Email
|
||||
from ietf.ietfauth.utils import has_role
|
||||
from ietf.utils import draft, markup_txt
|
||||
from ietf.utils.mail import send_mail
|
||||
|
@ -543,41 +541,9 @@ def check_common_doc_name_rules(name):
|
|||
raise ValidationError(errors)
|
||||
|
||||
def get_initial_notify(doc,extra=None):
|
||||
# set change state notice to something sensible
|
||||
# With the mailtoken based changes, a document's notify should start empty
|
||||
receivers = []
|
||||
|
||||
if doc.type.slug=='draft':
|
||||
if doc.group.type_id in ("individ", "area"):
|
||||
for a in doc.authors.all():
|
||||
receivers.append(a.address)
|
||||
else:
|
||||
receivers.append("%s-chairs@%s" % (doc.group.acronym, settings.DRAFT_ALIAS_DOMAIN))
|
||||
for editor in Email.objects.filter(role__name="editor", role__group=doc.group):
|
||||
receivers.append(editor.address)
|
||||
|
||||
receivers.append("%s@%s" % (doc.name, settings.DRAFT_ALIAS_DOMAIN))
|
||||
receivers.append("%s.ad@%s" % (doc.name, settings.DRAFT_ALIAS_DOMAIN))
|
||||
receivers.append("%s.shepherd@%s" % (doc.name, settings.DRAFT_ALIAS_DOMAIN))
|
||||
|
||||
elif doc.type.slug=='charter':
|
||||
receivers.extend([role.person.formatted_email() for role in doc.group.role_set.filter(name__slug__in=['ad','chair','secr','techadv'])])
|
||||
|
||||
else:
|
||||
pass
|
||||
|
||||
for relation in doc.relateddocument_set.filter(Q(relationship='conflrev')|Q(relationship__in=STATUSCHANGE_RELATIONS)):
|
||||
if relation.relationship.slug=='conflrev':
|
||||
doc_to_review = relation.target.document
|
||||
receivers.extend([x.person.formatted_email() for x in Role.objects.filter(group__acronym=doc_to_review.stream.slug,name='chair')])
|
||||
receivers.append("%s@%s" % (doc_to_review.name, settings.DRAFT_ALIAS_DOMAIN))
|
||||
elif relation.relationship.slug in STATUSCHANGE_RELATIONS:
|
||||
affected_doc = relation.target.document
|
||||
if affected_doc.notify:
|
||||
receivers.extend(affected_doc.notify.split(','))
|
||||
|
||||
if doc.shepherd:
|
||||
receivers.append(doc.shepherd.email_address())
|
||||
|
||||
if extra:
|
||||
if isinstance(extra,basestring):
|
||||
extra = extra.split(', ')
|
||||
|
|
|
@ -127,8 +127,8 @@ def default_action_text(group, charter, by):
|
|||
techadv=group.role_set.filter(name="techadv"),
|
||||
milestones=group.groupmilestone_set.filter(state="charter"),
|
||||
action_type=action,
|
||||
to=", ".join(gather_addresses('ballot_approved_charter',doc=charter,group=group)),
|
||||
cc=", ".join(gather_addresses('ballot_approved_charter_cc',doc=charter,group=group)),
|
||||
to=",\n ".join(gather_addresses('ballot_approved_charter',doc=charter,group=group)),
|
||||
cc=",\n ".join(gather_addresses('ballot_approved_charter_cc',doc=charter,group=group)),
|
||||
))
|
||||
|
||||
e.save()
|
||||
|
|
|
@ -299,8 +299,8 @@ def default_approval_text(status_change,relateddoc):
|
|||
approved_text = current_text,
|
||||
action=action,
|
||||
newstatus=newstatus(relateddoc),
|
||||
to=", ".join(gather_addresses('ballot_approved_status_change',doc=status_change)),
|
||||
cc=", ".join(gather_addresses('ballot_approved_status_change_cc',doc=status_change)),
|
||||
to=",\n ".join(gather_addresses('ballot_approved_status_change',doc=status_change)),
|
||||
cc=",\n ".join(gather_addresses('ballot_approved_status_change_cc',doc=status_change)),
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
@ -194,6 +194,31 @@ def make_mailtokens(apps):
|
|||
'doc_affecteddoc_notify',
|
||||
])
|
||||
|
||||
mt_factory(slug='last_call_requested',
|
||||
desc='Recipients when AD requests a last call',
|
||||
recipient_slugs=['iesg_secretary',])
|
||||
|
||||
mt_factory(slug='last_call_requested_cc',
|
||||
desc='Copied when AD requests a last call',
|
||||
recipient_slugs=['doc_ad',
|
||||
'doc_shepherd',
|
||||
'doc_notify'])
|
||||
|
||||
mt_factory(slug='last_call_issued',
|
||||
desc='Recipients when a last call is issued',
|
||||
recipient_slugs=['ietf_announce',])
|
||||
|
||||
mt_factory(slug='last_call_issued_cc',
|
||||
desc='Copied when a last call is issued',
|
||||
recipient_slugs=['doc_ad',
|
||||
'doc_shepherd',
|
||||
'doc_authors',
|
||||
'doc_notify',
|
||||
'doc_group_list_email',
|
||||
'doc_group_chairs',
|
||||
'doc_affecteddoc_authors',
|
||||
'doc_affecteddoc_group_chairs',
|
||||
'doc_affecteddoc_notify'])
|
||||
|
||||
def forward(apps, schema_editor):
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{% load ietf_filters %}{% load mail_filters %}{% autoescape off %}From: The IESG <iesg-secretary@ietf.org>
|
||||
To: IETF-Announce <ietf-announce@ietf.org>{% if cc %}
|
||||
To: {{ to }}{% if cc %}
|
||||
CC: {{ cc }}{% endif %}
|
||||
Reply-To: ietf@ietf.org
|
||||
Sender: <iesg-secretary@ietf.org>
|
||||
|
|
|
@ -335,7 +335,7 @@ def make_test_data():
|
|||
# This won't allow testing the results of the production configuration - if we want to do that, we'll need to
|
||||
# extract the production data either directly, or as a fixture
|
||||
recipient = Recipient.objects.create(slug='bogus_recipient',desc='Bogus Recipient',template='bogus@example.com')
|
||||
for slug in [u'ballot_approved_charter', u'ballot_approved_charter_cc', u'ballot_approved_conflrev', u'ballot_approved_conflrev_cc', u'ballot_approved_ietf_stream', u'ballot_approved_ietf_stream_cc', u'ballot_approved_ietf_stream_iana', u'ballot_approved_status_change', u'ballot_approved_status_change_cc', u'ballot_deferred', u'ballot_saved', u'ballot_saved_cc']:
|
||||
for slug in [u'ballot_approved_charter', u'ballot_approved_charter_cc', u'ballot_approved_conflrev', u'ballot_approved_conflrev_cc', u'ballot_approved_ietf_stream', u'ballot_approved_ietf_stream_cc', u'ballot_approved_ietf_stream_iana', u'ballot_approved_status_change', u'ballot_approved_status_change_cc', u'ballot_deferred', u'ballot_saved', u'ballot_saved_cc', u'last_call_issued', u'last_call_issued_cc', u'last_call_requested', u'last_call_requested_cc']:
|
||||
m = MailToken.objects.create(slug=slug,desc=slug)
|
||||
m.recipients=[recipient]
|
||||
|
||||
|
|
Loading…
Reference in a new issue