aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-12-05 06:31:47 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-12-05 06:31:47 +0000
commit8e88f2eb3ab7d363e59bcd560df17e790d5a5b24 (patch)
treee2c789bbac98ff64b237b21b76a20bab1dbb2cb6 /examples
parentb7eaf474f92f1c119aa0be1cd713b82436494448 (diff)
downloadexternal_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.py66
-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