svn+ssh://pythondev@svn.python.org/python/branches/release27-maint
................
r83429 | georg.brandl | 2010-08-01 21:14:56 +0200 (So, 01 Aug 2010) | 37 lines
Merged revisions 83352,83356-83358,83362,83366,83368-83369 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r83352 | georg.brandl | 2010-07-31 20:11:07 +0200 (Sa, 31 Jul 2010) | 1 line
#9440: Remove borderline test case that fails based on unpredictable conditions such as compiler flags.
........
r83356 | georg.brandl | 2010-07-31 21:29:15 +0200 (Sa, 31 Jul 2010) | 1 line
Remove trailing whitespace.
........
r83357 | georg.brandl | 2010-07-31 21:59:55 +0200 (Sa, 31 Jul 2010) | 1 line
#5778: document that sys.version can contain a newline.
........
r83358 | georg.brandl | 2010-07-31 22:05:31 +0200 (Sa, 31 Jul 2010) | 1 line
#9442: do not document a specific format for sys.version; rather refer to version_info and the platform module.
........
r83362 | georg.brandl | 2010-07-31 23:12:15 +0200 (Sa, 31 Jul 2010) | 1 line
#8910: add a file explaining why Lib/test/data is there.
........
r83366 | georg.brandl | 2010-07-31 23:26:40 +0200 (Sa, 31 Jul 2010) | 1 line
There always is a False and True now.
........
r83368 | georg.brandl | 2010-07-31 23:40:15 +0200 (Sa, 31 Jul 2010) | 1 line
#7909: the prefixes \\.\ and \\?\ indicate special Windows paths, do not try to manipulate them. See http://msdn.microsoft.com/en-us/library/
aa365247%28VS.85%29.aspx for details.
........
r83369 | georg.brandl | 2010-07-31 23:41:42 +0200 (Sa, 31 Jul 2010) | 1 line
Fix "Berkeley" name.
........
................
r83436 | georg.brandl | 2010-08-01 21:33:15 +0200 (So, 01 Aug 2010) | 42 lines
Merged revisions 83259,83261,83264-83265,83268-83269,83271-83272,83281 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r83259 | georg.brandl | 2010-07-30 09:03:39 +0200 (Fr, 30 Jul 2010) | 1 line
Clarification.
........
r83261 | georg.brandl | 2010-07-30 09:21:26 +0200 (Fr, 30 Jul 2010) | 1 line
#9230: allow Pdb.checkline() to be called without a current frame, for setting breakpoints before starting debugging.
........
r83264 | georg.brandl | 2010-07-30 10:45:26 +0200 (Fr, 30 Jul 2010) | 1 line
Document the "jump" command in pdb.__doc__, and add a version tag for "until X".
........
r83265 | georg.brandl | 2010-07-30 10:54:49 +0200 (Fr, 30 Jul 2010) | 1 line
#8015: fix crash when entering an empty line for breakpoint commands. Also restore environment properly when an exception occurs during the definition of commands.
........
r83268 | georg.brandl | 2010-07-30 11:23:23 +0200 (Fr, 30 Jul 2010) | 2 lines
Issue #8048: Prevent doctests from failing when sys.displayhook has
been reassigned.
........
r83269 | georg.brandl | 2010-07-30 11:43:00 +0200 (Fr, 30 Jul 2010) | 1 line
#6719: In pdb, do not stop somewhere in the encodings machinery if the source file to be debugged is in a non-builtin encoding.
........
r83271 | georg.brandl | 2010-07-30 11:59:28 +0200 (Fr, 30 Jul 2010) | 1 line
#5727: Restore the ability to use readline when calling into pdb in doctests.
........
r83272 | georg.brandl | 2010-07-30 12:29:19 +0200 (Fr, 30 Jul 2010) | 1 line
#5294: Fix the behavior of pdb "continue" command when called in the top-level debugged frame.
........
r83281 | georg.brandl | 2010-07-30 15:36:43 +0200 (Fr, 30 Jul 2010) | 1 line
Add myself for pdb.
........
................
Retrieve a file or directory listing in ASCII transfer mode. *command*
should be an appropriate ``RETR`` command (see :meth:`retrbinary`) or a
command such as ``LIST``, ``NLST`` or ``MLSD`` (usually just the string
- ``'LIST'``). The *callback* function is called for each line, with the
- trailing CRLF stripped. The default *callback* prints the line to
- ``sys.stdout``.
+ ``'LIST'``). The *callback* function is called for each line with a
+ string argument containing the line with the trailing CRLF stripped.
+ The default *callback* prints the line to ``sys.stdout``.
.. method:: FTP.set_pasv(boolean)
.. data:: version
A string containing the version number of the Python interpreter plus additional
- information on the build number and compiler used. It has a value of the form
- ``'version (#build_number, build_date, build_time) [compiler]'``. The first
- three characters are used to identify the version in the installation
- directories (where appropriate on each platform). An example::
-
- >>> import sys
- >>> sys.version
- '1.5.2 (#0 Apr 13 1999, 10:51:12) [MSC 32 bit (Intel)]'
+ information on the build number and compiler used. This string is displayed
+ when the interactive interpreter is started. Do not extract version information
+ out of it, rather, use :data:`version_info` and the functions provided by the
+ :mod:`platform` module.
.. data:: api_version
# (CT) stopframe may now also be None, see dispatch_call.
# (CT) the former test for None is therefore removed from here.
if frame is self.stopframe:
+ if self.stoplineno == -1:
+ return False
return frame.f_lineno >= self.stoplineno
while frame is not None and frame is not self.stopframe:
if frame is self.botframe:
but only if we are to stop at or just below this level."""
pass
- def _set_stopinfo(self, stopframe, returnframe, stoplineno=-1):
+ def _set_stopinfo(self, stopframe, returnframe, stoplineno=0):
self.stopframe = stopframe
self.returnframe = returnframe
self.quitting = 0
+ # stoplineno >= 0 means: stop at line >= the stoplineno
+ # stoplineno -1 means: don't stop at all
self.stoplineno = stoplineno
# Derived classes and clients can call the following methods
def set_step(self):
"""Stop after one line of code."""
- self._set_stopinfo(None,None)
+ self._set_stopinfo(None, None)
def set_next(self, frame):
"""Stop on the next line in or below the given frame."""
def set_continue(self):
# Don't stop except at breakpoints or when finished
- self._set_stopinfo(self.botframe, None)
+ self._set_stopinfo(self.botframe, None, -1)
if not self.breaks:
# no breakpoints; run without debugger overhead
sys.settrace(None)
self.__out = out
self.__debugger_used = False
pdb.Pdb.__init__(self, stdout=out)
+ # still use input() to get user input
+ self.use_rawinput = 1
def set_trace(self, frame=None):
self.__debugger_used = True
self.save_linecache_getlines = linecache.getlines
linecache.getlines = self.__patched_linecache_getlines
+ # Make sure sys.displayhook just prints the value to stdout
+ save_displayhook = sys.displayhook
+ sys.displayhook = sys.__displayhook__
+
try:
return self.__run(test, compileflags, out)
finally:
sys.stdout = save_stdout
pdb.set_trace = save_set_trace
linecache.getlines = self.save_linecache_getlines
+ sys.displayhook = save_displayhook
if clear_globs:
test.globs.clear()
"""Normalize path, eliminating double slashes, etc."""
# Preserve unicode (if path is unicode)
backslash, dot = (u'\\', u'.') if isinstance(path, unicode) else ('\\', '.')
+ if path.startswith(('\\\\.\\', '\\\\?\\')):
+ # in the case of paths with these prefixes:
+ # \\.\ -> device names
+ # \\?\ -> literal paths
+ # do not do any normalization, but return the path unchanged
+ return path
path = path.replace("/", "\\")
prefix, path = splitdrive(path)
# We need to be careful here. If the prefix is empty, and the path starts
def user_return(self, frame, return_value):
"""This function is called when a return trap is set here."""
+ if self._wait_for_mainpyfile:
+ return
frame.f_locals['__return__'] = return_value
print >>self.stdout, '--Return--'
self.interaction(frame, None)
def user_exception(self, frame, exc_info):
- exc_type, exc_value, exc_traceback = exc_info
"""This function is called if an exception occurs,
but only if we are to stop at or just below this level."""
+ if self._wait_for_mainpyfile:
+ return
+ exc_type, exc_value, exc_traceback = exc_info
frame.f_locals['__exception__'] = exc_type, exc_value
if type(exc_type) == type(''):
exc_type_name = exc_type
return self.handle_command_def(line)
def handle_command_def(self,line):
- """ Handles one command line during command list definition. """
+ """Handles one command line during command list definition."""
cmd, arg, line = self.parseline(line)
+ if not cmd:
+ return
if cmd == 'silent':
self.commands_silent[self.commands_bnum] = True
return # continue to handle other cmd def in the cmd list
self.cmdqueue = []
return 1 # end of cmd list
cmdlist = self.commands[self.commands_bnum]
- if (arg):
+ if arg:
cmdlist.append(cmd+' '+arg)
else:
cmdlist.append(cmd)
prompt_back = self.prompt
self.prompt = '(com) '
self.commands_defining = True
- self.cmdloop()
- self.commands_defining = False
- self.prompt = prompt_back
+ try:
+ self.cmdloop()
+ finally:
+ self.commands_defining = False
+ self.prompt = prompt_back
def do_break(self, arg, temporary = 0):
# break [ ([filename:]lineno | function) [, "condition"] ]
Return `lineno` if it is, 0 if not (e.g. a docstring, comment, blank
line or EOF). Warning: testing is not comprehensive.
"""
- line = linecache.getline(filename, lineno, self.curframe.f_globals)
+ # this method should be callable before starting debugging, so default
+ # to "no globals" if there is no current frame
+ globs = self.curframe.f_globals if hasattr(self, 'curframe') else None
+ line = linecache.getline(filename, lineno, globs)
if not line:
print >>self.stdout, 'End of file'
return 0
# changed by the user from the command line. There is a "restart" command which
# allows explicit specification of command line arguments.
pdb = Pdb()
- while 1:
+ while True:
try:
pdb._runscript(mainpyfile)
if pdb._user_requested_quit:
...
ZeroDivisionError: integer division or modulo by zero
TestResults(failed=1, attempted=1)
+"""
+ def displayhook(): r"""
+Test that changing sys.displayhook doesn't matter for doctest.
+
+ >>> import sys
+ >>> orig_displayhook = sys.displayhook
+ >>> def my_displayhook(x):
+ ... print('hi!')
+ >>> sys.displayhook = my_displayhook
+ >>> def f():
+ ... '''
+ ... >>> 3
+ ... 3
+ ... '''
+ >>> test = doctest.DocTestFinder().find(f)[0]
+ >>> r = doctest.DocTestRunner(verbose=False).run(test)
+ >>> post_displayhook = sys.displayhook
+
+ We need to restore sys.displayhook now, so that we'll be able to test
+ results.
+
+ >>> sys.displayhook = orig_displayhook
+
+ Ok, now we can check that everything is ok.
+
+ >>> r
+ TestResults(failed=0, attempted=1)
+ >>> post_displayhook is my_displayhook
+ True
"""
def optionflags(): r"""
Tests of `DocTestRunner`'s option flag handling.
self.assertTrue(isinstance(ntpath.normpath(path), unicode),
'normpath() returned str instead of unicode')
+ tester("ntpath.normpath('\\\\.\\NUL')", r'\\.\NUL')
+ tester("ntpath.normpath('\\\\?\\D:/XY\\Z')", r'\\?\D:/XY\Z')
+
def test_expandvars(self):
oldenv = os.environ.copy()
try:
(options, args) = self.assertParseOK(["-q"],
{'verbose': 0},
[])
- if hasattr(__builtins__, 'False'):
- self.failUnless(options.verbose is False)
+ self.assertTrue(options.verbose is False)
def test_bool_true(self):
(options, args) = self.assertParseOK(["-v"],
{'verbose': 1},
[])
- if hasattr(__builtins__, 'True'):
- self.failUnless(options.verbose is True)
+ self.assertTrue(options.verbose is True)
def test_bool_flicker_on_and_off(self):
self.assertParseOK(["-qvq", "-q", "-v"],
Library
-------
+- Issue #5294: Fix the behavior of pdb's "continue" command when called
+ in the top-level debugged frame.
+
+- Issue #5727: Restore the ability to use readline when calling into pdb
+ in doctests.
+
+- Issue #6719: In pdb, do not stop somewhere in the encodings machinery
+ if the source file to be debugged is in a non-builtin encoding.
+
+- Issue #8048: Prevent doctests from failing when sys.displayhook has
+ been reassigned.
+
+- Issue #8015: In pdb, do not crash when an empty line is entered as
+ a breakpoint command.
+
+- Issue #7909: Do not touch paths with the special prefixes ``\\.\``
+ or ``\\?\`` in ntpath.normpath().
+
- Issue #5146: Handle UID THREAD command correctly in imaplib.
- Issue #5147: Fix the header generated for cookie files written by
Py_GetVersion(void)
{
static char version[250];
- PyOS_snprintf(version, sizeof(version), "%.80s (%.80s) %.80s",
+ PyOS_snprintf(version, sizeof(version), "%.80s (%.80s) %.80s",
PY_VERSION, Py_GetBuildInfo(), Py_GetCompiler());
return version;
}