[Python-checkins] r83493 - in python/branches/release26-maint: Doc/library/ftplib.rst Doc/library/sys.rst Lib/bdb.py Lib/doctest.py Lib/ntpath.py Lib/pdb.py Lib/test/test_doctest.py Lib/test/test_ntpath.py Lib/test/test_optparse.py Misc/NEWS Python/getversion.c

georg.brandl python-checkins at python.org
Mon Aug 2 00:10:16 CEST 2010


Author: georg.brandl
Date: Mon Aug  2 00:10:15 2010
New Revision: 83493

Log:
Merged revisions 83429,83436 via svnmerge from 
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.
  ........
................


Modified:
   python/branches/release26-maint/   (props changed)
   python/branches/release26-maint/Doc/library/ftplib.rst
   python/branches/release26-maint/Doc/library/sys.rst
   python/branches/release26-maint/Lib/bdb.py
   python/branches/release26-maint/Lib/doctest.py
   python/branches/release26-maint/Lib/ntpath.py
   python/branches/release26-maint/Lib/pdb.py
   python/branches/release26-maint/Lib/test/test_doctest.py
   python/branches/release26-maint/Lib/test/test_ntpath.py
   python/branches/release26-maint/Lib/test/test_optparse.py
   python/branches/release26-maint/Misc/NEWS
   python/branches/release26-maint/Python/getversion.c

Modified: python/branches/release26-maint/Doc/library/ftplib.rst
==============================================================================
--- python/branches/release26-maint/Doc/library/ftplib.rst	(original)
+++ python/branches/release26-maint/Doc/library/ftplib.rst	Mon Aug  2 00:10:15 2010
@@ -186,9 +186,9 @@
    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)

Modified: python/branches/release26-maint/Doc/library/sys.rst
==============================================================================
--- python/branches/release26-maint/Doc/library/sys.rst	(original)
+++ python/branches/release26-maint/Doc/library/sys.rst	Mon Aug  2 00:10:15 2010
@@ -909,14 +909,10 @@
 .. 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

Modified: python/branches/release26-maint/Lib/bdb.py
==============================================================================
--- python/branches/release26-maint/Lib/bdb.py	(original)
+++ python/branches/release26-maint/Lib/bdb.py	Mon Aug  2 00:10:15 2010
@@ -98,6 +98,8 @@
         # (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:
@@ -155,10 +157,12 @@
         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
@@ -171,7 +175,7 @@
 
     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."""
@@ -198,7 +202,7 @@
 
     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)

Modified: python/branches/release26-maint/Lib/doctest.py
==============================================================================
--- python/branches/release26-maint/Lib/doctest.py	(original)
+++ python/branches/release26-maint/Lib/doctest.py	Mon Aug  2 00:10:15 2010
@@ -335,6 +335,8 @@
         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
@@ -1381,12 +1383,17 @@
         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()
 

Modified: python/branches/release26-maint/Lib/ntpath.py
==============================================================================
--- python/branches/release26-maint/Lib/ntpath.py	(original)
+++ python/branches/release26-maint/Lib/ntpath.py	Mon Aug  2 00:10:15 2010
@@ -399,6 +399,12 @@
     """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

Modified: python/branches/release26-maint/Lib/pdb.py
==============================================================================
--- python/branches/release26-maint/Lib/pdb.py	(original)
+++ python/branches/release26-maint/Lib/pdb.py	Mon Aug  2 00:10:15 2010
@@ -171,14 +171,18 @@
 
     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
@@ -265,8 +269,10 @@
             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
@@ -274,7 +280,7 @@
             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)
@@ -313,9 +319,11 @@
         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"] ]
@@ -451,7 +459,10 @@
         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
@@ -1280,7 +1291,7 @@
     # 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:

Modified: python/branches/release26-maint/Lib/test/test_doctest.py
==============================================================================
--- python/branches/release26-maint/Lib/test/test_doctest.py	(original)
+++ python/branches/release26-maint/Lib/test/test_doctest.py	Mon Aug  2 00:10:15 2010
@@ -908,6 +908,35 @@
         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.
 

Modified: python/branches/release26-maint/Lib/test/test_ntpath.py
==============================================================================
--- python/branches/release26-maint/Lib/test/test_ntpath.py	(original)
+++ python/branches/release26-maint/Lib/test/test_ntpath.py	Mon Aug  2 00:10:15 2010
@@ -128,6 +128,9 @@
             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:

Modified: python/branches/release26-maint/Lib/test/test_optparse.py
==============================================================================
--- python/branches/release26-maint/Lib/test/test_optparse.py	(original)
+++ python/branches/release26-maint/Lib/test/test_optparse.py	Mon Aug  2 00:10:15 2010
@@ -799,15 +799,13 @@
         (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"],

Modified: python/branches/release26-maint/Misc/NEWS
==============================================================================
--- python/branches/release26-maint/Misc/NEWS	(original)
+++ python/branches/release26-maint/Misc/NEWS	Mon Aug  2 00:10:15 2010
@@ -89,6 +89,24 @@
 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

Modified: python/branches/release26-maint/Python/getversion.c
==============================================================================
--- python/branches/release26-maint/Python/getversion.c	(original)
+++ python/branches/release26-maint/Python/getversion.c	Mon Aug  2 00:10:15 2010
@@ -9,7 +9,7 @@
 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;
 }


More information about the Python-checkins mailing list