#!/usr/local/bin/python

__version__   = "$Revision: 1.1 $"
__date__      = "$Date: 2004/02/11 04:09:34 $"
__copyright__ = "Copyright 2003,2004 Mike Taylor"
__license__   = "Python"

"""
ListInfo: list members of all public mailman lists
 
Note: must be run as a user with rights to the run mailman programs

"""

import sys, os, tempfile, time

def GatherMembers(MailmanPath, ListName):

    """run MailMan's list_members utility for a given list
       and return a list of member names"""

    members = []

    memberdata = os.popen(MailmanPath + 'list_members ' + ListName, 'r')
 
    while 1:
      member = memberdata.readline()[:-1]

      if not member:
        break
      else:
        members.append(member)
      
    memberdata.close()

    return members

def GatherLists(MailmanPath, PublicOnly = True):

    """run MailMan's list_lists to build a dictionary of lists and
       their members.  PublicOnly control if advertised lists are
       processed"""

    lists = {}

    cmd = MailmanPath + 'list_lists -b'

    if PublicOnly:
      cmd = cmd + ' -a'

    listdata = os.popen(cmd, 'r')
 
    while 1:
      list = listdata.readline()[:-1]

      if not list:
        break
      else:
        lists[list] = GatherMembers(MailmanPath, list)
      
    listdata.close()

    return lists

  # gather list data

MailmanLists = GatherLists('/var/lib/mailman/bin/')

  # wiki wiki work it
  # |10 Feb 2004||  23|  10239|  253|  12509869|(etc)|

s = '|' + time.strftime('%d %b %Y', time.localtime(time.time())) + '||'

for List in MailmanLists:
  s = s + '%d|' % (len(List))

print s
