I found the CGI module to be nice in its power but wanted to create my own simpler version of the module. It lacks some of the power that the CGI module affords, but the code is small and has some helpful functions defined in it. The module listed below has been tested but really needs some test code written for it.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
def execute(function, exception): if string == exception: self() else: function() def html(string): print 'Content-Type: text/html\n\n' + string raise SystemExit(0) def plain(string): print 'Content-Type: text/plain\n\n' + string raise SystemExit(0) def self(): from sys import argv print 'Content-Type: text/plain\n\n' + file(argv).read() raise SystemExit(0) def export(): global string, dictionary, export, decode try: from os import environ string = environ['QUERY_STRING'] except: string = None try: temp = string.replace('+', ' ').split('&') for index in range(len(temp)): temp[index] = temp[index].split('=') dictionary = dict() for parameter, value in temp: dictionary[decode(parameter)] = decode(value) except: dictionary = None del export, decode def decode(string): index = string.find('%') while index is not -1: string = string[:index] + chr(int(string[index+1:index+3], 16)) + string[index+3:] index = string.find('%', index + 1) return string if __name__ == '__main__': self() else: export()
Why would someone want to use this code? It is easy to figure out, small, and has some functions that might be found to be useful.
Error. Ah! A bug! :P -- That's just for me. It is recommended that "raise SystemExit(0)" be removed from the html, plain, and self. Unfortunately, "try: code; except: code" can catch the exception and error handling code can be executed. Does anyone know of a better, harder way to kill a program while still returning an exit code of 0?
Nevermind. A solution was conjured up at http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/440642 in regards to the problem. The code can be modified so that it continues passing a SystemExit exception up the stack if needed.