get_list_info   [plain text]


#! /usr/bin/python
#
# Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

"""Create plist for all mailing lists.

Usage: %(program)s -o outputfile

    Create a property list file with list and member data

    --outputfile filename
    -o filename
        Destinatin file for property list.

    -h / --help
        Print this text and exit.

"""

import sys
import getopt
import paths

from Mailman import mm_cfg
from Mailman import MailList
from Mailman import Utils
from Mailman import Errors
from Mailman import MemberAdaptor
from Mailman.i18n import _

program = sys.argv[0]

def usage(code, msg=''):
    if code:
        fd = sys.stderr
    else:
        fd = sys.stdout
    print >> fd, _(__doc__)
    if msg:
        print >> fd, msg
    sys.exit(code)



def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], 'o:h', ['outputfile=', 'help'])
    except getopt.error, msg:
        usage(1, msg)

    # defaults
    outfile = None
    for opt, arg in opts:
        if opt in ('-h', '--help'):
            usage(0)
        elif opt in ('-o', '--outputfile'):
            outfile = arg

    if outfile is None:
        usage(1, _('Error: Output file required\n'))

    f = open(outfile, "w")   # Open file for writing

    names = Utils.list_names()
    names.sort()

    print >>f,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
    print >>f,"<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">"
    print >>f,"<plist version=\"1.0\">"
    print >>f,"<dict>"
    print >>f,"	<key>lists</key>"
    print >>f,"	<array>"

    mlists = []
    rmembers = []
    dmembers = []
    for n in names:
        mlist = MailList.MailList(n, lock=0)
        print >>f,"		<dict>"
        print >>f,"			<key>_id_</key>"
        print >>f,"			<string>%s</string>" % (mlist.real_name.lower())
        print >>f,"			<key>list_name</key>"
        print >>f,"			<string>%s</string>" % (mlist.real_name)
        alist = mlist
        rmembers = alist.getRegularMemberKeys()
        dmembers = alist.getDigestMemberKeys()
        print >>f,"			<key>members</key>"
        print >>f,"			<array>"
        listowner = None
        for member in rmembers:
            print >>f,"				<dict>"
            print >>f,"					<key>_id_</key>"
            print >>f,"					<string>%s</string>" % (member)
            print >>f,"					<key>owner</key>"
            if member not in (alist.owner):
                print >>f,"					<false/>"
            else:
                print >>f,"					<true/>"
                if listowner is None:
                    listowner = member
            print >>f,"					<key>group</key>"
            print >>f,"					<false/>"
            print >>f,"					<key>post</key>"
            if alist.getMemberOption(member, mm_cfg.Moderate):
                print >>f,"					<false/>"
            else:
                print >>f,"					<true/>"
            print >>f,"					<key>subscribe</key>"
            status = alist.getDeliveryStatus(member)
            if status <> MemberAdaptor.ENABLED:
                print >>f,"					<false/>"
            else:
                print >>f,"					<true/>"
            print >>f,"				</dict>"
        for member in dmembers:
            print >>f,"				<dict>"
            print >>f,"					<key>_id_</key>"
            print >>f,"					<string>%s</string>" % (member)
            print >>f,"					<key>owner</key>"
            if member not in (alist.owner):
                print >>f,"					<false/>"
            else:
                print >>f,"					<true/>"
                if listowner is None:
                    listowner = member
            print >>f,"					<key>post</key>"
            if member not in (alist.reject_these_nonmembers):
                print >>f,"					<true/>"
            else:
                print >>f,"					<false/>"
            print >>f,"					<key>subscribe</key>"
            status = alist.getDeliveryStatus(member)
            if status <> MemberAdaptor.ENABLED:
                print >>f,"					<false/>"
            else:
                print >>f,"					<true/>"
            print >>f,"				</dict>"
        print >>f,"			</array>"
        print >>f,"			<key>subscribe_policy</key>"
        if alist.subscribe_policy == 1:
            print >>f,"			<string>confirm</string>"
        elif alist.subscribe_policy == 2:
            print >>f,"			<string>approve</string>"
        else:
            print >>f,"			<string>confirm+approve</string>"
        if listowner is not None:
            print >>f,"			<key>list_admin</key>"
            print >>f,"				<string>%s</string>" % (listowner)
        print >>f,"			<key>preferred_language</key>"
        print >>f,"				<string>%s</string>" % (alist.preferred_language)
        print >>f,"			<key>available_languages</key>"
        print >>f,"				<string>%s</string>" % (alist.available_languages)
        print >>f,"			<key>max_message_size</key>"
        print >>f,"				<integer>%d</integer>" % (alist.max_message_size)
        print >>f,"		</dict>"
        mlists.append(mlist)

    print >>f,"	</array>"
    print >>f,"</dict>"
    print >>f,"</plist>"
    f.close()

    print len(mlists), _('mailing lists found.')



if __name__ == '__main__':
    main()