Added a migration to do the first mailman subscriber import, using a function from the refactored management command.

- Legacy-Id: 11393
This commit is contained in:
Henrik Levkowetz 2016-06-16 19:33:07 +00:00
parent dc385ea014
commit 744a39e2ca
2 changed files with 53 additions and 22 deletions

View file

@ -8,8 +8,34 @@ import debug # pyflakes:ignore
from django.conf import settings from django.conf import settings
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
sys.path.append(settings.MAILMAN_LIB_DIR)
from Mailman import Utils
from Mailman import MailList
from ietf.mailinglists.models import List, Subscribed from ietf.mailinglists.models import List, Subscribed
def import_mailman_listinfo(verbosity=0):
def note(msg):
if verbosity > 1:
sys.stdout.write(msg)
sys.stdout.write('\n')
for name in Utils.list_names():
mlist = MailList.MailList(name, lock=False)
note("List: %s" % mlist.internal_name())
if mlist.advertised:
list, created = List.objects.get_or_create(name=mlist.real_name, description=mlist.description, advertised=mlist.advertised)
# The following calls return lowercased addresses
members = mlist.getRegularMemberKeys() + mlist.getDigestMemberKeys()
known = [ s.email for s in Subscribed.objects.filter(lists__name=name) ]
for addr in members:
if not addr in known:
note(" Adding subscribed: %s" % (addr))
new, created = Subscribed.objects.get_or_create(email=addr)
new.lists.add(list)
class Command(BaseCommand): class Command(BaseCommand):
""" """
Import list information from Mailman. Import list information from Mailman.
@ -26,9 +52,6 @@ class Command(BaseCommand):
#option_list = BaseCommand.option_list + ( ) #option_list = BaseCommand.option_list + ( )
def note(self, msg):
if self.verbosity > 1:
self.stdout.write(msg)
def handle(self, *filenames, **options): def handle(self, *filenames, **options):
""" """
@ -39,23 +62,6 @@ class Command(BaseCommand):
""" """
self.verbosity = int(options.get('verbosity')) verbosity = int(options.get('verbosity'))
sys.path.append(settings.MAILMAN_LIB_DIR) import_mailman_listinfo(verbosity)
from Mailman import Utils
from Mailman import MailList
for name in Utils.list_names():
mlist = MailList.MailList(name, lock=False)
self.note("List: %s" % mlist.internal_name())
if mlist.advertised:
list, created = List.objects.get_or_create(name=mlist.real_name, description=mlist.description, advertised=mlist.advertised)
# The following calls return lowercased addresses
members = mlist.getRegularMemberKeys() + mlist.getDigestMemberKeys()
known = [ s.email for s in Subscribed.objects.filter(lists__name=name) ]
for addr in members:
if not addr in known:
self.note(" Adding subscribed: %s" % (addr))
new, created = Subscribed.objects.get_or_create(email=addr)
new.lists.add(list)

View file

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
from ietf.mailinglists.models import List, Subscribed
from ietf.mailinglists.management.commands.import_mailman_listinfo import import_mailman_listinfo
def forward_mailman_import(apps, schema_editor):
import_mailman_listinfo(verbosity=0)
def reverse_mailman_import(apps, schema_editor):
List.objects.all().delete()
Subscribed.objects.all().delete()
class Migration(migrations.Migration):
dependencies = [
('mailinglists', '0002_list_subscribed_whitelisted'),
]
operations = [
migrations.RunPython(forward_mailman_import,reverse_mailman_import),
]