]> granicus.if.org Git - python/commitdiff
Merged revisions 63066-63076,63079,63081-63085,63087-63097,63099,63101-63104 via...
authorAlexandre Vassalotti <alexandre@peadrop.com>
Fri, 16 May 2008 00:41:41 +0000 (00:41 +0000)
committerAlexandre Vassalotti <alexandre@peadrop.com>
Fri, 16 May 2008 00:41:41 +0000 (00:41 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r63066 | georg.brandl | 2008-05-11 10:56:04 -0400 (Sun, 11 May 2008) | 2 lines

  #2709 followup: better description of Tk's pros and cons.
........
  r63067 | georg.brandl | 2008-05-11 11:05:13 -0400 (Sun, 11 May 2008) | 2 lines

  #1326: document and test zipimporter.archive and zipimporter.prefix.
........
  r63068 | georg.brandl | 2008-05-11 11:07:39 -0400 (Sun, 11 May 2008) | 2 lines

  #2816: clarify error messages for EOF while scanning strings.
........
  r63069 | georg.brandl | 2008-05-11 11:17:41 -0400 (Sun, 11 May 2008) | 3 lines

  #2787: Flush stdout after writing test name, helpful when running
  hanging or long-running tests. Patch by Adam Olsen.
........
  r63070 | georg.brandl | 2008-05-11 11:20:16 -0400 (Sun, 11 May 2008) | 3 lines

  #2803: fix wrong invocation of heappush in seldom-reached code.
  Thanks to Matt Harden.
........
  r63073 | benjamin.peterson | 2008-05-11 12:38:07 -0400 (Sun, 11 May 2008) | 2 lines

  broaden .bzrignore
........
  r63076 | andrew.kuchling | 2008-05-11 15:15:52 -0400 (Sun, 11 May 2008) | 1 line

  Add message to test assertion
........
  r63083 | andrew.kuchling | 2008-05-11 16:08:33 -0400 (Sun, 11 May 2008) | 1 line

  Try setting HOME env.var to fix test on Win32
........
  r63092 | georg.brandl | 2008-05-11 16:53:55 -0400 (Sun, 11 May 2008) | 2 lines

  #2809 followup: even better split docstring.
........
  r63094 | georg.brandl | 2008-05-11 17:03:42 -0400 (Sun, 11 May 2008) | 4 lines

  - #2250: Exceptions raised during evaluation of names in rlcompleter's
    ``Completer.complete()`` method are now caught and ignored.
........
  r63095 | georg.brandl | 2008-05-11 17:16:37 -0400 (Sun, 11 May 2008) | 2 lines

  Clarify os.strerror()s exception behavior.
........
  r63097 | georg.brandl | 2008-05-11 17:34:10 -0400 (Sun, 11 May 2008) | 2 lines

  #2535: remove duplicated method.
........
  r63104 | alexandre.vassalotti | 2008-05-11 19:04:27 -0400 (Sun, 11 May 2008) | 2 lines

  Moved the Queue module stub in lib-old.
........

17 files changed:
.bzrignore
Doc/library/os.rst
Doc/library/othergui.rst
Doc/library/rlcompleter.rst
Doc/library/tk.rst
Doc/library/zipimport.rst
Lib/distutils/tests/test_dist.py
Lib/lib-tk/Tkinter.py
Lib/rlcompleter.py
Lib/sched.py
Lib/test/test_eof.py
Lib/test/test_zipimport.py
Lib/unittest.py
Misc/NEWS
Modules/zipimport.c
Objects/unicodeobject.c
Python/pythonrun.c

index e694246acff4bc7dfdb02acf2edc7ef7d30ab714..d5d4e77ee3a12ec3aca55db822653d350795d643 100644 (file)
@@ -41,7 +41,5 @@ Modules/Setup.local
 Modules/config.c
 Parser/pgen
 Lib/plat-mac/errors.rsrc.df.rsrc
-Lib/lib2to3/Grammar2.6.0.alpha.1.pickle
-Lib/lib2to3/Grammar2.6.0.alpha.2.pickle
-Lib/lib2to3/PatternGrammar2.6.0.alpha.1.pickle
-Lib/lib2to3/PatternGrammar2.6.0.alpha.2.pickle
+Lib/lib2to3/Grammar*.pickle
+Lib/lib2to3/PatternGrammar*.pickle
index 55e007a6d9cc370b196f59076f822fc78159627c..951474f5b4ae93e8cd5ab4aba4c41464c6319ad7 100644 (file)
@@ -274,7 +274,8 @@ process and user.
 .. function:: strerror(code)
 
    Return the error message corresponding to the error code in *code*.
-   Availability: Unix, Windows.
+   On platforms where :cfunc:`strerror` returns ``NULL`` when given an unknown
+   error number, :exc:`ValueError` is raised.  Availability: Unix, Windows.
 
 
 .. function:: umask(mask)
index ab4efdb3b54af98afb8e6dcfbd6ab300c5028d58..2d4ea3729ad30f76ee1bd84db2e26c2c13e3c1ef 100644 (file)
@@ -69,10 +69,9 @@ also available for Python:
       <http://www.amazon.com/exec/obidos/ASIN/1932394621>`_, by Noel Rappin and
       Robin Dunn.
 
-PyGTK, PyQt, and wxPython, all have a modern look and feel and far more
-widgets and better documentation than Tkinter. In addition,
-there are many other GUI toolkits for Python, both cross-platform, and
-platform-specific. See the `GUI Programming
+PyGTK, PyQt, and wxPython, all have a modern look and feel and more
+widgets than Tkinter. In addition, there are many other GUI toolkits for 
+Python, both cross-platform, and platform-specific. See the `GUI Programming
 <http://wiki.python.org/moin/GuiProgramming>`_ page in the Python Wiki for a
 much more complete list, and also for links to documents where the
 different GUI toolkits are compared.
index cec1e86a63759073a9e4d2e74accf9489970fb3b..01efb03d7605a16eb84a8b88d2a63d3716a14a7e 100644 (file)
@@ -61,5 +61,6 @@ Completer objects have the following method:
    If called for a dotted name, it will try to evaluate anything without obvious
    side-effects (functions will not be evaluated, but it can generate calls to
    :meth:`__getattr__`) up to the last part, and find matches for the rest via the
-   :func:`dir` function.
+   :func:`dir` function.  Any exception raised during the evaluation of the 
+   expression is caught, silenced and :const:`None` is returned.
 
index 8451f6d5e032a4361aff1111a1b230868411ae2d..944687bb02c31f3356858a78987053a2d0b04a20 100644 (file)
@@ -22,11 +22,12 @@ classes.  In addition, the internal module :mod:`_tkinter` provides a threadsafe
 mechanism which allows Python and Tcl to interact.
 
 :mod:`Tkinter`'s chief virtues are that it is fast, and that it usually comes
-bundled with Python. Although it has been used to create some very good
-applications, including IDLE, its standard documentation is weak (but there
-are some good books and tutorials), and it has an outdated look and
-feel. For more modern, better documented, and much more extensive GUI
-libraries, see the :ref:`other-gui-packages` section.
+bundled with Python. Although its standard documentation is weak, good 
+material is available, which includes: references, tutorials, a book and 
+others. :mod:`Tkinter` is also famous for having an outdated look and feel, 
+which has been vastly improved in Tk 8.5. Nevertheless, there are many other 
+GUI libraries that you could be interested in. For more information about 
+alternatives, see the :ref:`other-gui-packages` section.
 
 .. toctree::
    
index 8972c06764269a50ad3461c0808b2365801468eb..82383bf49c73eedec569f831c6d97ec17050cbea 100644 (file)
@@ -59,17 +59,14 @@ zipimporter Objects
 
 .. class:: zipimporter(archivepath)
 
-   Create a new zipimporter instance. *archivepath* must be a path to a ZIP file.
+   Create a new zipimporter instance. *archivepath* must be a path to a ZIP
+   file, or to a specific path within a ZIP file.  For example, an *archivepath*
+   of :file:`foo/bar.zip/lib` will look for modules in the :file:`lib` directory
+   inside the ZIP file :file:`foo/bar.zip` (provided that it exists).
+
    :exc:`ZipImportError` is raised if *archivepath* doesn't point to a valid ZIP
    archive.
 
-   *archivepath* can also contain a path within the ZIP file -- the importer
-   object will then look under that path instead of the ZIP file root.  For
-   example, an *archivepath* of :file:`foo/bar.zip/lib` will look for modules
-   in the :file:`lib` directory inside the ZIP file :file:`foo/bar.zip`
-   (provided that it exists).
-
-
    .. method:: find_module(fullname[, path])
 
       Search for a module specified by *fullname*. *fullname* must be the fully
@@ -114,13 +111,19 @@ zipimporter Objects
 
    .. attribute:: archive
 
-      The file name of the importer's associated ZIP file.
+      The file name of the importer's associated ZIP file, without a possible
+      subpath.
 
 
    .. attribute:: prefix
 
-      The path within the ZIP file where modules are searched; see
-      :class:`zipimporter` for details.
+      The subpath within the ZIP file where modules are searched.  This is the
+      empty string for zipimporter objects which point to the root of the ZIP
+      file.
+
+   The :attr:`archive` and :attr:`prefix` attributes, when combined with a
+   slash, equal the original *archivepath* argument given to the
+   :class:`zipimporter` constructor.
 
 
 .. _zipimport-examples:
index 81459ace539e4ea216e5e8bbaee9474310e6ed67..dd0773508e20800600dc3b6d180d54bacfb7b488 100644 (file)
@@ -213,9 +213,10 @@ class MetadataTestCase(unittest.TestCase):
             # win32-style
             if sys.platform == 'win32':
                 # home drive should be found
-                os.environ['HOMEPATH'] = curdir
+                os.environ['HOME'] = curdir
                 files = dist.find_config_files()
-                self.assert_(user_filename in files)
+                self.assert_(user_filename in files,
+                             '%r not found in %r' % (user_filename, files))
         finally:
             for key, value in old.items():
                 if value is None:
index 23ebe547509ed2c77fbff7198318e28f248adafd..d600f29843b82c6681b70bfc7442f8b88183ea24 100644 (file)
@@ -589,9 +589,6 @@ class Misc:
         status = self.tk.call('grab', 'status', self._w)
         if status == 'none': status = None
         return status
-    def lower(self, belowThis=None):
-        """Lower this widget in the stacking order."""
-        self.tk.call('lower', self._w, belowThis)
     def option_add(self, pattern, value, priority = None):
         """Set a VALUE (second parameter) for an option
         PATTERN (first parameter).
index c605c7d254f0a1ddd4e08f2b89aa09b71b5dbd86..10a53dc9cbf51d53055abfffeb9a85eb4334ebc4 100644 (file)
@@ -121,7 +121,10 @@ class Completer:
         if not m:
             return []
         expr, attr = m.group(1, 3)
-        object = eval(expr, self.namespace)
+        try:
+            object = eval(expr, self.namespace)
+        except Exception:
+            return []
         words = dir(object)
         if hasattr(object,'__class__'):
             words.append('__class__')
index 1c7bfeab37364ee364bf73f092b0a865b5189151..aecdb2a47554aa86599cb353a0aec610a902a2dc 100644 (file)
@@ -117,7 +117,7 @@ class scheduler:
                     action(*argument)
                     delayfunc(0)   # Let other threads run
                 else:
-                    heapq.heappush(event)
+                    heapq.heappush(q, event)
 
     @property
     def queue(self):
index 4284d11d08698a0ceed34c2c33ba73c38b63bf40..91fd845551b66ac9fe9e07712dbb72626721f894 100644 (file)
@@ -6,7 +6,7 @@ from test import test_support
 
 class EOFTestCase(unittest.TestCase):
     def test_EOFC(self):
-        expect = "EOL while scanning single-quoted string (<string>, line 1)"
+        expect = "EOL while scanning string literal (<string>, line 1)"
         try:
             eval("""'this is a test\
             """)
@@ -16,7 +16,8 @@ class EOFTestCase(unittest.TestCase):
             raise test_support.TestFailed
 
     def test_EOFS(self):
-        expect = "EOF while scanning triple-quoted string (<string>, line 1)"
+        expect = ("EOF while scanning triple-quoted string literal "
+                  "(<string>, line 1)")
         try:
             eval("""'''this is a test""")
         except SyntaxError as msg:
index d2758b4d68dfdc1ea3a1f3f33bd2b86e356e2ca7..c7da859e6e33b5d3b33a0e21e21442b0625bbcf7 100644 (file)
@@ -209,6 +209,7 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase):
             z.close()
 
             zi = zipimport.zipimporter(TEMP_ZIP)
