#!/usr/bin/env python

def django_page(environ, start_response):
    from django import template

    src = """
<html>
  <head><title>Django Page</title></head>
  <body>
    <p>This is a Django template @ {{ path }}</p>
    <p>Go <a href="{{ home }}">home</a></p>
  </body>
</html>
"""
    tmp = template.Template(src)
    ctx = template.Context({'path': environ['PATH_INFO'],
                            'home': environ['home']})
    rendered = tmp.render(ctx)

    start_response('200 OK', [('Content-Type', 'text/html')])
    return [str(rendered.encode('utf-8'))]


def genshi_page(environ, start_response):
    from genshi import template

    src = """
<html xmlns:py="http://genshi.edgewall.org/">
  <head><title>Genshi Page</title></head>
  <body>
    <p>This is a Genshi template @ <span py:replace="path">a path</span></p>
    <p>Go <a href="${home}">home</a></p>
  </body>
</html>
"""
    tpl = template.MarkupTemplate(src)
    stream = tpl.generate(path=environ['PATH_INFO'],
                          home=environ['home'])

    start_response('200 OK', [('Content-Type', 'text/html')])
    return stream.render('xhtml', encoding='utf-8')


def jinja_page(environ, start_response):
    import jinja2

    src = """
<html>
  <head><title>Jinja Page</title></head>
  <body>
    <p>This is a Jinja2 template @ {{ path }}</p>
    <p>Go <a href="{{ home }}">home</a></p>
  </body>
</html>
"""
    rendered = jinja2.Template(src).render(path=environ['PATH_INFO'],
                                           home=environ['home'])

    start_response('200 OK', [('Content-Type', 'text/html')])
    return [rendered.encode('utf-8')]


def mako_page(environ, start_response):
    from mako import template

    src = """
<html>
  <head><title>Mako Page</title></head>
  <body>
    <p>This is a Mako template @ ${path}</p>
    <p>Go <a href="${home}">home</a></p>
  </body>
</html>
"""
    rendered = template.Template(src).render(path=environ['PATH_INFO'],
                                             home=environ['home'])

    start_response('200 OK', [('Content-Type', 'text/html')])
    return [rendered.encode('utf-8')]



mapping = {'django': django_page,
           'genshi': genshi_page,
           'jinja': jinja_page,
           'mako': mako_page }

def dispatcher(environ, start_response):
    request = environ['PATH_INFO'][1:]
    environ['home'] = '/'
    if request in mapping:
        return mapping[request](environ, start_response)
    else:
        start_response('200 OK', [('Content-Type', 'text/html')])
        return ['<br>'.join('<a href="/%s">%s</a>' % (prefix, prefix)
                            for prefix in sorted(mapping.keys()))]

if __name__ == '__main__':
    from wsgiref.simple_server import make_server

    server = make_server('localhost', 8080, dispatcher)
    print "Listening: http://localhost:8080/"
    try:
        server.serve_forever()
    except KeyboardInterrupt:
        print "\nbye!"

