Kaydet (Commit) a0b12a1c authored tarafından Victor Stinner's avatar Victor Stinner

(merge 3.2) Issue #12451: doctest.debug_script() doesn't create a temporary

file anymore to avoid encoding issues (it used the locale encoding, whereas
UTF-8 should be).

Remove also an unused import (warnings).
...@@ -92,10 +92,15 @@ __all__ = [ ...@@ -92,10 +92,15 @@ __all__ = [
] ]
import __future__ import __future__
import difflib
import sys, traceback, inspect, linecache, os, re import inspect
import unittest, difflib, pdb, tempfile import linecache
import warnings import os
import pdb
import re
import sys
import traceback
import unittest
from io import StringIO from io import StringIO
from collections import namedtuple from collections import namedtuple
...@@ -2511,39 +2516,21 @@ def debug_script(src, pm=False, globs=None): ...@@ -2511,39 +2516,21 @@ def debug_script(src, pm=False, globs=None):
"Debug a test script. `src` is the script, as a string." "Debug a test script. `src` is the script, as a string."
import pdb import pdb
# Note that tempfile.NameTemporaryFile() cannot be used. As the if globs:
# docs say, a file so created cannot be opened by name a second time globs = globs.copy()
# on modern Windows boxes, and exec() needs to open and read it. else:
srcfilename = tempfile.mktemp(".py", "doctestdebug") globs = {}
f = open(srcfilename, 'w')
f.write(src)
f.close()
try:
if globs:
globs = globs.copy()
else:
globs = {}
if pm:
try:
with open(srcfilename) as f:
exec(f.read(), globs, globs)
except:
print(sys.exc_info()[1])
p = pdb.Pdb(nosigint=True)
p.reset()
p.interaction(None, sys.exc_info()[2])
else:
fp = open(srcfilename)
try:
script = fp.read()
finally:
fp.close()
pdb.Pdb(nosigint=True).run("exec(%r)" % script, globs, globs)
finally: if pm:
os.remove(srcfilename) try:
exec(src, globs, globs)
except:
print(sys.exc_info()[1])
p = pdb.Pdb(nosigint=True)
p.reset()
p.interaction(None, sys.exc_info()[2])
else:
pdb.Pdb(nosigint=True).run("exec(%r)" % src, globs, globs)
def debug(module, name, pm=False): def debug(module, name, pm=False):
"""Debug a single doctest docstring. """Debug a single doctest docstring.
......
...@@ -200,6 +200,9 @@ Core and Builtins ...@@ -200,6 +200,9 @@ Core and Builtins
Library Library
------- -------
- Issue #12451: doctest.debug_script() doesn't create a temporary file
anymore to avoid encoding issues.
- Issue #12451: pydoc.synopsis() now reads the encoding cookie if available, - Issue #12451: pydoc.synopsis() now reads the encoding cookie if available,
to read the Python script from the right encoding. to read the Python script from the right encoding.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment