diff options
author | CodeMan99 <cody.taylor@maternityneighborhood.com> | 2014-12-10 11:40:58 -0500 |
---|---|---|
committer | CodeMan99 <cody.taylor@maternityneighborhood.com> | 2014-12-10 11:40:58 -0500 |
commit | b9072319c77cb183f05239f54d016f26a2a803db (patch) | |
tree | 5269ee690fc87d716e1606d3040c92d26f1fa703 /examples/wsgi | |
parent | 756e7da0afda60365bc29a9497a8f3b7a8b10cb9 (diff) | |
download | mako-b9072319c77cb183f05239f54d016f26a2a803db.tar.gz |
Make run_wsgi.py python3 compliant
Changes include:
- Add __future__ for python2
- Set "ascii" encoding for TemplateLookup
- Remove text option for error handling (header is already set to HTML)
- Break apart exception handling for clarity
- Check that a file exists before opening it
- Use `open` not `file` with 'rb' flags
- Remove unnessary "default" `extensions_map`
- Python3 style print statement
Diffstat (limited to 'examples/wsgi')
-rw-r--r-- | examples/wsgi/run_wsgi.py | 48 |
1 files changed, 28 insertions, 20 deletions
diff --git a/examples/wsgi/run_wsgi.py b/examples/wsgi/run_wsgi.py index 6e86406..13d689b 100644 --- a/examples/wsgi/run_wsgi.py +++ b/examples/wsgi/run_wsgi.py @@ -1,14 +1,25 @@ #!/usr/bin/python +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + import cgi, re, os, posixpath, mimetypes from mako.lookup import TemplateLookup from mako import exceptions root = './' port = 8000 -error_style = 'html' # select 'text' for plaintext error reporting -lookup = TemplateLookup(directories=[root + 'templates', root + 'htdocs'], filesystem_checks=True, module_directory='./modules') +lookup = TemplateLookup( + directories=[root + 'templates', root + 'htdocs'], + filesystem_checks=True, + module_directory='./modules', + # even better would be to use 'charset' in start_response + output_encoding='ascii', + ending_errors='replace' + ) def serve(environ, start_response): """serves requests using the WSGI callable interface.""" @@ -28,23 +39,25 @@ def serve(environ, start_response): 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] + return [str.encode("Cant find template '%s'" % uri)] + + start_response("200 OK", [('Content-type','text/html')]) + + try: + return [template.render(**d)] except: - if error_style == 'text': - start_response("200 OK", [('Content-type','text/plain')]) - return [exceptions.text_error_template().render()] - else: - start_response("200 OK", [('Content-type','text/html')]) - return [exceptions.html_error_template().render()] + 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()] + if os.path.isfile(filename): + start_response("200 OK", [('Content-type',guess_type(uri))]) + return [open(filename, 'rb').read()] + else: + start_response("404 Not Found", []) + return [str.encode("File not found: '%s'" % filename)] def getfield(f): """convert values from cgi.Field objects to plain values.""" @@ -54,9 +67,6 @@ def getfield(f): 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.""" @@ -67,12 +77,10 @@ def guess_type(path): if ext in extensions_map: return extensions_map[ext] else: - return extensions_map[''] + return 'text/html' if __name__ == '__main__': import wsgiref.simple_server server = wsgiref.simple_server.make_server('', port, serve) - print "Server listening on port %d" % port + print("Server listening on port %d" % port) server.serve_forever() - - |