88from django .conf import settings
99from 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+
1116from 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+
1339class 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 )
0 commit comments