Skip to content

Commit 744a39e

Browse files
committed
Added a migration to do the first mailman subscriber import, using a function from the refactored management command.
- Legacy-Id: 11393
1 parent dc385ea commit 744a39e

2 files changed

Lines changed: 54 additions & 23 deletions

File tree

ietf/mailinglists/management/commands/import_mailman_listinfo.py

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,34 @@
88
from django.conf import settings
99
from django.core.management.base import BaseCommand
1010

11+
sys.path.append(settings.MAILMAN_LIB_DIR)
12+
13+
from Mailman import Utils
14+
from Mailman import MailList
15+
1116
from ietf.mailinglists.models import List, Subscribed
1217

18+
def import_mailman_listinfo(verbosity=0):
19+
def note(msg):
20+
if verbosity > 1:
21+
sys.stdout.write(msg)
22+
sys.stdout.write('\n')
23+
24+
for name in Utils.list_names():
25+
mlist = MailList.MailList(name, lock=False)
26+
note("List: %s" % mlist.internal_name())
27+
if mlist.advertised:
28+
list, created = List.objects.get_or_create(name=mlist.real_name, description=mlist.description, advertised=mlist.advertised)
29+
# The following calls return lowercased addresses
30+
members = mlist.getRegularMemberKeys() + mlist.getDigestMemberKeys()
31+
known = [ s.email for s in Subscribed.objects.filter(lists__name=name) ]
32+
for addr in members:
33+
if not addr in known:
34+
note(" Adding subscribed: %s" % (addr))
35+
new, created = Subscribed.objects.get_or_create(email=addr)
36+
new.lists.add(list)
37+
38+
1339
class Command(BaseCommand):
1440
"""
1541
Import list information from Mailman.
@@ -26,9 +52,6 @@ class Command(BaseCommand):
2652

2753
#option_list = BaseCommand.option_list + ( )
2854

29-
def note(self, msg):
30-
if self.verbosity > 1:
31-
self.stdout.write(msg)
3255

3356
def handle(self, *filenames, **options):
3457
"""
@@ -39,23 +62,6 @@ def handle(self, *filenames, **options):
3962
4063
"""
4164

42-
self.verbosity = int(options.get('verbosity'))
43-
44-
sys.path.append(settings.MAILMAN_LIB_DIR)
45-
46-
from Mailman import Utils
47-
from Mailman import MailList
48-
49-
for name in Utils.list_names():
50-
mlist = MailList.MailList(name, lock=False)
51-
self.note("List: %s" % mlist.internal_name())
52-
if mlist.advertised:
53-
list, created = List.objects.get_or_create(name=mlist.real_name, description=mlist.description, advertised=mlist.advertised)
54-
# The following calls return lowercased addresses
55-
members = mlist.getRegularMemberKeys() + mlist.getDigestMemberKeys()
56-
known = [ s.email for s in Subscribed.objects.filter(lists__name=name) ]
57-
for addr in members:
58-
if not addr in known:
59-
self.note(" Adding subscribed: %s" % (addr))
60-
new, created = Subscribed.objects.get_or_create(email=addr)
61-
new.lists.add(list)
65+
verbosity = int(options.get('verbosity'))
66+
67+
import_mailman_listinfo(verbosity)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from django.db import migrations
5+
6+
from ietf.mailinglists.models import List, Subscribed
7+
from ietf.mailinglists.management.commands.import_mailman_listinfo import import_mailman_listinfo
8+
9+
def forward_mailman_import(apps, schema_editor):
10+
import_mailman_listinfo(verbosity=0)
11+
12+
def reverse_mailman_import(apps, schema_editor):
13+
List.objects.all().delete()
14+
Subscribed.objects.all().delete()
15+
16+
class Migration(migrations.Migration):
17+
18+
dependencies = [
19+
('mailinglists', '0002_list_subscribed_whitelisted'),
20+
]
21+
22+
operations = [
23+
migrations.RunPython(forward_mailman_import,reverse_mailman_import),
24+
25+
]

0 commit comments

Comments
 (0)