diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-12-05 06:31:47 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-12-05 06:31:47 +0000 |
| commit | 8e88f2eb3ab7d363e59bcd560df17e790d5a5b24 (patch) | |
| tree | e2c789bbac98ff64b237b21b76a20bab1dbb2cb6 /examples | |
| parent | b7eaf474f92f1c119aa0be1cd713b82436494448 (diff) | |
| download | external_python_mako-8e88f2eb3ab7d363e59bcd560df17e790d5a5b24.tar.gz external_python_mako-8e88f2eb3ab7d363e59bcd560df17e790d5a5b24.tar.bz2 external_python_mako-8e88f2eb3ab7d363e59bcd560df17e790d5a5b24.zip | |
wsgi example rearrangement/update
cache function optional
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/wsgi/htdocs/index.html (renamed from examples/wsgi/index.html) | 0 | ||||
| -rw-r--r-- | examples/wsgi/run_wsgi.py | 66 | ||||
| -rw-r--r-- | examples/wsgi/templates/root.html (renamed from examples/wsgi/root.html) | 0 |
3 files changed, 50 insertions, 16 deletions
diff --git a/examples/wsgi/index.html b/examples/wsgi/htdocs/index.html index cd0129e..cd0129e 100644 --- a/examples/wsgi/index.html +++ b/examples/wsgi/htdocs/index.html diff --git a/examples/wsgi/run_wsgi.py b/examples/wsgi/run_wsgi.py index 61ed3bb..cacd065 100644 --- a/examples/wsgi/run_wsgi.py +++ b/examples/wsgi/run_wsgi.py @@ -1,11 +1,16 @@ -from wsgiutils import wsgiServer -import cgi, sys +#!/usr/bin/python + +import cgi, re, os, posixpath, mimetypes from mako.lookup import TemplateLookup from mako import exceptions -lookup = TemplateLookup(directories=['./'], filesystem_checks=True) +root = './' +port = 8000 + +lookup = TemplateLookup(directories=[root + 'templates', root + 'htdocs'], filesystem_checks=True, module_directory='./modules') def serve(environ, start_response): + """serves requests using the WSGI callable interface.""" fieldstorage = cgi.FieldStorage( fp = environ['wsgi.input'], environ = environ, @@ -14,26 +19,55 @@ def serve(environ, start_response): d = dict([(k, getfield(fieldstorage[k])) for k in fieldstorage]) uri = environ.get('PATH_INFO', '/') - try: - template = lookup.get_template(uri) - start_response("200 OK", [('Content-type','text/html')]) - return [template.render(**d)] - except exceptions.TemplateLookupException: - start_response("404 Not Found", []) - return ["Cant find template '%s'" % uri] - except: - start_response("200 OK", [('Content-type','text/html')]) - return [exceptions.html_error_template().render()] + if not uri: + uri = '/index.html' + else: + uri = re.sub(r'^/$', '/index.html', uri) + if re.match(r'.*\.html$', uri): + try: + template = lookup.get_template(uri) + start_response("200 OK", [('Content-type','text/html')]) + return [template.render(**d)] + except exceptions.TopLevelLookupException: + start_response("404 Not Found", []) + return ["Cant find template '%s'" % uri] + except: + start_response("200 OK", [('Content-type','text/html')]) + return [exceptions.html_error_template().render()] + else: + u = re.sub(r'^\/+', '', uri) + filename = os.path.join(root, u) + start_response("200 OK", [('Content-type',guess_type(uri))]) + return [file(filename).read()] + def getfield(f): + """convert values from cgi.Field objects to plain values.""" if isinstance(f, list): return [getfield(x) for x in f] else: return f.value - + +extensions_map = mimetypes.types_map.copy() +extensions_map.update({ +'': 'text/html', # Default +}) + +def guess_type(path): + """return a mimetype for the given path based on file extension.""" + base, ext = posixpath.splitext(path) + if ext in extensions_map: + return extensions_map[ext] + ext = ext.lower() + if ext in extensions_map: + return extensions_map[ext] + else: + return extensions_map[''] + if __name__ == '__main__': - server = wsgiServer.WSGIServer (('localhost', 8000), {'/': serve}) - print "Server listening on port 8000" + from wsgiutils import wsgiServer + server = wsgiServer.WSGIServer (('localhost', port), {'/': serve}) + print "Server listening on port %d" % port server.serve_forever() diff --git a/examples/wsgi/root.html b/examples/wsgi/templates/root.html index 6b57fc3..6b57fc3 100644 --- a/examples/wsgi/root.html +++ b/examples/wsgi/templates/root.html |
