From 79dda88337ba783ee142f67efab2531e4100b875 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Wed, 11 Feb 2015 21:50:34 +0000 Subject: [PATCH] Adds pages to view the draft and group email aliases, either as a whole, or per document or group. Commit ready for merge. - Legacy-Id: 9070 --- ietf/doc/urls.py | 3 +++ ietf/doc/views_doc.py | 22 ++++++++++++++++++++-- ietf/group/info.py | 20 ++++++++++++++++++++ ietf/group/urls.py | 2 ++ ietf/templates/doc/email_aliases.html | 20 ++++++++++++++++++++ ietf/templates/group/email_aliases.html | 20 ++++++++++++++++++++ 6 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 ietf/templates/doc/email_aliases.html create mode 100644 ietf/templates/group/email_aliases.html diff --git a/ietf/doc/urls.py b/ietf/doc/urls.py index 8997b570a..8f7af67a7 100644 --- a/ietf/doc/urls.py +++ b/ietf/doc/urls.py @@ -46,6 +46,7 @@ urlpatterns = patterns('', url(r'^rfc-status-changes/$', views_status_change.rfc_status_changes, name='rfc_status_changes'), url(r'^start-rfc-status-change/(?P[A-Za-z0-9._+-]*)$', views_status_change.start_rfc_status_change, name='start_rfc_status_change'), url(r'^iesg/(?P[A-Za-z0-9.-]+/)?$', views_search.drafts_in_iesg_process, name="drafts_in_iesg_process"), + url(r'^email-aliases/$', views_doc.email_aliases), url(r'^all/$', views_search.index_all_drafts, name="index_all_drafts"), url(r'^active/$', views_search.index_active_drafts, name="index_active_drafts"), @@ -63,6 +64,8 @@ urlpatterns = patterns('', (r'^(?P[A-Za-z0-9._+-]+)/doc.json$', views_doc.document_json), (r'^(?P[A-Za-z0-9._+-]+)/ballotpopup/(?P[0-9]+)/$', views_doc.ballot_popup), + url(r'^(?P[A-Za-z0-9._+-]+)/email-aliases/$', views_doc.email_aliases), + url(r'^(?P[A-Za-z0-9._+-]+)/edit/state/$', views_draft.change_state, name='doc_change_state'), # IESG state url(r'^(?P[A-Za-z0-9._+-]+)/edit/state/(?Piana-action|iana-review)/$', views_draft.change_iana_state, name='doc_change_iana_state'), url(r'^(?P[A-Za-z0-9._+-]+)/edit/info/$', views_draft.edit_info, name='doc_edit_info'), diff --git a/ietf/doc/views_doc.py b/ietf/doc/views_doc.py index 9483c7242..61e58ecaf 100644 --- a/ietf/doc/views_doc.py +++ b/ietf/doc/views_doc.py @@ -30,10 +30,12 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -import os, datetime, urllib, json, glob +import os, datetime, urllib, json, glob, re + +from contextlib import closing from django.http import HttpResponse, Http404 , HttpResponseForbidden -from django.shortcuts import render_to_response, get_object_or_404, redirect +from django.shortcuts import render, render_to_response, get_object_or_404, redirect from django.template import RequestContext from django.template.loader import render_to_string from django.core.exceptions import ObjectDoesNotExist @@ -957,3 +959,19 @@ def edit_notify(request, name): 'titletext': titletext, }, context_instance = RequestContext(request)) + +def email_aliases(request,name=''): + doc = get_object_or_404(Document, name=name) if name else None + if name: + pattern = re.compile('^expand-(%s)(\..*?)?@.*? +(.*)$'%name) + else: + pattern = re.compile('^expand-(.*?)(\..*?)?@.*? +(.*)$') + aliases = [] + with closing(open(settings.DRAFT_VIRTUAL_PATH,"r")) as virtual_file: + for line in virtual_file.readlines(): + m = pattern.match(line) + if m: + aliases.append({'doc_name':m.group(1),'alias_type':m.group(2),'expansion':m.group(3)}) + + return render(request,'doc/email_aliases.html',{'aliases':aliases,'ietf_domain':settings.IETF_DOMAIN,'doc':doc}) + diff --git a/ietf/group/info.py b/ietf/group/info.py index cfce1d847..59b844036 100644 --- a/ietf/group/info.py +++ b/ietf/group/info.py @@ -34,8 +34,10 @@ import os import itertools +import re from tempfile import mkstemp from collections import OrderedDict +from contextlib import closing from django.shortcuts import render from django.template.loader import render_to_string @@ -621,3 +623,21 @@ def dependencies_pdf(request, acronym, group_type=None): os.unlink(dotname) return HttpResponse(pdf, content_type='application/pdf') + +def email_aliases(request, acronym=None): + group = get_group_or_404(acronym,None) if acronym else None + + if acronym: + pattern = re.compile('expand-(%s)(-\w+)@.*? +(.*)$'%acronym) + else: + pattern = re.compile('expand-(.*?)(-\w+)@.*? +(.*)$') + + aliases = [] + with closing(open(settings.GROUP_VIRTUAL_PATH,"r")) as virtual_file: + for line in virtual_file.readlines(): + m = pattern.match(line) + if m: + aliases.append({'acronym':m.group(1),'alias_type':m.group(2),'expansion':m.group(3)}) + + return render(request,'group/email_aliases.html',{'aliases':aliases,'ietf_domain':settings.IETF_DOMAIN,'group':group}) + diff --git a/ietf/group/urls.py b/ietf/group/urls.py index 283eb38cd..277356ed6 100644 --- a/ietf/group/urls.py +++ b/ietf/group/urls.py @@ -7,6 +7,7 @@ urlpatterns = patterns('', (r'^chartering/$', 'ietf.group.info.chartering_groups'), (r'^chartering/create/(?P(wg|rg))/$', 'ietf.group.edit.edit', {'action': "charter"}, "group_create"), (r'^concluded/$', 'ietf.group.info.concluded_groups'), + (r'^email-aliases/$', 'ietf.group.info.email_aliases'), # FIXME: the things below are duplicated in urls_info.py while we # figure out whether to serve everything from /group/, # need to unify these at some point @@ -29,6 +30,7 @@ urlpatterns = patterns('', (r'^(?P[a-zA-Z0-9-._]+)/materials/$', 'ietf.group.info.materials', None, "group_materials"), (r'^(?P[a-zA-Z0-9-._]+)/materials/new/$', 'ietf.doc.views_material.choose_material_type'), (r'^(?P[a-zA-Z0-9-._]+)/materials/new/(?P[\w-]+)/$', 'ietf.doc.views_material.edit_material', { 'action': "new" }, "group_new_material"), + (r'^(?P[A-Za-z0-9._+-]+)/email-aliases/$', 'ietf.group.info.email_aliases'), ) diff --git a/ietf/templates/doc/email_aliases.html b/ietf/templates/doc/email_aliases.html new file mode 100644 index 000000000..919232c25 --- /dev/null +++ b/ietf/templates/doc/email_aliases.html @@ -0,0 +1,20 @@ +{% extends "base.html" %} + +{% block morecss %} +td.aliasname { white-space:nowrap;} +{% endblock %} + +{% block title %}Document email aliases{% if doc %} for {{doc.name}}{% endif %}{% endblock %} + +{% block content %} +

Document email aliases{% if doc %} for {{doc.name}}{% endif %}

+{% regroup aliases|dictsort:"doc_name" by doc_name as alias_list %} + +{% for alias in alias_list %} + {% cycle 'evenrow' 'oddrow' as alternator silent %} + {% for item in alias.list %} + + {% endfor %} +{% endfor %} +
{{alias.grouper}}{{item.alias_type|default:''}}@{{ietf_domain}}{{item.expansion}}
+{% endblock %} diff --git a/ietf/templates/group/email_aliases.html b/ietf/templates/group/email_aliases.html new file mode 100644 index 000000000..0df50b053 --- /dev/null +++ b/ietf/templates/group/email_aliases.html @@ -0,0 +1,20 @@ +{% extends "base.html" %} + +{% block morecss %} +td.aliasname { white-space:nowrap;} +{% endblock %} + +{% block title %}Group email aliases{% if group %} for {{group.acronym}}{% endif %}{% endblock %} + +{% block content %} +

Group email aliases{% if group %} for {{group.acronym}}{% endif %}

+{% regroup aliases|dictsort:"acronym" by acronym as alias_list %} + +{% for alias in alias_list %} + {% cycle 'evenrow' 'oddrow' as alternator silent %} + {% for item in alias.list %} + + {% endfor %} +{% endfor %} +
{{alias.grouper}}{{item.alias_type|default:''}}@{{ietf_domain}}{{item.expansion}}
+{% endblock %}