annotate Demo/scripts/newslist.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 73758db2f464
children 5edfeb7aa6ea
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4573
73758db2f464 /usr/local/bin/python -> /usr/bin/env python
Guido van Rossum <guido@python.org>
parents: 1799
diff changeset
1 #! /usr/bin/env python
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 #######################################################################
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 # Newslist $Revision$
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 #
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 # Syntax:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 # newslist [ -a ]
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 #
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 # This is a program to create a directory full of HTML pages
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 # which between them contain links to all the newsgroups available
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 # on your server.
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 #
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 # The -a option causes a complete list of all groups to be read from
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 # the server rather than just the ones which have appeared since last
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 # execution. This recreates the local list from scratch. Use this on
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
15 # the first invocation of the program, and from time to time thereafter.
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
16 # When new groups are first created they may appear on your server as
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
17 # empty groups. By default, empty groups are ignored by the -a option.
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
18 # However, these new groups will not be created again, and so will not
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
19 # appear in the server's list of 'new groups' at a later date. Hence it
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
20 # won't appear until you do a '-a' after some articles have appeared.
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
21 #
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
22 # I should really keep a list of ignored empty groups and re-check them
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
23 # for articles on every run, but I haven't got around to it yet.
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 #
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 # This assumes an NNTP news feed.
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 #
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 # Feel free to copy, distribute and modify this code for
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 # non-commercial use. If you make any useful modifications, let me
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 # know!
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 #
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 # (c) Quentin Stafford-Fraser 1994
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 # fraser@europarc.xerox.com qs101@cl.cam.ac.uk
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 # #
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 #######################################################################
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 import sys,nntplib, string, marshal, time, os, posix, string
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 #######################################################################
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 # Check these variables before running! #
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 # Top directory.
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 # Filenames which don't start with / are taken as being relative to this.
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
42 topdir='/anfs/qsbigdisc/web/html/newspage'
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 # The name of your NNTP host
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 # eg.
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
46 # newshost = 'nntp-serv.cl.cam.ac.uk'
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 # or use following to get the name from the NNTPSERVER environment
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 # variable:
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
49 # newshost = posix.environ['NNTPSERVER']
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
50 newshost = 'nntp-serv.cl.cam.ac.uk'
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 # The filename for a local cache of the newsgroup list
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 treefile = 'grouptree'
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 # The filename for descriptions of newsgroups
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 # I found a suitable one at ftp.uu.net in /uunet-info/newgroups.gz
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 # You can set this to '' if you don't wish to use one.
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
58 descfile = 'newsgroups'
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 # The directory in which HTML pages should be created
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 # eg.
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 # pagedir = '/usr/local/lib/html/newspage'
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 # pagedir = 'pages'
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 pagedir = topdir
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 # The html prefix which will refer to this directory
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 # eg.
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 # httppref = '/newspage/',
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
69 # or leave blank for relative links between pages: (Recommended)
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
70 # httppref = ''
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 httppref = ''
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
72
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 # The name of the 'root' news page in this directory.
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 # A .html suffix will be added.
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
75 rootpage = 'root'
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
76
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 # Set skipempty to 0 if you wish to see links to empty groups as well.
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 # Only affects the -a option.
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
79 skipempty = 1
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
80
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
81 # pagelinkicon can contain html to put an icon after links to
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
82 # further pages. This helps to make important links stand out.
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
83 # Set to '' if not wanted, or '...' is quite a good one.
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
84 pagelinkicon='... <img src="http://pelican.cl.cam.ac.uk/icons/page.xbm"> '
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
85
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 # ---------------------------------------------------------------------
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 # Less important personal preferences:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
88
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 # Sublistsize controls the maximum number of items the will appear as
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 # an indented sub-list before the whole thing is moved onto a different
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 # page. The smaller this is, the more pages you will have, but the
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 # shorter each will be.
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 sublistsize = 4
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
94
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 # That should be all. #
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 #######################################################################
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
97
1799
60660341ee10 newslist.py: Added search for .newslistrc.py;
Guido van Rossum <guido@python.org>
parents: 1653
diff changeset
98 for dir in os.curdir, os.environ['HOME']:
60660341ee10 newslist.py: Added search for .newslistrc.py;
Guido van Rossum <guido@python.org>
parents: 1653
diff changeset
99 rcfile = os.path.join(dir, '.newslistrc.py')
60660341ee10 newslist.py: Added search for .newslistrc.py;
Guido van Rossum <guido@python.org>
parents: 1653
diff changeset
100 if os.path.exists(rcfile):
60660341ee10 newslist.py: Added search for .newslistrc.py;
Guido van Rossum <guido@python.org>
parents: 1653
diff changeset
101 print rcfile
60660341ee10 newslist.py: Added search for .newslistrc.py;
Guido van Rossum <guido@python.org>
parents: 1653
diff changeset
102 execfile(rcfile)
60660341ee10 newslist.py: Added search for .newslistrc.py;
Guido van Rossum <guido@python.org>
parents: 1653
diff changeset
103 break
60660341ee10 newslist.py: Added search for .newslistrc.py;
Guido van Rossum <guido@python.org>
parents: 1653
diff changeset
104
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 from nntplib import NNTP
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 from stat import *
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
107
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
108 rcsrev = '$Revision$'[11:15]
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 desc = {}
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
110
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
111 # Make (possibly) relative filenames into absolute ones
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
112 treefile = os.path.join(topdir,treefile)
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
113 descfile = os.path.join(topdir,descfile)
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
114 page = os.path.join(topdir,pagedir)
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
115
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 # First the bits for creating trees ---------------------------
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
117
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 # Addtotree creates/augments a tree from a list of group names
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 def addtotree(tree, groups):
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 print 'Updating tree...'
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 for i in groups:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 parts = string.splitfields(i,'.')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 makeleaf(tree, parts)
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
124
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 # Makeleaf makes a leaf and the branch leading to it if necessary
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 def makeleaf(tree,path):
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 j = path[0]
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 l = len(path)
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
129
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 if not tree.has_key(j):
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 tree[j] = {}
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 if l == 1:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 tree[j]['.'] = '.'
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 if l > 1:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
135 makeleaf(tree[j],path[1:])
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
136
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
137 # Then the bits for outputting trees as pages ----------------
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
138
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 # Createpage creates an HTML file named <root>.html containing links
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 # to those groups beginning with <root>.
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
141
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
142 def createpage(root, tree, p):
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
143 filename = os.path.join(pagedir,root+'.html')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
144 if root == rootpage:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 detail = ''
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
146 else:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
147 detail = ' under ' + root
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
148 f = open(filename,'w')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
149 # f.write('Content-Type: text/html\n')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 f.write('<TITLE>Newsgroups available' + detail + '</TITLE>\n')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
151 f.write('<H1>Newsgroups available' + detail +'</H1>\n')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
152 f.write('<A HREF="'+httppref+rootpage+'.html">Back to top level</A><P>\n')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 printtree(f,tree,0,p)
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
154 f.write('<I>This page automatically created by \'newslist\' v. '+rcsrev+'.')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
155 f.write(time.ctime(time.time()) + '</I><P>')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
156 f.close()
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
157
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
158 # Printtree prints the groups as a bulleted list. Groups with
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 # more than <sublistsize> subgroups will be put on a separate page.
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 # Other sets of subgroups are just indented.
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
161
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
162 def printtree(f, tree, indent, p):
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
163 global desc
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
164 l = len(tree)
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
165
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 if l > sublistsize and indent>0:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
167 # Create a new page and a link to it
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 f.write('<LI><B><A HREF="'+httppref+p[1:]+'.html">')
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
169 f.write(p[1:]+'.*')
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
170 f.write('</A></B>'+pagelinkicon+'\n')
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
171 createpage(p[1:], tree, p)
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
172 return
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
173
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 kl = tree.keys()
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
175
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
176 if l > 1:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
177 kl.sort()
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
178 if indent > 0:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
179 # Create a sub-list
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
180 f.write('<LI>'+p[1:]+'\n<UL>')
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
181 else:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
182 # Create a main list
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
183 f.write('<UL>')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
184 indent = indent + 1
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
185
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
186 for i in kl:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
187 if i == '.':
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
188 # Output a newsgroup
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 f.write('<LI><A HREF="news:' + p[1:] + '">'+ p[1:] + '</A> ')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
190 if desc.has_key(p[1:]):
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
191 f.write(' <I>'+desc[p[1:]]+'</I>\n')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
192 else:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 f.write('\n')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
194 else:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
195 # Output a hierarchy
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
196 printtree(f,tree[i], indent, p+'.'+i)
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
197
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
198 if l > 1:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 f.write('\n</UL>')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
200
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
201 # Reading descriptions file ---------------------------------------
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
202
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
203 # This returns an array mapping group name to its description
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
204
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
205 def readdesc(descfile):
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
206 global desc
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
207
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
208 desc = {}
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
209
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
210 if descfile == '':
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
211 return
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
212
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
213 try:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
214 d = open(descfile, 'r')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
215 print 'Reading descriptions...'
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
216 except (IOError):
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
217 print 'Failed to open description file ' + descfile
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
218 return
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
219 l = d.readline()
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
220 while l != '':
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
221 bits = string.split(l)
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 try:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
223 grp = bits[0]
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
224 dsc = string.join(bits[1:])
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
225 if len(dsc)>1:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
226 desc[grp] = dsc
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
227 except (IndexError):
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
228 pass
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
229 l = d.readline()
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
230
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
231 # Check that ouput directory exists, ------------------------------
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
232 # and offer to create it if not
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
233
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
234 def checkopdir(pagedir):
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
235 if not os.path.isdir(pagedir):
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
236 print 'Directory '+pagedir+' does not exist.'
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
237 print 'Shall I create it for you? (y/n)'
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
238 if sys.stdin.readline()[0] == 'y':
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
239 try:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
240 os.mkdir(pagedir,0777)
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
241 except:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
242 print 'Sorry - failed!'
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
243 sys.exit(1)
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
244 else:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
245 print 'OK. Exiting.'
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
246 sys.exit(1)
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
247
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
248 # Read and write current local tree ----------------------------------
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
249
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
250 def readlocallist(treefile):
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
251 print 'Reading current local group list...'
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
252 tree = {}
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
253 try:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
254 treetime = time.localtime(os.stat(treefile)[ST_MTIME])
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
255 except:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
256 print '\n*** Failed to open local group cache '+treefile
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
257 print 'If this is the first time you have run newslist, then'
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
258 print 'use the -a option to create it.'
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
259 sys.exit(1)
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
260 treedate = '%02d%02d%02d' % (treetime[0] % 100 ,treetime[1], treetime[2])
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
261 try:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
262 dump = open(treefile,'r')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
263 tree = marshal.load(dump)
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
264 dump.close()
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
265 except (IOError):
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
266 print 'Cannot open local group list ' + treefile
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
267 return (tree, treedate)
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
268
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
269 def writelocallist(treefile, tree):
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
270 try:
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
271 dump = open(treefile,'w')
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
272 groups = marshal.dump(tree,dump)
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
273 dump.close()
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
274 print 'Saved list to '+treefile+'\n'
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
275 except:
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
276 print 'Sorry - failed to write to local group cache '+treefile
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
277 print 'Does it (or its directory) have the correct permissions?'
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
278 sys.exit(1)
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
279
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
280 # Return list of all groups on server -----------------------------
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
281
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
282 def getallgroups(server):
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
283 print 'Getting list of all groups...'
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
284 treedate='010101'
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
285 info = server.list()[1]
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
286 groups = []
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
287 print 'Processing...'
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
288 if skipempty:
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
289 print '\nIgnoring following empty groups:'
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
290 for i in info:
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
291 grpname = string.split(i[0])[0]
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
292 if skipempty and string.atoi(i[1]) < string.atoi(i[2]):
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
293 print grpname+' ',
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
294 else:
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
295 groups.append(grpname)
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
296 print '\n'
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
297 if skipempty:
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
298 print '(End of empty groups)'
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
299 return groups
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
300
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
301 # Return list of new groups on server -----------------------------
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
302
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
303 def getnewgroups(server, treedate):
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
304 print 'Getting list of new groups since start of '+treedate+'...',
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
305 info = server.newgroups(treedate,'000001')[1]
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
306 print 'got '+`len(info)`+'.'
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
307 print 'Processing...',
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
308 groups = []
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
309 for i in info:
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
310 grpname = string.split(i)[0]
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
311 groups.append(grpname)
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
312 print 'Done'
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
313 return groups
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
314
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
315 # Now the main program --------------------------------------------
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
316
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
317 def main():
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
318 global desc
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
319
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
320 tree={}
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
321
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
322 # Check that the output directory exists
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
323 checkopdir(pagedir);
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
324
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
325 try:
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
326 print 'Connecting to '+newshost+'...'
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
327 if sys.version[0] == '0':
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
328 s = NNTP.init(newshost)
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
329 else:
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
330 s = NNTP(newshost)
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
331 connected = 1
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
332 except (nntplib.error_temp, nntplib.error_perm), x:
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
333 print 'Error connecting to host:', x
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
334 print 'I\'ll try to use just the local list.'
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
335 connected = 0
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
336
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
337 # If -a is specified, read the full list of groups from server
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
338 if connected and len(sys.argv) > 1 and sys.argv[1] == '-a':
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
339
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
340 groups = getallgroups(s)
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
341
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
342 # Otherwise just read the local file and then add
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
343 # groups created since local file last modified.
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
344 else:
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
345
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
346 (tree, treedate) = readlocallist(treefile)
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
347 if connected:
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
348 groups = getnewgroups(s, treedate)
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
349
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
350 if connected:
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
351 addtotree(tree, groups)
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
352 writelocallist(treefile,tree)
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
353
1653
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
354 # Read group descriptions
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
355 readdesc(descfile)
3aac825a53b5 Quentin's latest version
Guido van Rossum <guido@python.org>
parents: 1652
diff changeset
356
1652
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
357 print 'Creating pages...'
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
358 createpage(rootpage, tree, '')
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
359 print 'Done'
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
360
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
361
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
362 main()
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
363
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
364 # That's all folks
32c28adccd12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
365 ######################################################################