#! @PYTHON@ # # Copyright (C) 1998-2017 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. """List all mailing lists. Usage: %(program)s [options] Where: -a / --advertised List only those mailing lists that are publically advertised -p / --public-archive List only those lists with public archives. --virtual-host-overview=domain -V domain List only those mailing lists that are homed to the given virtual domain. This only works if the VIRTUAL_HOST_OVERVIEW variable is set. -b / --bare Displays only the list name, with no description. -h / --help Print this text and exit. """ import re 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.i18n import C_ program = sys.argv[0] def usage(code, msg=''): if code: fd = sys.stderr else: fd = sys.stdout print >> fd, C_(__doc__) if msg: print >> fd, msg sys.exit(code) def main(): try: opts, args = getopt.getopt(sys.argv[1:], 'apbV:h', ['advertised', 'public-archive', 'bare', 'virtual-host-overview=', 'help']) except getopt.error, msg: usage(1, msg) advertised = 0 public = 0 vhost = None bare = 0 for opt, arg in opts: if opt in ('-h', '--help'): usage(0) elif opt in ('-a', '--advertised'): advertised = 1 elif opt in ('-p', '--public-archive'): public = 1 elif opt in ('-V', '--virtual-host-overview'): vhost = arg elif opt in ('-b', '--bare'): bare = 1 names = Utils.list_names() names.sort() mlists = [] longest = 0 for n in names: try: mlist = MailList.MailList(n, lock=0) except Errors.MMUnknownListError: # The list could have been deleted by another process. continue if advertised and not mlist.advertised: continue if public and mlist.archive_private: continue if (vhost and mm_cfg.VIRTUAL_HOST_OVERVIEW and not re.search('://%s/' % re.escape(vhost), mlist.web_page_url, re.IGNORECASE)): continue mlists.append(mlist) longest = max(len(mlist.real_name), longest) if not mlists and not bare: print C_('No matching mailing lists found') return if not bare: print len(mlists), C_('matching mailing lists found:') format = '%%%ds - %%.%ds' % (longest, 77 - longest) for mlist in mlists: if bare: print mlist.internal_name() else: description = mlist.description or C_('[no description available]') print ' ', format % (mlist.real_name, description) if __name__ == '__main__': main()