\n') + printtree(f,tree,0,p) + f.write('This page automatically created by \'newslist\' v. '+rcsrev+'.') + f.write(time.ctime(time.time()) + '
')
+ f.close()
+
+# Printtree prints the groups as a bulleted list. Groups with
+# more than ')
+ else:
+ # Create a main list
+ f.write('
')
+ indent = indent + 1
+
+ for i in kl:
+ if i == '.':
+ # Output a newsgroup
+ f.write('
')
+
+# Reading descriptions file ---------------------------------------
+
+# This returns an array mapping group name to its description
+
+def readdesc(descfile):
+ global desc
+
+ desc = {}
+
+ if descfile == '':
+ return
+
+ try:
+ d = open(descfile, 'r')
+ print 'Reading descriptions...'
+ except (IOError):
+ print 'Failed to open description file ' + descfile
+ return
+ l = d.readline()
+ while l != '':
+ bits = string.split(l)
+ try:
+ grp = bits[0]
+ dsc = string.join(bits[1:])
+ if len(dsc)>1:
+ desc[grp] = dsc
+ except (IndexError):
+ pass
+ l = d.readline()
+
+# Check that ouput directory exists, ------------------------------
+# and offer to create it if not
+
+def checkopdir(pagedir):
+ if not os.path.isdir(pagedir):
+ print 'Directory '+pagedir+' does not exist.'
+ print 'Shall I create it for you? (y/n)'
+ if sys.stdin.readline()[0] == 'y':
+ try:
+ os.mkdir(pagedir,0777)
+ except:
+ print 'Sorry - failed!'
+ sys.exit(1)
+ else:
+ print 'OK. Exiting.'
+ sys.exit(1)
+
+# Read and write current local tree ----------------------------------
+
+def readlocallist(treefile):
+ print 'Reading current local group list...'
+ tree = {}
+ try:
+ treetime = time.localtime(os.stat(treefile)[ST_MTIME])
+ except:
+ print '\n*** Failed to open local group cache '+treefile
+ print 'If this is the first time you have run newslist, then'
+ print 'use the -a option to create it.'
+ sys.exit(1)
+ treedate = '%02d%02d%02d' % (treetime[0] % 100 ,treetime[1], treetime[2])
+ try:
+ dump = open(treefile,'r')
+ tree = marshal.load(dump)
+ dump.close()
+ except (IOError):
+ print 'Cannot open local group list ' + treefile
+ return (tree, treedate)
+
+def writelocallist(treefile, tree):
+ try:
+ dump = open(treefile,'w')
+ groups = marshal.dump(tree,dump)
+ dump.close()
+ print 'Saved list to '+treefile+'\n'
+ except:
+ print 'Sorry - failed to write to local group cache '+treefile
+ print 'Does it (or its directory) have the correct permissions?'
+ sys.exit(1)
+
+# Return list of all groups on server -----------------------------
+
+def getallgroups(server):
+ print 'Getting list of all groups...'
+ treedate='010101'
+ info = server.list()[1]
+ groups = []
+ print 'Processing...'
+ if skipempty:
+ print '\nIgnoring following empty groups:'
+ for i in info:
+ grpname = string.split(i[0])[0]
+ if skipempty and string.atoi(i[1]) < string.atoi(i[2]):
+ print grpname+' ',
+ else:
+ groups.append(grpname)
+ print '\n'
+ if skipempty:
+ print '(End of empty groups)'
+ return groups
+
+# Return list of new groups on server -----------------------------
+
+def getnewgroups(server, treedate):
+ print 'Getting list of new groups since start of '+treedate+'...',
+ info = server.newgroups(treedate,'000001')[1]
+ print 'got %d.' % len(info)
+ print 'Processing...',
+ groups = []
+ for i in info:
+ grpname = string.split(i)[0]
+ groups.append(grpname)
+ print 'Done'
+ return groups
+
+# Now the main program --------------------------------------------
+
+def main():
+ global desc
+
+ tree={}
+
+ # Check that the output directory exists
+ checkopdir(pagedir)
+
+ try:
+ print 'Connecting to '+newshost+'...'
+ if sys.version[0] == '0':
+ s = NNTP.init(newshost)
+ else:
+ s = NNTP(newshost)
+ connected = 1
+ except (nntplib.error_temp, nntplib.error_perm), x:
+ print 'Error connecting to host:', x
+ print 'I\'ll try to use just the local list.'
+ connected = 0
+
+ # If -a is specified, read the full list of groups from server
+ if connected and len(sys.argv) > 1 and sys.argv[1] == '-a':
+
+ groups = getallgroups(s)
+
+ # Otherwise just read the local file and then add
+ # groups created since local file last modified.
+ else:
+
+ (tree, treedate) = readlocallist(treefile)
+ if connected:
+ groups = getnewgroups(s, treedate)
+
+ if connected:
+ addtotree(tree, groups)
+ writelocallist(treefile,tree)
+
+ # Read group descriptions
+ readdesc(descfile)
+
+ print 'Creating pages...'
+ createpage(rootpage, tree, '')
+ print 'Done'
+
+if __name__ == "__main__":
+ main()
+
+# That's all folks
+######################################################################