These files are a subset of the python-2.7.2.tgz distribution from python.org. Changed files from PyMod-2.7.2 have been copied into the corresponding directories of this tree, replacing the original files in the distribution. Signed-off-by: daryl.mcdaniel@intel.com git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13197 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			124 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Wiki main program.  Imported and run by cgi3.py."""
 | |
| 
 | |
| import os, re, cgi, sys, tempfile
 | |
| escape = cgi.escape
 | |
| 
 | |
| def main():
 | |
|     form = cgi.FieldStorage()
 | |
|     print "Content-type: text/html"
 | |
|     print
 | |
|     cmd = form.getvalue("cmd", "view")
 | |
|     page = form.getvalue("page", "FrontPage")
 | |
|     wiki = WikiPage(page)
 | |
|     method = getattr(wiki, 'cmd_' + cmd, None) or wiki.cmd_view
 | |
|     method(form)
 | |
| 
 | |
| class WikiPage:
 | |
| 
 | |
|     homedir = tempfile.gettempdir()
 | |
|     scripturl = os.path.basename(sys.argv[0])
 | |
| 
 | |
|     def __init__(self, name):
 | |
|         if not self.iswikiword(name):
 | |
|             raise ValueError, "page name is not a wiki word"
 | |
|         self.name = name
 | |
|         self.load()
 | |
| 
 | |
|     def cmd_view(self, form):
 | |
|         print "<h1>", escape(self.splitwikiword(self.name)), "</h1>"
 | |
|         print "<p>"
 | |
|         for line in self.data.splitlines():
 | |
|             line = line.rstrip()
 | |
|             if not line:
 | |
|                 print "<p>"
 | |
|             else:
 | |
|                 print self.formatline(line)
 | |
|         print "<hr>"
 | |
|         print "<p>", self.mklink("edit", self.name, "Edit this page") + ";"
 | |
|         print self.mklink("view", "FrontPage", "go to front page") + "."
 | |
| 
 | |
|     def formatline(self, line):
 | |
|         words = []
 | |
|         for word in re.split('(\W+)', line):
 | |
|             if self.iswikiword(word):
 | |
|                 if os.path.isfile(self.mkfile(word)):
 | |
|                     word = self.mklink("view", word, word)
 | |
|                 else:
 | |
|                     word = self.mklink("new", word, word + "*")
 | |
|             else:
 | |
|                 word = escape(word)
 | |
|             words.append(word)
 | |
|         return "".join(words)
 | |
| 
 | |
|     def cmd_edit(self, form, label="Change"):
 | |
|         print "<h1>", label, self.name, "</h1>"
 | |
|         print '<form method="POST" action="%s">' % self.scripturl
 | |
|         s = '<textarea cols="70" rows="20" name="text">%s</textarea>'
 | |
|         print s % self.data
 | |
|         print '<input type="hidden" name="cmd" value="create">'
 | |
|         print '<input type="hidden" name="page" value="%s">' % self.name
 | |
|         print '<br>'
 | |
|         print '<input type="submit" value="%s Page">' % label
 | |
|         print "</form>"
 | |
| 
 | |
|     def cmd_create(self, form):
 | |
|         self.data = form.getvalue("text", "").strip()
 | |
|         error = self.store()
 | |
|         if error:
 | |
|             print "<h1>I'm sorry.  That didn't work</h1>"
 | |
|             print "<p>An error occurred while attempting to write the file:"
 | |
|             print "<p>", escape(error)
 | |
|         else:
 | |
|             # Use a redirect directive, to avoid "reload page" problems
 | |
|             print "<head>"
 | |
|             s = '<meta http-equiv="refresh" content="1; URL=%s">'
 | |
|             print s % (self.scripturl + "?cmd=view&page=" + self.name)
 | |
|             print "<head>"
 | |
|             print "<h1>OK</h1>"
 | |
|             print "<p>If nothing happens, please click here:",
 | |
|             print self.mklink("view", self.name, self.name)
 | |
| 
 | |
|     def cmd_new(self, form):
 | |
|         self.cmd_edit(form, label="Create")
 | |
| 
 | |
|     def iswikiword(self, word):
 | |
|         return re.match("[A-Z][a-z]+([A-Z][a-z]*)+", word)
 | |
| 
 | |
|     def splitwikiword(self, word):
 | |
|         chars = []
 | |
|         for c in word:
 | |
|             if chars and c.isupper():
 | |
|                 chars.append(' ')
 | |
|             chars.append(c)
 | |
|         return "".join(chars)
 | |
| 
 | |
|     def mkfile(self, name=None):
 | |
|         if name is None:
 | |
|             name = self.name
 | |
|         return os.path.join(self.homedir, name + ".txt")
 | |
| 
 | |
|     def mklink(self, cmd, page, text):
 | |
|         link = self.scripturl + "?cmd=" + cmd + "&page=" + page
 | |
|         return '<a href="%s">%s</a>' % (link, text)
 | |
| 
 | |
|     def load(self):
 | |
|         try:
 | |
|             f = open(self.mkfile())
 | |
|             data = f.read().strip()
 | |
|             f.close()
 | |
|         except IOError:
 | |
|             data = ""
 | |
|         self.data = data
 | |
| 
 | |
|     def store(self):
 | |
|         data = self.data
 | |
|         try:
 | |
|             f = open(self.mkfile(), "w")
 | |
|             f.write(data)
 | |
|             if data and not data.endswith('\n'):
 | |
|                 f.write('\n')
 | |
|             f.close()
 | |
|             return ""
 | |
|         except IOError, err:
 | |
|             return "IOError: %s" % str(err)
 |