sorry, subject missing. resent.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Hi,

thanks John, I have tested your code, but I face with a problem of python.
I didn't know python, I search but I didn't find, here is what happen:

at line 79  (from email.Utils import commaaddr)
this generate an error:
                # list_members.DeCarlo test
                Traceback (most recent call last):
                  File "list_members.DeCarlo", line 79, in ?
                    from email.Utils import commaaddr
                ImportError: cannot import name commaaddr

I check the documentation of python, but I connot find the function
commaaddr.
You use it 2 times:
        232:            s = commaaddr((name, addr )).encode(enc, 'replace')
        264:            s = commaaddr((name, addr )).encode(enc, 'replace')

What does this command do, and it is possible to substitute it with another
known one ? or is it possible to include it as a python module (there is no
trace of such command on the WEB)

I search in the whole distrib. of Mailman 2.0.11 (old version I used) and
Mailman 2.1.2 (the current one), I didn't find any function commaaddr, what
is your mailman version ?

Note: I use python 2.2.1 under Solaris

regards,

Nicolas C.


-----Message d'origine-----
De : John DeCarlo [mailto:[EMAIL PROTECTED]
Envoyé : lundi 21 juillet 2003 19:22
À : Mailman-Users
Cc : CLOCHARD Nicolas
Objet : Re: [Mailman-Users] How to show name in the subscriber list
mailman 2.1.2 ?

Nicolas,

My Python programming skills are crude and self taught.  However, I
modified list_members to include more information by default, as well as

adding a "-a" option to list the full name of the user.

I have attached it here.  I keep it a separate name so that it doesn't
get overwritten when I upgrade.

Maybe someone with more time and skill than I can use some of this to
upgrade Mailman.

Feel free to use it as you wish.

CLOCHARD Nicolas wrote:

> Hi,
>
> I search to kown if the display of user name in the subscriber list is
> possible under mailman 2.1.2
> I parse all the option but I di not find it, nothing is on the FAQ and
> nothing on the post of the mailing list.
>
> If this is not possible, may be it can be a feature request for the
futur
> version of mailman.

--

John DeCarlo, My Views Are My Own
#! /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.
#
# added --all or -a to get digest/nodigest and nomail(why) status as well as full name
#  John DeCarlo 2003-04-01
#

"""List all the members of a mailing list.

Usage: %(PROGRAM)s [options] listname

Where:

    --output file
    -o file
        Write output to specified file instead of standard out.

    --regular / -r
        Print just the regular (non-digest) members.

    --digest[=kind] / -d [kind]
        Print just the digest members.  Optional argument can be "mime" or
        "plain" which prints just the digest members receiving that kind of
        digest.

    --nomail[=why] / -n [why]
        Print the members that have delivery disabled.  Optional argument can
        be "byadmin", "byuser", "bybounce", or "unknown" which prints just the
        users who have delivery disabled for that reason.  It can also be
        "enabled" which prints just those member for whom delivery is
        enabled.

    --fullnames / -f
        Include the full names in the output.

    --all / -a
        Include full names, email, digest/regular (mime/plain), nomail (why)

    --preserve
    -p
        Output member addresses case preserved the way they were added to the
        list.  Otherwise, addresses are printed in all lowercase.

    --help
    -h
        Print this help message and exit.

    listname is the name of the mailing list to use.

Note that if neither -r or -d is supplied, both regular members are printed
first, followed by digest members, but no indication is given as to address
status.
"""

import sys

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

from email.Utils import commaaddr

PROGRAM = sys.argv[0]
WHYCHOICES = {'enabled' : MemberAdaptor.ENABLED,
              'unknown' : MemberAdaptor.UNKNOWN,
              'byuser'  : MemberAdaptor.BYUSER,
              'byadmin' : MemberAdaptor.BYADMIN,
              'bybounce': MemberAdaptor.BYBOUNCE,
              }


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 whymatches(mlist, addr, why):
    # Return true if the `why' matches the reason the address is enabled, or
    # in the case of why is None, that they are disabled for any reason
    # (i.e. not enabled).
    status = mlist.getDeliveryStatus(addr)
    if why is None:
        return status <> MemberAdaptor.ENABLED
    return status == WHYCHOICES[why]



def main():
    # Because of the optional arguments, we can't use getopt. :(
    outfile = None
    regular = None
    digest = None
    preserve = None
    nomail = None
    why = None
    kind = None
    fullnames = 0
    all = 0

    # Throw away the first (program) argument
    args = sys.argv[1:]
    if not args:
        usage(0)

    while 1:
        try:
            opt = args.pop(0)
        except IndexError:
            usage(1)
        if opt in ('-h', '--help'):
            usage(0)
        elif opt in ('-f', '--fullnames'):
            fullnames = 1
        elif opt in ('-a', '--all'):
            all = 1
            fullnames = 1
        elif opt in ('-p', '--preserve'):
            preserve = 1
        elif opt in ('-r', '--regular'):
            regular = 1
        elif opt in ('-o', '--output'):
            try:
                outfile = args.pop(0)
            except IndexError:
                usage(1)
        elif opt == '-n':
            nomail = 1
            if args and args[0] in WHYCHOICES.keys():
                why = args.pop(0)
        elif opt.startswith('--nomail'):
            nomail = 1
            i = opt.find('=')
            if i >= 0:
                why = opt[i+1:]
                if why not in WHYCHOICES.keys():
                    usage(1, _('Bad --nomail option: %(why)s'))
        elif opt == '-d':
            digest = 1
            if args and args[0] in ('mime', 'plain'):
                kind = args.pop(0)
        elif opt.startswith('--digest'):
            digest = 1
            i = opt.find('=')
            if i >= 0:
                kind = opt[i+1:]
                if kind not in ('mime', 'plain'):
                    usage(1, _('Bad --digest option: %(kind)s'))
        else:
            # No more options left, push the last one back on the list
            args.insert(0, opt)
            break

    if len(args) <> 1:
        usage(1)

    listname = args[0].lower().strip()

    if regular is None and digest is None:
        regular = digest = 1

    if outfile:
        try:
            fp = open(outfile, 'w')
        except IOError:
            print >> sys.stderr, _('Could not open file for writing:'), outfile
            sys.exit(1)
    else:
        fp = sys.stdout

    try:
        mlist = MailList.MailList(listname, lock=0)
    except Errors.MMListError, e:
        print >> sys.stderr, _('No such list: %(listname)s')
        sys.exit(1)

    # Get the lowercased member addresses
    rmembers = mlist.getRegularMemberKeys()
    dmembers = mlist.getDigestMemberKeys()

    if preserve:
        # Convert to the case preserved addresses
        rmembers = mlist.getMemberCPAddresses(rmembers)
        dmembers = mlist.getMemberCPAddresses(dmembers)

    if regular:
        rmembers.sort()
        for addr in rmembers:
            name = fullnames and mlist.getMemberName(addr)
            # Filter out nomails
            statuscode = mlist.getDeliveryStatus(addr)
            if statuscode == 0:
                status = 'normal delivery'
            elif statuscode == 1:
                status = 'nomail (unknown)'
            elif statuscode == 2:
                status = 'nomail (user choice)'
            elif statuscode == 3:
                status = 'nomail (user choice)'
            elif statuscode == 4:
                status = 'nomail (bounce errors)'
            else:
                status = 'who knows'
            whycode = whymatches(mlist, addr, why)
            if nomail and not whycode:
                continue
            enc = sys.getdefaultencoding()
            s = commaaddr((name, addr )).encode(enc, 'replace')
            print >> fp, s, ', regular, ', status
    if digest:
        dmembers.sort()
        for addr in dmembers:
            name = fullnames and mlist.getMemberName(addr)
            # Filter out nomails
            statuscode = mlist.getDeliveryStatus(addr)
            if statuscode == 0:
                status = 'normal delivery'
            elif statuscode == 1:
                status = 'nomail (unknown)'
            elif statuscode == 2:
                status = 'nomail (user choice)'
            elif statuscode == 3:
                status = 'nomail (user choice)'
            elif statuscode == 4:
                status = 'nomail (bounce errors)'
            else:
                status = 'who knows'
            whycode = whymatches(mlist, addr, why)
            if nomail and not whycode:
                continue
            # Filter out digest kinds
            digestcode = mlist.getMemberOption(addr, mm_cfg.DisableMime)
            if digestcode:
                # They're getting plain text digests
                digesttype = 'plain text'
            else:
                # They're getting MIME digests
                digesttype = 'MIME'
            enc = sys.getdefaultencoding()
            s = commaaddr((name, addr )).encode(enc, 'replace')
            print >> fp, s, ', digest (', digesttype, '), ', status



if __name__ == '__main__':
    main()

------------------------------------------------------
Mailman-Users mailing list
[EMAIL PROTECTED]
http://mail.python.org/mailman/listinfo/mailman-users
Mailman FAQ: http://www.python.org/cgi-bin/faqw-mm.py
Searchable Archives: http://www.mail-archive.com/mailman-users%40python.org/

This message was sent to: [EMAIL PROTECTED]
Unsubscribe or change your options at
http://mail.python.org/mailman/options/mailman-users/archive%40jab.org

Reply via email to