Skip to content

Commit 9abd670

Browse files
committed
Rudimentary stab at an email-expansion tag for docs
- Legacy-Id: 10056
1 parent 275023f commit 9abd670

7 files changed

Lines changed: 128 additions & 7 deletions

File tree

ietf/doc/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
url(r'^(?P<name>[A-Za-z0-9._+-]+)/(?:(?P<rev>[0-9-]+)/)?$', views_doc.document_main, name="doc_view"),
5656
url(r'^(?P<name>[A-Za-z0-9._+-]+)/history/$', views_doc.document_history, name="doc_history"),
5757
url(r'^(?P<name>[A-Za-z0-9._+-]+)/writeup/$', views_doc.document_writeup, name="doc_writeup"),
58+
url(r'^(?P<name>[A-Za-z0-9._+-]+)/email/$', views_doc.document_email, name="doc_email"),
5859
url(r'^(?P<name>[A-Za-z0-9._+-]+)/shepherdwriteup/$', views_doc.document_shepherd_writeup, name="doc_shepherd_writeup"),
5960
url(r'^(?P<name>[A-Za-z0-9._+-]+)/references/$', views_doc.document_references, name="doc_references"),
6061
url(r'^(?P<name>[A-Za-z0-9._+-]+)/referencedby/$', views_doc.document_referenced_by, name="doc_referenced_by"),

ietf/doc/views_doc.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
from ietf.utils.history import find_history_active_at
6060
from ietf.doc.forms import TelechatForm, NotifyForm
6161
from ietf.doc.mails import email_ad
62+
from ietf.mailtoken.utils import gather_relevant_expansions
6263

6364
def render_document_top(request, doc, tab, name):
6465
tabs = []
@@ -73,6 +74,7 @@ def render_document_top(request, doc, tab, name):
7374
if doc.type_id == "draft" or (doc.type_id == "charter" and doc.group.type_id == "wg"):
7475
tabs.append(("IESG Writeups", "writeup", urlreverse("doc_writeup", kwargs=dict(name=name)), True))
7576

77+
tabs.append(("Email expansions","email",urlreverse("doc_email", kwargs=dict(name=name)), True))
7678
tabs.append(("History", "history", urlreverse("doc_history", kwargs=dict(name=name)), True))
7779

7880
if name.startswith("rfc"):
@@ -572,6 +574,18 @@ def document_main(request, name, rev=None):
572574

573575

574576

577+
def document_email(request,name):
578+
doc = get_object_or_404(Document, docalias__name=name)
579+
top = render_document_top(request, doc, "email", name)
580+
581+
expansions = gather_relevant_expansions(doc=doc)
582+
583+
return render(request, "doc/document_email.html",
584+
dict(doc=doc,
585+
top=top,
586+
expansions=expansions,
587+
)
588+
)
575589

576590

577591
def document_history(request, name):

ietf/mailtoken/migrations/0002_auto_20150809_1314.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,15 +103,15 @@ def make_recipients(apps):
103103

104104
rc(slug='group_mail_list',
105105
desc="The group's mailing list",
106-
template='<{{ group.list_email }}>')
106+
template='{% if group.list_email %}<{{ group.list_email }}>{% endif %}')
107107

108108
rc(slug='group_steering_group',
109109
desc="The group's steering group (IESG or IRSG)",
110110
template=None)
111111

112112
rc(slug='group_chairs',
113113
desc="The group's chairs",
114-
template="<{{group.acronym}}-chairs@ietf.org>")
114+
template="{% if group and group.acronym %}<{{group.acronym}}-chairs@ietf.org>{% endif %}")
115115

