annotate roundup/cgi/cgitb.py @ 2077:3e0961d6d44d

Added the "actor" property. Metakit backend not done (still not confident I know how it's supposed to work ;) Currently it will come up as NULL in the RDBMS backends for older items. The *dbm backends will look up the journal. I hope to remedy the former before 0.7's release. Fixed a bunch of migration issues in the rdbms backends while I was at it (index changes for key prop changes) and simplified the class table update code for RDBMSes that have "alter table" in their command set (ie. not sqlite) ... migration from "version 1" to "version 2" still hasn't actually been tested yet though.
author Richard Jones <richard@users.sourceforge.net>
date Mon, 15 Mar 2004 05:50:20 +0000
parents fc52d57c6c3e
children cafdf8b7cc69
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 #
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 # This module was written by Ka-Ping Yee, <ping@lfw.org>.
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 #
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1947
diff changeset
4 # $Id: cgitb.py,v 1.10 2004-02-11 23:55:09 richard Exp $
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1947
diff changeset
6 """Extended CGI traceback handler by Ka-Ping Yee, <ping@lfw.org>.
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 """
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1947
diff changeset
8 __docformat__ = 'restructuredtext'
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9
1136
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
10 import sys, os, types, string, keyword, linecache, tokenize, inspect, cgi
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1066
diff changeset
11 import pydoc, traceback
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 from roundup.i18n import _
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 def breaker():
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16 return ('<body bgcolor="white">' +
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17 '<font color="white" size="-5"> > </font> ' +
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18 '</table>' * 5)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19
1065
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
20 def niceDict(indent, dict):
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
21 l = []
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
22 for k,v in dict.items():
1136
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
23 l.append('<tr><td><strong>%s</strong></td><td>%s</td></tr>'%(k,
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
24 cgi.escape(repr(v))))
1065
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
25 return '\n'.join(l)
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
26
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
27 def pt_html(context=5):
1396
cce5b4309005 extra info in template error report
Richard Jones <richard@users.sourceforge.net>
parents: 1204
diff changeset
28 esc = cgi.escape
cce5b4309005 extra info in template error report
Richard Jones <richard@users.sourceforge.net>
parents: 1204
diff changeset
29 l = ['<h1>Templating Error</h1>',
cce5b4309005 extra info in template error report
Richard Jones <richard@users.sourceforge.net>
parents: 1204
diff changeset
30 '<p><b>%s</b>: %s</p>'%(esc(str(sys.exc_type)),
cce5b4309005 extra info in template error report
Richard Jones <richard@users.sourceforge.net>
parents: 1204
diff changeset
31 esc(str(sys.exc_value))),
cce5b4309005 extra info in template error report
Richard Jones <richard@users.sourceforge.net>
parents: 1204
diff changeset
32 '<p class="help">Debugging information follows</p>',
cce5b4309005 extra info in template error report
Richard Jones <richard@users.sourceforge.net>
parents: 1204
diff changeset
33 '<ol>',]
1136
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
34 from roundup.cgi.PageTemplates.Expressions import TraversalError
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1136
diff changeset
35 t = inspect.trace(context)
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1136
diff changeset
36 t.reverse()
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1136
diff changeset
37 for frame, file, lnum, func, lines, index in t:
1065
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
38 args, varargs, varkw, locals = inspect.getargvalues(frame)
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
39 if locals.has_key('__traceback_info__'):
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
40 ti = locals['__traceback_info__']
1136
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
41 if isinstance(ti, TraversalError):
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
42 s = []
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
43 for name, info in ti.path:
1396
cce5b4309005 extra info in template error report
Richard Jones <richard@users.sourceforge.net>
parents: 1204
diff changeset
44 s.append('<li>"%s" (%s)</li>'%(name, esc(repr(info))))
1136
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
45 s = '\n'.join(s)
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
46 l.append('<li>Looking for "%s", current path:<ol>%s</ol></li>'%(
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
47 ti.name, s))
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
48 else:
1396
cce5b4309005 extra info in template error report
Richard Jones <richard@users.sourceforge.net>
parents: 1204
diff changeset
49 l.append('<li>In %s</li>'%esc(str(ti)))
1065
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
50 if locals.has_key('__traceback_supplement__'):
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
51 ts = locals['__traceback_supplement__']
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
52 if len(ts) == 2:
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
53 supp, context = ts
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1136
diff changeset
54 s = 'A problem occurred in your template "%s".'%str(context.id)
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1136
diff changeset
55 if context._v_errors:
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1136
diff changeset
56 s = s + '<br>' + '<br>'.join(
1396
cce5b4309005 extra info in template error report
Richard Jones <richard@users.sourceforge.net>
parents: 1204
diff changeset
57 [esc(x) for x in context._v_errors])
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1136
diff changeset
58 l.append('<li>%s</li>'%s)
1065
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
59 elif len(ts) == 3:
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
60 supp, context, info = ts
1136
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
61 l.append('''
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
62 <li>While evaluating the %r expression on line %d
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
63 <table class="otherinfo" style="font-size: 90%%">
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
64 <tr><th colspan="2" class="header">Current variables:</th></tr>
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
65 %s
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
66 %s
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
67 </table></li>
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
68 '''%(info, context.position[0], niceDict(' ', context.global_vars),
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
69 niceDict(' ', context.local_vars)))
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1066
diff changeset
70
1136
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
71 l.append('''
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
72 </ol>
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
73 <table style="font-size: 80%%; color: gray">
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
74 <tr><th class="header" align="left">Full traceback:</th></tr>
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
75 <tr><td><pre>%s</pre></td></tr>
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
76 </table>'''%cgi.escape(''.join(traceback.format_exception(sys.exc_type,
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
77 sys.exc_value, sys.exc_traceback))))
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
78 l.append('<p>&nbsp;</p>')
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
79 return '\n'.join(l)
1065
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
80
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 def html(context=5):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82 etype, evalue = sys.exc_type, sys.exc_value
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 if type(etype) is types.ClassType:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84 etype = etype.__name__
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 pyver = 'Python ' + string.split(sys.version)[0] + '<br>' + sys.executable
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 head = pydoc.html.heading(
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 '<font size=+1><strong>%s</strong>: %s</font>'%(etype, evalue),
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 '#ffffff', '#777777', pyver)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90 head = head + (_('<p>A problem occurred while running a Python script. '
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 'Here is the sequence of function calls leading up to '
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 'the error, with the most recent (innermost) call first. '
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 'The exception attributes are:'))
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
95 indent = '<tt><small>%s</small>&nbsp;</tt>' % ('&nbsp;' * 5)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96 traceback = []
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
97 for frame, file, lnum, func, lines, index in inspect.trace(context):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
98 if file is None:
1065
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
99 link = '''&lt;file is None - probably inside <tt>eval</tt> or
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
100 <tt>exec</tt>&gt;'''
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
101 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102 file = os.path.abspath(file)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
103 link = '<a href="file:%s">%s</a>' % (file, pydoc.html.escape(file))
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
104 args, varargs, varkw, locals = inspect.getargvalues(frame)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
105 if func == '?':
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106 call = ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 call = 'in <strong>%s</strong>' % func + inspect.formatargvalues(
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109 args, varargs, varkw, locals,
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 formatvalue=lambda value: '=' + pydoc.html.repr(value))
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
111
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112 level = '''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
113 <table width="100%%" bgcolor="#dddddd" cellspacing=0 cellpadding=2 border=0>
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114 <tr><td>%s %s</td></tr></table>''' % (link, call)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
116 if index is None or file is None:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
117 traceback.append('<p>' + level)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 continue
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
119
1065
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
120 # do a file inspection
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121 names = []
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122 def tokeneater(type, token, start, end, line, names=names):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 if type == tokenize.NAME and token not in keyword.kwlist:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
124 if token not in names:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
125 names.append(token)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 if type == tokenize.NEWLINE: raise IndexError
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127 def linereader(file=file, lnum=[lnum]):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128 line = linecache.getline(file, lnum[0])
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129 lnum[0] = lnum[0] + 1
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
130 return line
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
131
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132 try:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133 tokenize.tokenize(linereader, tokeneater)
1065
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
134 except IndexError:
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
135 pass
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
136 lvals = []
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
137 for name in names:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
138 if name in frame.f_code.co_varnames:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139 if locals.has_key(name):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140 value = pydoc.html.repr(locals[name])
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
141 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142 value = _('<em>undefined</em>')
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
143 name = '<strong>%s</strong>' % name
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145 if frame.f_globals.has_key(name):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
146 value = pydoc.html.repr(frame.f_globals[name])
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
148 value = _('<em>undefined</em>')
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
149 name = '<em>global</em> <strong>%s</strong>' % name
1065
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
150 lvals.append('%s&nbsp;= %s'%(name, value))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
151 if lvals:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
152 lvals = string.join(lvals, ', ')
1065
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
153 lvals = indent + '<small><font color="#909090">%s'\
0f9aa62917bd much nicer error messages when there's a templating error
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
154 '</font></small><br>'%lvals
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
155 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
156 lvals = ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
157
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
158 excerpt = []
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
159 i = lnum - index
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
160 for line in lines:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
161 number = '&nbsp;' * (5-len(str(i))) + str(i)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
162 number = '<small><font color="#909090">%s</font></small>' % number
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
163 line = '<tt>%s&nbsp;%s</tt>' % (number, pydoc.html.preformat(line))
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
164 if i == lnum:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
165 line = '''
1947
0e19e99075e3 fix #white in cgitb
Richard Jones <richard@users.sourceforge.net>
parents: 1396
diff changeset
166 <table width="100%%" bgcolor="white" cellspacing=0 cellpadding=0 border=0>
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
167 <tr><td>%s</td></tr></table>''' % line
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
168 excerpt.append('\n' + line)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
169 if i == lnum:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
170 excerpt.append(lvals)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
171 i = i + 1
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
172 traceback.append('<p>' + level + string.join(excerpt, '\n'))
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
173
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
174 traceback.reverse()
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
175
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
176 exception = '<p><strong>%s</strong>: %s' % (str(etype), str(evalue))
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
177 attribs = []
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
178 if type(evalue) is types.InstanceType:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
179 for name in dir(evalue):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
180 value = pydoc.html.repr(getattr(evalue, name))
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
181 attribs.append('<br>%s%s&nbsp;= %s' % (indent, name, value))
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
182
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
183 return head + string.join(attribs) + string.join(traceback) + '<p>&nbsp;</p>'
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
184
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
185 def handler():
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
186 print breaker()
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
187 print html()
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
188
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
189 # vim: set filetype=python ts=4 sw=4 et si

Roundup Issue Tracker: http://roundup-tracker.org/