*** cgitb.py.org Sun Jul 25 10:57:46 2004
--- cgitb.py Fri Oct 15 00:27:26 2004
***************
*** 37,42 ****
--- 37,44 ----
'''
__UNDEF__ = [] # a special sentinel object
+ __GETATTR_FAILED__ = '<ungettable attribute>'
+ __HTML_REPR_FAILED__ = '<unreprable value>'
def small(text):
if text:
return '' + text + ''
***************
*** 71,76 ****
--- 73,101 ----
return 'builtin', getattr(builtins, name)
return None, __UNDEF__
+ def _safe_getattr(*args):
+ """protected version of getattr"""
+ try:
+ return getattr(*args)
+ except:
+ return __GETATTR_FAILED__
+
+ def _safe_html_repr(value):
+ if value is __HTML_REPR_FAILED__ or value is __GETATTR_FAILED__: return value
+ try:
+ import pydoc
+ return pydoc.html.repr(value)
+ except:
+ return __HTML_REPR_FAILED__
+
+ def _safe_text_repr(value):
+ if value is __GETATTR_FAILED__: return ''
+ try:
+ import pydoc
+ return pydoc.text.repr(value)
+ except:
+ return ''
+
def scanvars(reader, frame, locals):
"""Scan one logical line of Python and look up values of variables used."""
import tokenize, keyword
***************
*** 80,86 ****
if ttype == tokenize.NAME and token not in keyword.kwlist:
if lasttoken == '.':
if parent is not __UNDEF__:
! value = getattr(parent, token, __UNDEF__)
vars.append((prefix + token, prefix, value))
else:
where, value = lookup(token, frame, locals)
--- 105,111 ----
if ttype == tokenize.NAME and token not in keyword.kwlist:
if lasttoken == '.':
if parent is not __UNDEF__:
! value = _safe_getattr(parent, token,__UNDEF__)
vars.append((prefix + token, prefix, value))
else:
where, value = lookup(token, frame, locals)
***************
*** 119,125 ****
if func != '?':
call = 'in ' + strong(func) + \
inspect.formatargvalues(args, varargs, varkw, locals,
! formatvalue=lambda value: '=' + pydoc.html.repr(value))
highlight = {}
def reader(lnum=[lnum]):
--- 144,150 ----
if func != '?':
call = 'in ' + strong(func) + \
inspect.formatargvalues(args, varargs, varkw, locals,
! formatvalue=lambda value: '=' + _safe_html_repr(value))
highlight = {}
def reader(lnum=[lnum]):
***************
*** 152,158 ****
name = strong(name)
else:
name = where + strong(name.split('.')[-1])
! dump.append('%s = %s' % (name, pydoc.html.repr(value)))
else:
dump.append(name + ' undefined')
--- 177,183 ----
name = strong(name)
else:
name = where + strong(name.split('.')[-1])
! dump.append('%s = %s' % (name, _safe_html_repr(value)))
else:
dump.append(name + ' undefined')
***************
*** 166,172 ****
if type(evalue) is types.InstanceType:
for name in dir(evalue):
if name[:1] == '_': continue
! value = pydoc.html.repr(getattr(evalue, name))
exception.append('\n
%s%s =\n%s' % (indent, name, value))
import traceback
--- 191,197 ----
if type(evalue) is types.InstanceType:
for name in dir(evalue):
if name[:1] == '_': continue
! value = _safe_html_repr(_safe_getattr(evalue, name))
exception.append('\n
%s%s =\n%s' % (indent, name, value))
import traceback
***************
*** 203,209 ****
if func != '?':
call = 'in ' + func + \
inspect.formatargvalues(args, varargs, varkw, locals,
! formatvalue=lambda value: '=' + pydoc.text.repr(value))
highlight = {}
def reader(lnum=[lnum]):
--- 228,234 ----
if func != '?':
call = 'in ' + func + \
inspect.formatargvalues(args, varargs, varkw, locals,
! formatvalue=lambda value: '=' + _safe_text_repr(value))
highlight = {}
def reader(lnum=[lnum]):
***************
*** 227,233 ****
if value is not __UNDEF__:
if where == 'global': name = 'global ' + name
elif where != 'local': name = where + name.split('.')[-1]
! dump.append('%s = %s' % (name, pydoc.text.repr(value)))
else:
dump.append(name + ' undefined')
--- 252,258 ----
if value is not __UNDEF__:
if where == 'global': name = 'global ' + name
elif where != 'local': name = where + name.split('.')[-1]
! dump.append('%s = %s' % (name, _safe_text_repr(value)))
else:
dump.append(name + ' undefined')
***************
*** 237,243 ****
exception = ['%s: %s' % (str(etype), str(evalue))]
if type(evalue) is types.InstanceType:
for name in dir(evalue):
! value = pydoc.text.repr(getattr(evalue, name))
exception.append('\n%s%s = %s' % (" "*4, name, value))
import traceback
--- 262,268 ----
exception = ['%s: %s' % (str(etype), str(evalue))]
if type(evalue) is types.InstanceType:
for name in dir(evalue):
! value = _safe_text_repr(_safe_getattr(evalue, name))
exception.append('\n%s%s = %s' % (" "*4, name, value))
import traceback