X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/chopwood/blobdiff_plain/a2916c0635fec5b45ad742904db9f5769b48f53d..58b2af638cde9ecd0a842fffbcb76cc8c42663ea:/cgi.py diff --git a/cgi.py b/cgi.py index f69646c..0630feb 100644 --- a/cgi.py +++ b/cgi.py @@ -166,47 +166,6 @@ def static(name): """Build a URL for the static file NAME.""" return htmlescape(CFG.STATIC + '/' + name) -@CTX.contextmanager -def html(title, **kw): - """ - Context manager for HTML output. - - Keyword arguments are output as HTTP headers (if no header has been written - yet). A `' element is written, and a `' opened, before the - context body is executed; the elements are closed off properly at the end. - """ - - kw = dict(kw, content_type = 'text/html') - OUT.header(**kw) - - ## Write the HTML header. - PRINT("""\ - - - - %(title)s - - - -""" % dict(title = html_quotify(title), - style = static('chpwd.css'), - script = static('chpwd.js'))) - - ## Write the body. - PRINT('') - yield None - PRINT('''\ - -
- Chopwood, version %(version)s: - copyright © 2012 Mark Wooding -
- - -''' % dict(about = static('about.html'), - version = VERSION)) - def redirect(where, **kw): """ Write a complete redirection to some other URL. @@ -291,74 +250,6 @@ def page(template, header = {}, title = 'Chopwood', **kw): ###-------------------------------------------------------------------------- ### Error reporting. -def cgi_error_guts(): - """ - Report an exception while we're acting as a CGI, together with lots of - information about our state. - - Our caller has, probably at great expense, arranged that we can format lots - of text. - """ - - ## Grab the exception information. - exty, exval, extb = SYS.exc_info() - - ## Print the exception itself. - PRINT("""\ -

Exception

-
%s
""" % html_quotify( - '\n'.join(TB.format_exception_only(exty, exval)))) - - ## Format a traceback so we can find out what has gone wrong. - PRINT("""\ -

Traceback

-
    """) - for file, line, func, text in TB.extract_tb(extb, 20): - PRINT("
  1. %s:%d (%s)" % ( - htmlescape(file), line, htmlescape(func))) - if text is not None: - PRINT("
    %s" % htmlescape(text)) - PRINT("
") - - ## Format various useful tables. - def fmt_dict(d): - fmt_kvlist(d.iteritems()) - def fmt_kvlist(l): - for k, v in sorted(l): - PRINT("%s%s" % ( - htmlescape(k), htmlescape(v))) - def fmt_list(l): - for i in l: - PRINT("%s" % htmlescape(i)) - - PRINT("""\ -

Parameters

""") - for what, thing, how in [('Query', PARAM, fmt_kvlist), - ('Cookies', COOKIE, fmt_dict), - ('Path', PATH, fmt_list), - ('Environment', ENV, fmt_dict)]: - PRINT("

%s

\n" % what) - how(thing) - PRINT("
") - -def cgi_error(): - """ - Report an exception while in CGI mode. - - If we've not produced a header yet, then we can do that, and produce a - status code and everything; otherwise we'll have to make do with a small - piece of the page. - """ - if OUT.headerp: - PRINT("
") - cgi_error_guts() - PRINT("
\n") - else: - with html("chpwd internal error", status = 500): - PRINT("

chpwd internal error

") - cgi_error_guts() - SYS.exit(1) - @CTX.contextmanager def cgi_errors(hook = None): """