From 744a39e2ca7792f80923d85fda299f84ff261aa0 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Thu, 16 Jun 2016 19:33:07 +0000 Subject: [PATCH] Added a migration to do the first mailman subscriber import, using a function from the refactored management command. - Legacy-Id: 11393 --- .../commands/import_mailman_listinfo.py | 50 +++++++++++-------- .../migrations/0003_import_subscribers.py | 25 ++++++++++ 2 files changed, 53 insertions(+), 22 deletions(-) create mode 100644 ietf/mailinglists/migrations/0003_import_subscribers.py diff --git a/ietf/mailinglists/management/commands/import_mailman_listinfo.py b/ietf/mailinglists/management/commands/import_mailman_listinfo.py index 4f9d15770..fe218d578 100644 --- a/ietf/mailinglists/management/commands/import_mailman_listinfo.py +++ b/ietf/mailinglists/management/commands/import_mailman_listinfo.py @@ -8,8 +8,34 @@ import debug # pyflakes:ignore from django.conf import settings 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 +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): """ Import list information from Mailman. @@ -26,9 +52,6 @@ class Command(BaseCommand): #option_list = BaseCommand.option_list + ( ) - def note(self, msg): - if self.verbosity > 1: - self.stdout.write(msg) 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) - - 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) + import_mailman_listinfo(verbosity) diff --git a/ietf/mailinglists/migrations/0003_import_subscribers.py b/ietf/mailinglists/migrations/0003_import_subscribers.py new file mode 100644 index 000000000..3106aade9 --- /dev/null +++ b/ietf/mailinglists/migrations/0003_import_subscribers.py @@ -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), + + ]