116116
rc(slug='group_responsible_directors',
117117
desc="The group's responsible AD(s) or IRTF chair",
@@ -429,7 +429,8 @@ def mt_factory(slug,desc,to_slugs,cc_slugs=[]):
429429

430430
mt_factory(slug='doc_stream_changed',
431431
desc="Recipients for notification when a document's stream changes",
432-
to_slugs=['stream_managers',
432+
to_slugs=['doc_authors',
433+
'stream_managers',
433434
'doc_notify',
434435
])
435436

ietf/mailtoken/utils.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,50 @@ def gather_address_lists(slug, **kwargs):
2828

2929
return AddrLists(to=list(to),cc=list(cc))
3030

31+
def gather_relevant_expansions(**kwargs):
32+
relevant = set()
33+
34+
if 'doc' in kwargs:
35+
36+
doc = kwargs['doc']
37+
38+
relevant.update(MailToken.objects.filter(slug__startswith='doc_').values_list('slug',flat=True))
39+
40+
if doc.stream_id == 'ietf':
41+
relevant.update(['ballot_approved_ietf_stream'])
42+
else:
43+
relevant.update(['pubreq_rfced'])
44+
45+
if doc.type_id in ['draft','statchg']:
46+
relevant.update(MailToken.objects.filter(slug__startswith='last_call_').values_list('slug',flat=True))
47+
if doc.type_id == 'draft':
48+
relevant.update(['ipr_posted_on_doc',])
49+
if doc.type_id == 'conflrev':
50+
relevant.update(['conflrev_requested','ballot_approved_conflrev'])
51+
if doc.type_id == 'charter':
52+
relevant.update(['charter_external_review','ballot_approved_charter'])
53+
54+
rule_list = []
55+
for mailtoken in MailToken.objects.filter(slug__in=relevant):
56+
addrs = gather_address_lists(mailtoken.slug,**kwargs)
57+
rule_list.append((mailtoken.slug,mailtoken.desc,addrs.to,addrs.cc))
58+
return sorted(rule_list)
59+
60+
#def gather_relevant_expansions_recipient(**kwargs):
61+
# relevant_tokens = []
62+
#
63+
# if 'doc' in kwargs:
64+
# relevant_tokens.extend(Recipient.objects.filter(slug__startswith='doc').values_list('slug',flat=True))
65+
#
66+
# rule_dict = {}
67+
#
68+
# for recipient in Recipient.objects.filter(slug__in=relevant_tokens):
69+
# #for recipient in Recipient.objects.all():
70+
# addrs = recipient.gather(**kwargs)
71+
# if addrs:
72+
# rule_dict[recipient.slug] = recipient.gather(**kwargs)
73+
# return sorted(rule_dict.iteritems())
74+
3175
def get_base_ipr_request_address():
3276
return Recipient.objects.get(slug='ipr_requests').gather()[0]
3377

ietf/name/fixtures/names.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4473,7 +4473,7 @@
44734473
},
44744474
{
44754475
"fields": {
4476-
"template": "<{{group.acronym}}-chairs@ietf.org>",
4476+
"template": "{% if group and group.acronym %}<{{group.acronym}}-chairs@ietf.org>{% endif %}",
44774477
"desc": "The group's chairs"
44784478
},
44794479
"model": "mailtoken.recipient",
@@ -4489,7 +4489,7 @@
44894489
},
44904490
{
44914491
"fields": {
4492-
"template": "<{{ group.list_email }}>",
4492+
"template": "{% if group.list_email %}<{{ group.list_email }}>{% endif %}",
44934493
"desc": "The group's mailing list"
44944494
},
44954495
"model": "mailtoken.recipient",
@@ -5081,6 +5081,7 @@
50815081
"fields": {
50825082
"cc": [],
50835083
"to": [
5084+
"doc_authors",
50845085
"doc_notify",
50855086
"stream_managers"
50865087
],
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
{% extends "base.html" %}
2+
{# Copyright The IETF Trust 2015, All Rights Reserved #}
3+
{% load origin %}
4+
{% load ietf_filters %}
5+
{% load future %}
6+
7+
{% block title %}Email expansions for {{ doc.name }}-{{ doc.rev }}{% endblock %}
8+
9+
{% block content %}
10+
{% origin %}
11+
{{ top|safe }}
12+
13+
<h2>Recipient Expansions</h2>
14+
15+
<table class="table table-condensed table-striped ietf">
16+
<thead>
17+
<tr>
18+
<th>MailToken</th>
19+
<th>To</th>
20+
<th>Cc</th>
21+
</tr>
22+
</thead>
23+
<tbody>
24+
{% for token,desc,to,cc in expansions %}
25+
<tr>
26+
<td><a href="{% url 'ietf.mailtoken.views.show_tokens' token %}"
27+
title="{{desc}}">{{token}}</a></td>
28+
<td> {{to|join:', '}}</td>
29+
<td> {{cc|join:', '}}</td>
30+
</tr>
31+
{% endfor %}
32+
</tbody>
33+
</table>
34+
{% comment %}
35+
<table class="table table-condensed table-striped ietf">
36+
<thead>
37+
<tr>
38+
<th>Date</th>
39+
<th>Rev.</th>
40+
<th>By</th>
41+
<th>Action</th>
42+
</tr>
43+
</thead>
44+
45+
<tbody>
46+
{% for e in events %}
47+
<tr class="anchor-target" id="history-{{ e.pk }}">
48+
<td class="text-nowrap">{{ e.time|date:"Y-m-d" }}</td>
49+
<td class="text-center">{{ e.rev }}</td>
50+
<td>{{ e.by|escape }}</td>
51+
<td>{{ e.desc|format_history_text|safe }}</td>
52+
</tr>
53+
{% endfor %}
54+
</tbody>
55+
</table>
56+
{% endcomment %}
57+
{% endblock content %}

ietf/templates/mailtoken/recipient.html

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,11 @@ <h1>Mail Recipients</h1>
2323
<tr>
2424
<td><span title="{{recipient.desc}}">{{recipient.slug}}</span></td>
2525
<td>
26-
{% for mailtoken in recipient.mailtoken_set.all %}
27-
<a href="{% url 'ietf.mailtoken.views.show_tokens' mailtoken.slug %}" title="{{mailtoken.desc}}">{{mailtoken.slug}}{% if not forloop.last %}, {%endif%}
26+
{% for mailtoken in recipient.used_in_to.all %}
27+
<a href="{% url 'ietf.mailtoken.views.show_tokens' mailtoken.slug %}" title="{{mailtoken.desc}}">{{mailtoken.slug}}</a>{% if not forloop.last %}, {%endif%}
28+
{% endfor %}{% if recipient.used_in_to.exists and recipient.used_in_cc.exists %},{% endif %}
29+
{% for mailtoken in recipient.used_in_cc.all %}
30+
<a href="{% url 'ietf.mailtoken.views.show_tokens' mailtoken.slug %}" title="{{mailtoken.desc}}">{{mailtoken.slug}}</a>{% if not forloop.last %}, {%endif%}
2831
{% endfor %}
2932
</td>
3033
<td>{{recipient.template}}</td>

0 commit comments

Comments
 (0)