+            self.assertEquals(zi.archive, TEMP_ZIP)
             self.assertEquals(zi.is_package(TESTPACK), True)
             zi.load_module(TESTPACK)
 
@@ -229,6 +230,37 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase):
             z.close()
             os.remove(TEMP_ZIP)
 
+    def testZipImporterMethodsInSubDirectory(self):
+        packdir = TESTPACK + os.sep
+        packdir2 = packdir + TESTPACK2 + os.sep
+        files = {packdir2 + "__init__" + pyc_ext: (NOW, test_pyc),
+                 packdir2 + TESTMOD + pyc_ext: (NOW, test_pyc)}
+
+        z = ZipFile(TEMP_ZIP, "w")
+        try:
+            for name, (mtime, data) in files.items():
+                zinfo = ZipInfo(name, time.localtime(mtime))
+                zinfo.compress_type = self.compression
+                z.writestr(zinfo, data)
+            z.close()
+
+            zi = zipimport.zipimporter(TEMP_ZIP + os.sep + packdir)
+            self.assertEquals(zi.archive, TEMP_ZIP)
+            self.assertEquals(zi.prefix, packdir)
+            self.assertEquals(zi.is_package(TESTPACK2), True)
+            zi.load_module(TESTPACK2)
+
+            self.assertEquals(zi.is_package(TESTPACK2 + os.sep + '__init__'), False)
+            self.assertEquals(zi.is_package(TESTPACK2 + os.sep + TESTMOD), False)
+
+            mod_name = TESTPACK2 + os.sep + TESTMOD
+            mod = __import__(module_path_to_dotted_name(mod_name))
+            self.assertEquals(zi.get_source(TESTPACK2), None)
+            self.assertEquals(zi.get_source(mod_name), None)
+        finally:
+            z.close()
+            os.remove(TEMP_ZIP)
+
     def testGetData(self):
         z = ZipFile(TEMP_ZIP, "w")
         z.compression = self.compression
