diff --git a/ietf/doc/tests.py b/ietf/doc/tests.py index 53b023bf9..82e16238d 100644 --- a/ietf/doc/tests.py +++ b/ietf/doc/tests.py @@ -788,14 +788,20 @@ expand-draft-ietf-ames-test.all@virtual.ietf.org ames-author@example.ames, ames os.unlink(self.doc_alias_file.name) def testAliases(self): - url = urlreverse('ietf.doc.views_doc.email_aliases', kwargs=dict(name="draft-ietf-mars-test")) + url = urlreverse('doc_specific_email_aliases', kwargs=dict(name="draft-ietf-mars-test")) r = self.client.get(url) - self.assertTrue(all([x in r.content for x in ['mars-test@','mars-test.authors@','mars-test.chairs@']])) - self.assertFalse(any([x in r.content for x in ['ames-test@','ames-test.authors@','ames-test.chairs@']])) + self.assertEqual(r.status_code, 302) url = urlreverse('ietf.doc.views_doc.email_aliases', kwargs=dict()) login_testing_unauthorized(self, "plain", url) r = self.client.get(url) + self.assertEqual(r.status_code, 200) self.assertTrue(all([x in r.content for x in ['mars-test@','mars-test.authors@','mars-test.chairs@']])) self.assertTrue(all([x in r.content for x in ['ames-test@','ames-test.authors@','ames-test.chairs@']])) + def testExpansions(self): + url = urlreverse('ietf.doc.views_doc.document_email', kwargs=dict(name="draft-ietf-mars-test")) + r = self.client.get(url) + self.assertEqual(r.status_code, 200) + self.assertTrue('draft-ietf-mars-test.all@ietf.org' in r.content) + self.assertTrue('ballot_saved' in r.content) diff --git a/ietf/doc/urls.py b/ietf/doc/urls.py index 6c8108f44..0711b11cb 100644 --- a/ietf/doc/urls.py +++ b/ietf/doc/urls.py @@ -66,7 +66,7 @@ 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._+-]+)/email-aliases/$', RedirectView.as_view(pattern_name='doc_email', permanent=False),name='doc_specific_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'), diff --git a/ietf/doc/views_doc.py b/ietf/doc/views_doc.py index 654b6f50c..5b097876c 100644 --- a/ietf/doc/views_doc.py +++ b/ietf/doc/views_doc.py @@ -571,19 +571,34 @@ def document_main(request, name, rev=None): raise Http404 - +def get_email_aliases(name): + if name: + pattern = re.compile('^expand-(%s)(\..*?)?@.*? +(.*)$'%name) + else: + pattern = re.compile('^expand-(.*?)(\..*?)?@.*? +(.*)$') + aliases = [] + with 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 aliases def document_email(request,name): doc = get_object_or_404(Document, docalias__name=name) top = render_document_top(request, doc, "email", name) + aliases = get_email_aliases(name) if doc.type_id=='draft' else None + expansions = gather_relevant_expansions(doc=doc) return render(request, "doc/document_email.html", dict(doc=doc, top=top, + aliases=aliases, expansions=expansions, + ietf_domain=settings.IETF_DOMAIN, ) ) @@ -999,20 +1014,12 @@ def edit_notify(request, name): 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: + if not name: # require login for the overview page, but not for the - # document-specific pages handled above + # document-specific pages if not request.user.is_authenticated(): return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path)) - pattern = re.compile('^expand-(.*?)(\..*?)?@.*? +(.*)$') - aliases = [] - with 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)}) + aliases = get_email_aliases(name) return render(request,'doc/email_aliases.html',{'aliases':aliases,'ietf_domain':settings.IETF_DOMAIN,'doc':doc}) diff --git a/ietf/mailtoken/utils.py b/ietf/mailtoken/utils.py index 5f4bedb58..5b8fd6e0f 100644 --- a/ietf/mailtoken/utils.py +++ b/ietf/mailtoken/utils.py @@ -35,17 +35,19 @@ def gather_relevant_expansions(**kwargs): doc = kwargs['doc'] - relevant.update(MailToken.objects.filter(slug__startswith='doc_').values_list('slug',flat=True)) - - if doc.stream_id == 'ietf': - relevant.update(['ballot_approved_ietf_stream']) - else: - relevant.update(['pubreq_rfced']) + relevant.update(['doc_state_edited','doc_telechat_details_changed','ballot_deferred','ballot_saved']) if doc.type_id in ['draft','statchg']: relevant.update(MailToken.objects.filter(slug__startswith='last_call_').values_list('slug',flat=True)) + if doc.type_id == 'draft': + relevant.update(MailToken.objects.filter(slug__startswith='doc_').values_list('slug',flat=True)) relevant.update(['ipr_posted_on_doc',]) + if doc.stream_id == 'ietf': + relevant.update(['ballot_approved_ietf_stream']) + else: + relevant.update(['pubreq_rfced']) + if doc.type_id == 'conflrev': relevant.update(['conflrev_requested','ballot_approved_conflrev']) if doc.type_id == 'charter': @@ -57,21 +59,6 @@ def gather_relevant_expansions(**kwargs): rule_list.append((mailtoken.slug,mailtoken.desc,addrs.to,addrs.cc)) return sorted(rule_list) -#def gather_relevant_expansions_recipient(**kwargs): -# relevant_tokens = [] -# -# if 'doc' in kwargs: -# relevant_tokens.extend(Recipient.objects.filter(slug__startswith='doc').values_list('slug',flat=True)) -# -# rule_dict = {} -# -# for recipient in Recipient.objects.filter(slug__in=relevant_tokens): -# #for recipient in Recipient.objects.all(): -# addrs = recipient.gather(**kwargs) -# if addrs: -# rule_dict[recipient.slug] = recipient.gather(**kwargs) -# return sorted(rule_dict.iteritems()) - def get_base_ipr_request_address(): return Recipient.objects.get(slug='ipr_requests').gather()[0] diff --git a/ietf/templates/doc/document_email.html b/ietf/templates/doc/document_email.html index 8eae383c3..c8542181e 100644 --- a/ietf/templates/doc/document_email.html +++ b/ietf/templates/doc/document_email.html @@ -10,6 +10,21 @@ {% origin %} {{ top|safe }} + {% if aliases %} +

Email Aliases

+ + + + {% for alias in aliases %} + + + + + {% endfor %} + +
{{ doc.name }}{{ alias.alias_type|default:''}}@{{ietf_domain}}{{ alias.expansion }}
+ {% endif %} +

Recipient Expansions