diff --git a/Lib/cgitb.py b/Lib/cgitb.py index 19b4149f9f3..831f792e1d0 100644 --- a/Lib/cgitb.py +++ b/Lib/cgitb.py @@ -19,13 +19,19 @@ Alternatively, if you have caught an exception and want cgitb to display it for you, call cgitb.handler(). The optional argument to handler() is a 3-item tuple (etype, evalue, etb) just like the value of sys.exc_info(). The default handler displays output as HTML. + """ - -__author__ = 'Ka-Ping Yee' - -__version__ = '$Revision$' - +import inspect +import keyword +import linecache +import os +import pydoc import sys +import tempfile +import time +import tokenize +import traceback +import types def reset(): """Return a string that resets the CGI and browser to a known state.""" @@ -74,7 +80,6 @@ def lookup(name, frame, locals): def scanvars(reader, frame, locals): """Scan one logical line of Python and look up values of variables used.""" - import tokenize, keyword vars, lasttoken, parent, prefix, value = [], None, None, '', __UNDEF__ for ttype, token, start, end, line in tokenize.generate_tokens(reader): if ttype == tokenize.NEWLINE: break @@ -96,8 +101,6 @@ def scanvars(reader, frame, locals): def html((etype, evalue, etb), context=5): """Return a nice HTML document describing a given traceback.""" - import os, types, time, traceback, linecache, inspect, pydoc - if type(etype) is types.ClassType: etype = etype.__name__ pyver = 'Python ' + sys.version.split()[0] + ': ' + sys.executable @@ -173,7 +176,6 @@ function calls leading up to the error, in the order they occurred.
''' value = pydoc.html.repr(getattr(evalue, name)) exception.append('\nA problem occurred in a Python script.\n') if self.logdir is not None: - import os, tempfile suffix = ['.txt', '.html'][self.format=="html"] (fd, path) = tempfile.mkstemp(suffix=suffix, dir=self.logdir) try: diff --git a/Misc/NEWS b/Misc/NEWS index 1d210a1cd7b..3d2b492598e 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -200,6 +200,10 @@ Core and Builtins Library ------- +- Issue #1665206 (partially): Move imports in cgitb to the top of the module + instead of performing them in functions. Helps prevent import deadlocking in + threads. + - Actually make the SimpleXMLRPCServer CGI handler work. - Issue #2522: locale.format now checks its first argument to ensure it has