index 742871bd2337e30885f6a3ec6de73fbc48c76ee4..5beeb05bc72fdc79e637df97ee885ba627a3cb9f 100644 (file)
@@ -679,6 +679,7 @@ class _TextTestResult(TestResult):
         if self.showAll:
             self.stream.write(self.getDescription(test))
             self.stream.write(" ... ")
+            self.stream.flush()
 
     def addSuccess(self, test):
         TestResult.addSuccess(self, test)
@@ -686,6 +687,7 @@ class _TextTestResult(TestResult):
             self.stream.writeln("ok")
         elif self.dots:
             self.stream.write('.')
+            self.stream.flush()
 
     def addError(self, test, err):
         TestResult.addError(self, test, err)
@@ -693,6 +695,7 @@ class _TextTestResult(TestResult):
             self.stream.writeln("ERROR")
         elif self.dots:
             self.stream.write('E')
+            self.stream.flush()
 
     def addFailure(self, test, err):
         TestResult.addFailure(self, test, err)
@@ -700,6 +703,7 @@ class _TextTestResult(TestResult):
             self.stream.writeln("FAIL")
         elif self.dots:
             self.stream.write('F')
+            self.stream.flush()
 
     def printErrors(self):
         if self.dots or self.showAll:
index 3208a6924758f70bfb2b601166570a45d672af09..0928e3a6f7ad22515dfcdf9540172db865533e2d 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -28,6 +28,9 @@ Extension Modules
 Library
 -------
 
