error.py
author Tero Marttila <terom@fixme.fi>
Mon, 16 Feb 2009 02:09:14 +0200
changeset 134 fbccc1648d79
child 135 19ff083c2870
permissions -rw-r--r--
improved error handling for CGI/FastCGI
134
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
"""
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
    Build error messages
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
"""
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
import traceback, sys
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
def build_error (exc_info=None) :
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
    """
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
        Dumps out a raw traceback of the given/current exception to stdout.
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
        Returns a (status, content-type, body) tuple, with all components being non-unicode strs.
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
    """
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
    # default
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
    if not exc_info :
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
        exc_info = sys.exc_info()
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
    # return
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
    return ('500 Internal Server Error', 'text/html; charset=UTF-8', ("""\
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
<html><head><title>500 Internal Server Error</title></head><body>
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
<h1>Oops!</h1>
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
<p>
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
    An error occured, which was not logged, and will not be reported to anybody. It might be your fault, or it might be
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    the programmer's, but it's probably not mine. If you think you really care, you can try poking the administrator of
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    this site to see if they respond. 
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
</p>
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
<p>
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
    If you do so, please include the following information:
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
</p>
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
<h2>Details:</h2>
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
<pre>%(traceback)s</pre>
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
</body></html>""" % dict(
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
        traceback   = ''.join(traceback.format_exception(*exc_info))
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
    )).encode('utf-8'))
fbccc1648d79 improved error handling for CGI/FastCGI
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36