* On 2004.07.15, in <[EMAIL PROTECTED]>,
*       "Fil" <[EMAIL PROTECTED]> wrote:
> 
> As a list admin, I dream of a roster interface that would help me go fast
> when I have 10 people to subscribe and 10 to remove because they don't know
> better than "Reply"-ing to me.
> 
> I can make it up with php, with a box for search, another for "add users",
> another for "remove users", and so on ("change address").
> 
> However there's something that could be very useful, that would be "search
> fuzzy matches", for instance if <[EMAIL PROTECTED]> writes to me saying
> that he needs to be unsubscribed, I can't easily locate his subscription if
> it's under <[EMAIL PROTECTED]>. Any idea on how to do this?

This isn't very webby, but we use it a lot. (With 2500 lists, it really
helps deal with those "please remove me from your list" messages.) It's
probably terrible python, but it does the job.

usage: /opt/bin/grep_members.py [!] regex [list [...]]
       /opt/bin/grep_members.py [!] = address [list [...]]

In your example, I might do:
% grep_members.py bean listname

Or, to find all lists that mr.bean is on:
% grep_members.py bean

The second form is to find a precise match among the specified lists, or
among all lists. It also DTRT if called as grep_owners.py instead.

-- 
 -D.    [EMAIL PROTECTED]                                  NSIT::ENSS
#!/opt/bin/python
##
## $Id: grep_members.py,v 1.6 2003/07/11 01:10:38 dgc Exp $
##
## grep_members.py greps owners instead of members if argv[0]
## contains "owner".
##

import sys
import getopt
import string
import mailman
import re
from Mailman.MailList import MailList
from Mailman.Utils import list_names

self = sys.argv[0]
members = {}

r = None
s = None
i = 1
check_owners = 0                # otherwise, members
show_all = 0
invert = 0
errors = 0

if len(sys.argv) == 1 or sys.argv[1] == "-h" or sys.argv[1] == "--help":
        print "usage: %s [!] regex [list [...]]" % (sys.argv[0])
        print "       %s [!] = address [list [...]]" % (sys.argv[0])
        sys.exit(4)

if (re.search("owner", sys.argv[0])):
        check_owners = 1

if sys.argv[i] == "!" or sys.argv[1] == '-':
        invert = 1
        i = i + 1

if sys.argv[i] == "=":
        s = sys.argv[i+1]
        i = i + 2
elif sys.argv[i] == ".":
        show_all = 1
        i = i + 1
else:
        r = re.compile(sys.argv[i], re.IGNORECASE)
        i = i + 1

if len(sys.argv) > i:
        names = sys.argv[i:]
else:
        names = list_names()

names.sort()

if (invert and show_all):
        sys.exit(0)             # ! . is no matches all the time

for lname in names:
        try:
                m = MailList(lname, lock=0)
        except:
                print "%s: no list named %s" % (sys.argv[0], lname)
                errors = 1
                continue
        if (check_owners):
                namelist = m.owner
        else:
                namelist = m.members.keys() + m.digest_members.keys()
        namelist.sort()
        for name in namelist:
                if (show_all):
                        print lname + ": " + name
                elif (r == None):
                        # use string matching
                        if (invert ^ (name == s)):
                                print lname + ": " + name
                else:
                        # use regex matching
                        if (r.search(name)):
                                didmatch = 1
                        else:
                                didmatch = 0
                        if (invert ^ didmatch):
                                print lname + ": " + name

if errors:
        sys.exit(10)

sys.exit(0)
_______________________________________________
Mailman-Developers mailing list
[EMAIL PROTECTED]
http://mail.python.org/mailman/listinfo/mailman-developers
Unsubscribe: 
http://mail.python.org/mailman/options/mailman-developers/archive%40jab.org

Reply via email to