+- #2250: Exceptions raised during evaluation of names in rlcompleter's
+  ``Completer.complete()`` method are now caught and ignored.
+
 - #2659: Added ``break_on_hyphens`` option to textwrap TextWrapper class.
 
 - Issue #2487: change the semantics of math.ldexp(x, n) when n is too
index 91b8488c553178ebcbfb1ad44b179772b781def5..950364306e9e16bea8e207633ed7d12b5e7df9d5 100644 (file)
@@ -545,8 +545,15 @@ PyDoc_STRVAR(zipimporter_doc,
 "zipimporter(archivepath) -> zipimporter object\n\
 \n\
 Create a new zipimporter instance. 'archivepath' must be a path to\n\
-a zipfile. ZipImportError is raised if 'archivepath' doesn't point to\n\
-a valid Zip archive.");
+a zipfile, or to a specific path inside a zipfile. For example, it can be\n\
+'/tmp/myimport.zip', or '/tmp/myimport.zip/mydirectory', if mydirectory is a\n\
+valid directory inside the archive.\n\
+\n\
+'ZipImportError is raised if 'archivepath' doesn't point to a valid Zip\n\
+archive.\n\
+\n\
+The 'archive' attribute of zipimporter objects contains the name of the\n\
+zipfile targeted.");
 
 #define DEFERRED_ADDRESS(ADDR) 0
 
index 9ea9a886285edfcbb1cbc25d58391d53e68d84e5..8201c7eaef32c7061f295a37f78341873e4eb572 100644 (file)
@@ -7730,8 +7730,8 @@ PyDoc_STRVAR(split__doc__,
 Return a list of the words in S, using sep as the\n\
 delimiter string.  If maxsplit is given, at most maxsplit\n\
 splits are done. If sep is not specified or is None, any\n\
-whitespace string is a separator and leading and trailing\n\
-whitespace is stripped before splitting.");
+whitespace string is a separator and empty strings are\n\
+removed from the result.");
 
 static PyObject*
 unicode_split(PyUnicodeObject *self, PyObject *args)
index 77125188d099487effce6f8fab4142c9ef8731b6..e2bddcb84bec579a033d97178b14d1c3d076af76 100644 (file)
@@ -1690,10 +1690,10 @@ err_input(perrdetail *err)
                msg = "invalid token";
                break;
        case E_EOFS:
-               msg = "EOF while scanning triple-quoted string";
+               msg = "EOF while scanning triple-quoted string literal";
                break;
        case E_EOLS:
-               msg = "EOL while scanning single-quoted string";
+               msg = "EOL while scanning string literal";
                break;
        case E_INTR:
                if (!PyErr_Occurred())