\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, 0o777)
            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.decode() + ' ', end=' ')
        else:
            groups.append(grpname.decode())
    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, end=' ')
    info = server.newgroups(treedate, '000001')[1]
    print('got %d.' % len(info))
    print('Processing...', end=' ')
    groups = []
    for i in info:
        grpname = i.split()[0]
        groups.append(grpname.decode())
    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) as 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
######################################################################