\n' % (httppref, rootpage)) printtree(f, tree, 0, p) f.write('\n
')
        f.write("This page automatically created by 'newslist' v. %s." %
                rcsrev)
        f.write(time.ctime(time.time()) + '\n')
        f.write('\n\n')
# Printtree prints the groups as a bulleted list.  Groups with
# more than ' % p[1:])
        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 a dict mapping group name to its description
def readdesc(descfile):
    global desc
    desc = {}
    if descfile == '':
        return
    try:
        with open(descfile, 'r') as d:
            print 'Reading descriptions...'
            for l in d:
                bits = l.split()
                try:
                    grp = bits[0]
                    dsc = ' '.join(bits[1:])
                    if len(dsc) > 1:
                        desc[grp] = dsc
                except IndexError:
                    pass
    except IOError:
        print 'Failed to open description file ' + descfile
        return
# Check that ouput directory exists, ------------------------------
# and offer to create it if not
def checkopdir(pagedir):
    if not os.path.isdir(pagedir):
        print 'Directory %s does not exist.' % pagedir
        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:
        with open(treefile, 'rb') as dump:
            tree = marshal.load(dump)
    except IOError:
        print 'Cannot open local group list ' + treefile
    return (tree, treedate)
def writelocallist(treefile, tree):
    try:
        with open(treefile, 'wb') as dump:
            groups = marshal.dump(tree, dump)
        print 'Saved list to %s\n' % treefile
    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 = i[0].split()[0]
        if skipempty and int(i[1]) < int(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 %s...' % treedate,
    info = server.newgroups(treedate, '000001')[1]
    print 'got %d.' % len(info)
    print 'Processing...',
    groups = []
    for i in info:
        grpname = i.split()[0]
        groups.append(grpname)
    print 'Done'
    return groups
# Now the main program --------------------------------------------
def main():
    tree = {}
    # Check that the output directory exists
    checkopdir(pagedir)
    try:
        print 'Connecting to %s...' % newshost
        if sys.version[0] == '0':
            s = NNTP.init(newshost)
        else:
            s = NNTP(newshost)
        connected = True
    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 = False
    # 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
######################################################################