1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
#!/usr/bin/env python
# -u turns off character translation to allow transmission
# of gzip compressed content on Windows and OS/2
#!/path/to/python -u
# Uncomment this if something goes wrong (for debugging)
#import cgitb; cgitb.enable()
# Don't touch anything below this line
# --------------------------------------------------
import os, sys
# this allows for a config.py override
script = os.environ.get('SCRIPT_FILENAME', None)
if script is not None:
script = script[0:script.rfind("/")]
sys.path.insert(0, script)
# this allows for grabbing the config based on the DocumentRoot
# setting if you're using apache
root = os.environ.get('DOCUMENT_ROOT', None)
if root is not None:
sys.path.insert(0, root)
# Settings are now in config.py, you should disable access to it by htaccess
# (make it executable or deny access)
from config import py as cfg
# If the user defined a "codebase" property in their config file,
# then we insert that into our sys.path because that's where the
# PyBlosxom installation is.
if cfg.has_key("codebase"):
sys.path.insert(0, cfg["codebase"])
from Pyblosxom.pyblosxom import PyBlosxom
if __name__ == '__main__':
env = {}
# if there's no REQUEST_METHOD, then this is being run on the
# command line and we should execute the command_line_handler.
if not os.environ.has_key("REQUEST_METHOD"):
from Pyblosxom.pyblosxom import command_line_handler
args = sys.argv[1:]
if len(args) == 0:
args = ["--test"]
sys.exit(command_line_handler("pyblosxom.cgi", args))
# names taken from wsgi instead of inventing something new
env['wsgi.input'] = sys.stdin
env['wsgi.errors'] = sys.stderr
# figure out what the protocol is for the wsgi.url_scheme property.
# we look at the base_url first and if there's nothing set there,
# we look at environ.
if 'base_url' in cfg.keys():
env['wsgi.url_scheme'] = cfg['base_url'][:cfg['base_url'].find("://")]
else:
if os.environ.get("HTTPS", "off") in ("on", "1"):
env["wsgi.url_scheme"] = "https"
else:
env['wsgi.url_scheme'] = "http"
try:
# try running as a WSGI-CGI
from wsgiref.handlers import CGIHandler
from Pyblosxom.pyblosxom import PyBlosxomWSGIApp
CGIHandler().run(PyBlosxomWSGIApp())
except ImportError:
# run as a regular CGI
if os.environ.get("HTTPS") in ("yes", "on", "1"):
env['wsgi.url_scheme'] = "https"
for mem in ["HTTP_HOST", "HTTP_USER_AGENT", "HTTP_REFERER",
"PATH_INFO", "QUERY_STRING", "REMOTE_ADDR",
"REQUEST_METHOD", "REQUEST_URI", "SCRIPT_NAME",
"HTTP_IF_NONE_MATCH", "HTTP_IF_MODIFIED_SINCE",
"HTTP_COOKIE", "CONTENT_LENGTH", "CONTENT_TYPE",
"HTTP_ACCEPT", "HTTP_ACCEPT_ENCODING"]:
env[mem] = os.environ.get(mem, "")
p = PyBlosxom(cfg, env)
p.run()
response = p.getResponse()
response.sendHeaders(sys.stdout)
response.sendBody(sys.stdout)
# vim: shiftwidth=4 tabstop=4 expandtab
|