PythonWebsites

From TkkrLab

Jump to: navigation, search

This is a part of PythonMaterial.

## -*- coding: utf-8 -*-
""" Example python module """
import traceback
import sys
from mod_python import apache, Session, Cookie, util
from mako.lookup import TemplateLookup
 
templates = '/var/www/site/templates'
site = '/var/www/site/'
 
lookup = TemplateLookup(
    directories=[templates],
    module_directory='/tmp/templates',
    input_encoding='utf-8',
    disable_unicode=True)
 
pages = {}
 
 
def handler(req):
    """ mod_python handler for registered pages """
    page = req.filename.replace(site, '')
    if not page in pages:
        return apache.HTTP_NOT_FOUND
 
    try:
        req.content_type = 'text/html;charset=utf-8'
        req.status = apache.OK
        req.session = Session.Session(req)
        req.formdata = util.FieldStorage(req, 1)
        pages[page](req)
        return req.status
    except Exception, e:  # pylint: disable-msg=W0703
        sys.stderr.write(
            "Error: " + e.message + " " + str(e.args) + "\n")
        sys.stderr.write("Traceback:\n")
        traceback.print_tb(sys.exc_info()[2], file=sys.stderr)
        sys.stderr.flush()
        return apache.HTTP_INTERNAL_SERVER_ERROR
 
 
def write(req, page, **args):
    """ generate a page from a template """
    template = lookup.get_template(page)
    req.write(template.render(**args))
 
 
def field(s):
    """ Decode a given field into utf-8 """
    return unicode(s).decode('string_escape')
 
def show_info(req):
    """ page that shows an awefull lot of http data """
    data = {}
    data[('1base', 'uri')] = req.uri
    data[('1base', 'filename')] = req.filename
    data[('1base', 'hostname')] = req.hostname
    data[('1base', 'time')] = req.request_time
    data[('1base', 'method')] = req.method
    data[('1base', 'remote')] = req.get_remote_host()
    data[('2headers', 'headers_in')] = req.headers_in
    data[('2headers', 'headers_out')] = req.headers_out
    if req.args != None:
        data[('3content', 'args')] = field(util.parse_qsl(req.args, 1))
    data[('3content', 'fields')] = field(req.formdata.items())
    data[('4session', 'cookies')] = Cookie.get_cookies(req)
    data[('4session', 'user')] = req.user
    data[('4session', 'auth_type')] = req.ap_auth_type
    data[('4session', 'session')] = req.session
    req.add_common_vars()
    data[('5apache', 'data')] = req.subprocess_env
    data[('5apache', 'docroot')] = req.document_root()
    data[('5apache', 'https')] = req.is_https()
    write(req, "show.html", args=data)
 
pages['info.page'] = show_info

Install into apache:

Removing again:

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox