Fill in the list archive tab, showing both mailarchive and mhonarc links when they exists. Preserve the immediate link-to-archive behavior for the group pages for lists that are not in mailarchive/mhonarc. Provides a url at the datatracker for the mailman listinfo pages to use that will show both types of archive. Commit ready for merge.

- Legacy-Id: 10840
This commit is contained in:
Robert Sparks 2016-02-15 20:01:51 +00:00
parent 8b87125716
commit 4ed83dd7fc
3 changed files with 53 additions and 1 deletions

View file

@ -345,7 +345,10 @@ def construct_group_menu_context(request, group, selected, group_type, others):
del kwargs["output_type"]
if group.list_archive.startswith("http:") or group.list_archive.startswith("https:") or group.list_archive.startswith("ftp:"):
entries.append((mark_safe("List archive »"), group.list_archive))
if 'mailarchive.ietf.org' in group.list_archive:
entries.append(("List archive", urlreverse("ietf.group.info.derived_archives", kwargs=kwargs)))
else:
entries.append((mark_safe("List archive »"), group.list_archive))
if group.has_tools_page():
entries.append((mark_safe("Tools page »"), "https://tools.ietf.org/%s/%s/" % (group.type_id, group.acronym)))
@ -777,3 +780,23 @@ def meetings(request, acronym=None, group_type=None):
'past':past,
'can_edit':can_edit,
}))
def derived_archives(request, acronym=None, group_type=None):
group = get_group_or_404(acronym,group_type) if acronym else None
list_acronym = None
m = re.search('mailarchive.ietf.org/arch/search/?\?email_list=([-\w]+)\Z',group.list_archive)
if m:
list_acronym=m.group(1)
if not list_acronym:
m = re.search('mailarchive.ietf.org/arch/browse/([-\w]+)/?\Z',group.list_archive)
if m:
list_acronym=m.group(1)
return render(request, 'group/derived_archives.html',
construct_group_menu_context(request, group, "list archive", group_type, {
'group':group,
'list_acronym':list_acronym,
}))

View file

@ -1,6 +1,8 @@
import os
from unittest import skipIf
from pyquery import PyQuery
from django.conf import settings
from django.core.urlresolvers import reverse as urlreverse
from django.db.models import Q
@ -10,6 +12,7 @@ import debug # pyflakes:ignore
from ietf.group.models import Role, Group
from ietf.group.utils import get_group_role_emails, get_child_group_role_emails, get_group_ad_emails
from ietf.group.factories import GroupFactory
from ietf.utils.test_data import make_test_data
from ietf.utils.test_utils import login_testing_unauthorized, TestCase, unicontent
@ -131,3 +134,28 @@ class GroupRoleEmailTests(TestCase):
self.assertGreater(len(emails), 0)
for item in emails:
self.assertIn('@', item)
class GroupDerivedArchiveTests(TestCase):
def test_group_with_mailarch(self):
group = GroupFactory()
group.list_archive = 'https://mailarchive.ietf.org/arch/browse/%s/'%group.acronym
group.save()
url = urlreverse("ietf.group.info.derived_archives",kwargs=dict(acronym=group.acronym))
r = self.client.get(url)
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
self.assertEqual(url, q('.nav-tabs .active a')[0].attrib['href'])
self.assertTrue(group.list_archive in unicontent(r))
self.assertTrue('web/%s/current'%group.acronym in unicontent(r))
def test_group_without_mailarch(self):
group = GroupFactory()
group.list_archive = 'https://alienarchive.example.com'
group.save()
url = urlreverse("ietf.group.info.derived_archives",kwargs=dict(acronym=group.acronym))
r = self.client.get(url)
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
self.assertFalse(q('.nav-tabs .active'))
self.assertTrue(group.list_archive in unicontent(r))

View file

@ -21,5 +21,6 @@ urlpatterns = patterns('',
(r'^materials/$', 'ietf.group.info.materials', None, "group_materials"),
(r'^materials/new/$', 'ietf.doc.views_material.choose_material_type'),
(r'^materials/new/(?P<doc_type>[\w-]+)/$', 'ietf.doc.views_material.edit_material', { 'action': "new" }, "group_new_material"),
(r'^archives/$', 'ietf.group.info.derived_archives'),
url(r'^email-aliases/$', RedirectView.as_view(pattern_name='ietf.group.info.email',permanent=False),name='old_group_email_aliases'),
)