source: trunk/essentials/dev-lang/python/Demo/cgi/wiki.py@ 3408

Last change on this file since 3408 was 3225, checked in by bird, 19 years ago

Python 2.5

File size: 3.9 KB
Line 
1"""Wiki main program. Imported and run by cgi3.py."""
2
3import os, re, cgi, sys, tempfile
4escape = cgi.escape
5
6def main():
7 form = cgi.FieldStorage()
8 print "Content-type: text/html"
9 print
10 cmd = form.getvalue("cmd", "view")
11 page = form.getvalue("page", "FrontPage")
12 wiki = WikiPage(page)
13 method = getattr(wiki, 'cmd_' + cmd, None) or wiki.cmd_view
14 method(form)
15
16class WikiPage:
17
18 homedir = tempfile.gettempdir()
19 scripturl = os.path.basename(sys.argv[0])
20
21 def __init__(self, name):
22 if not self.iswikiword(name):
23 raise ValueError, "page name is not a wiki word"
24 self.name = name
25 self.load()
26
27 def cmd_view(self, form):
28 print "<h1>", escape(self.splitwikiword(self.name)), "</h1>"
29 print "<p>"
30 for line in self.data.splitlines():
31 line = line.rstrip()
32 if not line:
33 print "<p>"
34 else:
35 print self.formatline(line)
36 print "<hr>"
37 print "<p>", self.mklink("edit", self.name, "Edit this page") + ";"
38 print self.mklink("view", "FrontPage", "go to front page") + "."
39
40 def formatline(self, line):
41 words = []
42 for word in re.split('(\W+)', line):
43 if self.iswikiword(word):
44 if os.path.isfile(self.mkfile(word)):
45 word = self.mklink("view", word, word)
46 else:
47 word = self.mklink("new", word, word + "*")
48 else:
49 word = escape(word)
50 words.append(word)
51 return "".join(words)
52
53 def cmd_edit(self, form, label="Change"):
54 print "<h1>", label, self.name, "</h1>"
55 print '<form method="POST" action="%s">' % self.scripturl
56 s = '<textarea cols="70" rows="20" name="text">%s</textarea>'
57 print s % self.data
58 print '<input type="hidden" name="cmd" value="create">'
59 print '<input type="hidden" name="page" value="%s">' % self.name
60 print '<br>'
61 print '<input type="submit" value="%s Page">' % label