Added a page that lists all the advertised non-wg mailing lists, based

on data fetched from mailman by a cronjob running the
import_mailman_listinfo managemnt command.  Fixes issue #2438.
 - Legacy-Id: 14587
This commit is contained in:
Henrik Levkowetz 2018-01-30 15:49:08 +00:00
parent 2687c8d839
commit 0c1105f4bb
6 changed files with 84 additions and 9 deletions

View file

@ -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 ]

View file

@ -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 "<List: %s>" % 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)

View file

@ -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)

View file

@ -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)),
]

View file

@ -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<name>[^/]*)/?$', 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 } )

View file

@ -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 %}
<h1>Non-Working Group email lists</h1>
<table class="table table-condensed table-striped">
<thead>
<tr>
<th>Name</th><th>Description</th><th>List Info</th>
</tr>
</thead>
<tbody>
{% for list in lists %}
<tr>
<td>{{ list.name.lower }}</td>
<td>{{ list.description }}</td>
<td><a href="{{ list.info_url }}">{{ list.info_url.lower }}</a></td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}