diff --git a/ietf/mailinglists/management/commands/import_mailman_listinfo.py b/ietf/mailinglists/management/commands/import_mailman_listinfo.py index 5aaec981a..25b02faec 100644 --- a/ietf/mailinglists/management/commands/import_mailman_listinfo.py +++ b/ietf/mailinglists/management/commands/import_mailman_listinfo.py @@ -37,9 +37,13 @@ def import_mailman_listinfo(verbosity=0): for name in names: mlist = MailList.MailList(name, lock=False) note("List: %s" % mlist.internal_name()) + sys.exit() if mlist.advertised: description = mlist.description.decode('latin1')[:256] - mmlist, created = List.objects.get_or_create(name=mlist.real_name, description=description, advertised=mlist.advertised) + mmlist, created = List.objects.get_or_create(name=mlist.real_name) + mmlist.description = description + mmlist.advertised = mlist.advertised + mmlist.save() # The following calls return lowercased addresses members = mlist.getRegularMemberKeys() + mlist.getDigestMemberKeys() members = [ m for m in members if mlist.getDeliveryStatus(m) == MemberAdaptor.ENABLED ] diff --git a/ietf/mailinglists/models.py b/ietf/mailinglists/models.py index 3c0b8e758..c12afded0 100644 --- a/ietf/mailinglists/models.py +++ b/ietf/mailinglists/models.py @@ -1,7 +1,9 @@ # Copyright The IETF Trust 2016, All Rights Reserved -from django.db import models + +from django.conf import settings from django.core.validators import validate_email +from django.db import models from ietf.person.models import Person @@ -11,6 +13,8 @@ class List(models.Model): advertised = models.BooleanField(default=True) def __unicode__(self): return "" % self.name + def info_url(self): + return settings.MAILING_LIST_INFO_URL % {'list_addr': self.name } class Subscribed(models.Model): time = models.DateTimeField(auto_now_add=True) diff --git a/ietf/mailinglists/tests.py b/ietf/mailinglists/tests.py index 0796c106f..4bb2d3978 100644 --- a/ietf/mailinglists/tests.py +++ b/ietf/mailinglists/tests.py @@ -1,9 +1,14 @@ # Copyright The IETF Trust 2016, All Rights Reserved - -from django.urls import reverse as urlreverse +# -*- coding: utf-8 -*- +from __future__ import unicode_literals, print_function from pyquery import PyQuery +from django.urls import reverse as urlreverse + +import debug # pyflakes:ignore + +from ietf.mailinglists.factories import ListFactory from ietf.utils.test_utils import TestCase from ietf.utils.test_data import make_test_data @@ -30,3 +35,15 @@ class MailingListTests(TestCase): self.assertEqual(len(q("#content a:contains(\"%s\")" % group.acronym)), 1) + def test_nonwg(self): + lists = ListFactory.create_batch(7) + url = urlreverse("ietf.mailinglists.views.nonwg") + + r = self.client.get(url) + for l in lists: + if l.advertised: + self.assertContains(r, l.name) + self.assertContains(r, l.description) + else: + self.assertNotContains(r, l.name, html=True) + self.assertNotContains(r, l.description, html=True) diff --git a/ietf/mailinglists/urls.py b/ietf/mailinglists/urls.py index d7b635b1f..5eaa77bb5 100644 --- a/ietf/mailinglists/urls.py +++ b/ietf/mailinglists/urls.py @@ -6,8 +6,8 @@ from ietf.mailinglists import views from ietf.utils.urls import url urlpatterns = [ - url(r'^wg/$', views.groups), - url(r'^nonwg/$', RedirectView.as_view(url='https://www.ietf.org/list/nonwg.html', permanent=True)), - url(r'^nonwg/update/$', RedirectView.as_view(url='https://www.ietf.org/list/nonwg.html', permanent=True)), - url(r'^request/$', RedirectView.as_view(url='https://www.ietf.org/list/request.html', permanent=True)), + url(r'^wg/?$', views.groups), + url(r'^nonwg/?$', views.nonwg), + url(r'^nonwg/update/?$', RedirectView.as_view(url='https://www.ietf.org/list/nonwg.html', permanent=True)), + url(r'^request/?$', RedirectView.as_view(url='https://www.ietf.org/list/request.html', permanent=True)), ] diff --git a/ietf/mailinglists/views.py b/ietf/mailinglists/views.py index 5702bc6da..0399565c6 100644 --- a/ietf/mailinglists/views.py +++ b/ietf/mailinglists/views.py @@ -1,10 +1,33 @@ # Copyright The IETF Trust 2007, All Rights Reserved -from ietf.group.models import Group +import re + from django.shortcuts import render +import debug # pyflakes:ignore + +from ietf.group.models import Group +from ietf.mailinglists.models import List + def groups(request): groups = Group.objects.filter(type__in=("wg", "rg", "ag"), list_archive__startswith='http').order_by("acronym") return render(request, "mailinglists/group_archives.html", { "groups": groups } ) +def nonwg(request): + groups = Group.objects.filter(type__in=("wg", "rg")).order_by("acronym") + + #urls = [ g.list_archive for g in groups if '.ietf.org' in g.list_archive ] + + wg_lists = set() + for g in groups: + wg_lists.add(g.acronym) + match = re.search(r'^(https?://mailarchive.ietf.org/arch/(browse/|search/\?email-list=))(?P[^/]*)/?$', g.list_archive) + if match: + wg_lists.add(match.group('name').lower()) + + lists = List.objects.filter(advertised=True) + #debug.show('lists.count()') + lists = lists.exclude(name__in=wg_lists).order_by('name') + #debug.show('lists.count()') + return render(request, "mailinglists/nonwg.html", { "lists": lists } ) diff --git a/ietf/templates/mailinglists/nonwg.html b/ietf/templates/mailinglists/nonwg.html new file mode 100644 index 000000000..d8c004c1e --- /dev/null +++ b/ietf/templates/mailinglists/nonwg.html @@ -0,0 +1,27 @@ +{% extends "base.html" %} +{# Copyright The IETF Trust 2015, All Rights Reserved #} +{% load origin %} + +{% block title %}Non-Working Group email lists{% endblock %} + +{% block content %} + {% origin %} +

Non-Working Group email lists

+ + + + + + + + + {% for list in lists %} + + + + + + {% endfor %} + +
NameDescriptionList Info
{{ list.name.lower }}{{ list.description }}{{ list.info_url.lower }}
+{% endblock %}