from werkzeug import BaseRequest, BaseResponse, ETagResponseMixin, escape, run_simple from werkzeug.exceptions import HTTPException from werkzeug.routing import RequestRedirect from jinja import Environment, FileSystemLoader, MemcachedFileSystemLoader from jinja.exceptions import TemplateNotFound import os import sha from time import time from random import randint class Request(BaseRequest): """Useful subclass of the default request that knows how to build urls.""" def __init__(self, environ): BaseRequest.__init__(self, environ) class Response(BaseResponse, ETagResponseMixin): """Subclass of base response that has a default mimetype of text/html.""" default_mimetype = 'text/html' # setup jinja try: env = Environment(loader=MemcachedFileSystemLoader('pages', memcache_host=['127.0.0.1:11211'])) print 'cache: memcached' except RuntimeError: env = Environment(loader=FileSystemLoader('pages', use_memcache=True)) print 'cache: none' def app(environ, start_response): """The WSGI application that connects all together.""" req = Request(environ) path = req.path[1:].lower() if path == '': path = 'index' mime_type='text/html' try: try: path.index('.') if path.split('.')[-1].isdigit() and not path.split('.')[-1].isalpha(): raise ValueError() tmpl = env.get_template(path) if path[-3:] == 'txt': mime_type='text/plain' if path[-3:] == 'xml': mime_type='text/xml' except ValueError: tmpl = env.get_template(path + '.html') except TemplateNotFound: tmpl = env.get_template('not_found.html') resp = Response(tmpl.render(static=False), mimetype=mime_type) resp.add_etag() resp.make_conditional(req) return resp(environ, start_response) if __name__ == '__main__': run_simple('localhost', 5009, app)