By default, Python will only access modules in the Python libraries and the directory that contains the current module. Modules in the bin/ directory for example get around this by importing 'paths' which is the bin/paths.py file which sets some additional directories in the search paths.
The easiest way to make this work for testing purposes is just to store your test file in the $prefix directory, i.e. the directory that contains the Mailman/, bin/, etc. directories. A key thing in Python code is indentation because that's how Python determines block structure. It is critical that things be indented consistently and that either tabs or spaces but not a mixture be used for indentation. The above snippet, properly indented looks like
for name in listnames: if name in notshowns: continue mlist = MailList.MailList(name, lock=0) if mlist.advertised:
It is critical that "if name in notshowns:" is indented exactly the same amount as "mlist = MailList.MailList(name, lock=0)" and that other indentation be preserved exactly as in the original.
Thank you so much for your help. I got it to work!
I found out that I made two errors by testing the script from $PREFIX directory as you suggested. One was indentation. The other was the failure to clean up all the newlines when I extracted listnames that I wanted to hide from a file (one listname per line).
Here is what I have now: myfile = '/var/mailman/Mailman/Cgi/notshown' noshowns = string.split(open(myfile).read()) noshowns.sort()
for name in listnames:
if name in noshowns:
continue
mlist = MailList.MailList(name, lock=0)
if mlist.advertised:
if mm_cfg.VIRTUAL_HOST_OVERVIEW and \
mlist.web_page_url.find(hostname) == -1:
# List is for different identity of this host - skip it.
continue
else:
advertised.append((mlist.GetScriptURL('listinfo'),
mlist.real_name,
mlist.description))
Since I need to store a few hundreds listnames in the file, I wonder if it might be better to use regular expressions. Five to six regular expressions should be sufficient to match all the list names I want to hide.
Another option (if it is doable) is to use Mailman's supported advertise feature to hide these lists from both listinfo and admin page. I will subsequently bring up a third page, either a "sub-admin" page showing only those hidden course lists, or a "supper admin" page displaying all lists. The goal is that future upgrades won't entail re-customizing the previously customized package files. But I am afraid this may turn out to be so complicated as to involve security wrapper and other matters.
I would be very grateful to have your feed back.
Thanks. Xiaoyan