## A (maybe relative) URL for static content. By default this comes from
## the main script, but we hope that user agents cache it.
- STATIC = _script_name + '/static')
+ STATIC = None)
+
+@CONF.hook
+def set_static():
+ if CFG.STATIC is None: CFG.STATIC = CFG.SCRIPT_NAME + '/static'
###--------------------------------------------------------------------------
### Escaping and encoding.
"""Constructor: initialize `headerp' flag."""
super(HTTPOutput, me).__init__(*args, **kw)
me.headerp = False
+ me.warnings = []
def write(me, msg):
"""Output protocol: print a header if we've not written one already."""
if METHOD == 'HEAD':
HEADER_DONE()
+ def warn(me, msg):
+ """
+ Report a warning message.
+
+ The warning is stashed in a list where it can be retrieved using
+ `warnings'.
+ """
+ me.warnings.append(msg)
+
def cookie(name, value, **kw):
"""
Return a HTTP `Set-Cookie' header.
header = dict(header, content_type = 'text/html')
OUT.header(**header)
format_tmpl(TMPL['wrapper.fhtml'],
- title = title, payload = TMPL[template], **kw)
+ title = title, warnings = OUT.warnings,
+ payload = TMPL[template], **kw)
###--------------------------------------------------------------------------
### Error reporting.
## Acquire the query string.
if METHOD in ['GET', 'HEAD']:
- q = getenv('QUERY_STRING')
+ q = ENV.get('QUERY_STRING', '')
elif METHOD == 'POST':
else:
PARAM.append((k, v))
if k in seen:
- del PARAMDICT[k]
+ try: del PARAMDICT[k]
+ except KeyError: pass
else:
PARAMDICT[k] = v
seen.add(k)
CGI parameters.
"""
+ def __init__(me, name, contexts, desc, func,
+ methods = ['GET', 'POST'], *args, **kw):
+ super(Subcommand, me).__init__(name, contexts, desc, func, *args, **kw)
+ me.methods = set(methods)
+
def cgi(me, param, path):
"""
Invoke the subcommand given a collection of CGI parameters.
want = {}
kw = {}
+ ## Check the request method against the permitted list.
+ meth = METHOD
+ if meth == 'HEAD': meth = 'GET'
+ if meth not in me.methods:
+ raise U.ExpectedError, (500, "Unexpected request method `%s'" % METHOD)
+
def set_value(k, v):
"""Set a simple value: we shouldn't see multiple values."""
if k in kw: