Merged revisions 63066-63076,63079,63081-63085,63087-63097,63099,63101-63104 via svnmerge from

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.
........
This commit is contained in:
Alexandre Vassalotti 2008-05-16 00:41:41 +00:00
parent d6bb7c2c40
commit 8ae3e055a5
17 changed files with 92 additions and 41 deletions

View File

@ -41,7 +41,5 @@ Modules/Setup.local
Modules/config.c Modules/config.c
Parser/pgen Parser/pgen
Lib/plat-mac/errors.rsrc.df.rsrc Lib/plat-mac/errors.rsrc.df.rsrc
Lib/lib2to3/Grammar2.6.0.alpha.1.pickle Lib/lib2to3/Grammar*.pickle
Lib/lib2to3/Grammar2.6.0.alpha.2.pickle Lib/lib2to3/PatternGrammar*.pickle
Lib/lib2to3/PatternGrammar2.6.0.alpha.1.pickle
Lib/lib2to3/PatternGrammar2.6.0.alpha.2.pickle

View File

@ -274,7 +274,8 @@ process and user.
.. function:: strerror(code) .. function:: strerror(code)
Return the error message corresponding to the error code in *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) .. function:: umask(mask)

View File

@ -69,10 +69,9 @@ also available for Python:
<http://www.amazon.com/exec/obidos/ASIN/1932394621>`_, by Noel Rappin and <http://www.amazon.com/exec/obidos/ASIN/1932394621>`_, by Noel Rappin and
Robin Dunn. Robin Dunn.
PyGTK, PyQt, and wxPython, all have a modern look and feel and far more PyGTK, PyQt, and wxPython, all have a modern look and feel and more
widgets and better documentation than Tkinter. In addition, widgets than Tkinter. In addition, there are many other GUI toolkits for
there are many other GUI toolkits for Python, both cross-platform, and Python, both cross-platform, and platform-specific. See the `GUI Programming
platform-specific. See the `GUI Programming
<http://wiki.python.org/moin/GuiProgramming>`_ page in the Python Wiki for a <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 much more complete list, and also for links to documents where the
different GUI toolkits are compared. different GUI toolkits are compared.

View 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 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 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 :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.

View File

@ -22,11 +22,12 @@ classes. In addition, the internal module :mod:`_tkinter` provides a threadsafe
mechanism which allows Python and Tcl to interact. mechanism which allows Python and Tcl to interact.
:mod:`Tkinter`'s chief virtues are that it is fast, and that it usually comes :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 bundled with Python. Although its standard documentation is weak, good
applications, including IDLE, its standard documentation is weak (but there material is available, which includes: references, tutorials, a book and
are some good books and tutorials), and it has an outdated look and others. :mod:`Tkinter` is also famous for having an outdated look and feel,
feel. For more modern, better documented, and much more extensive GUI which has been vastly improved in Tk 8.5. Nevertheless, there are many other
libraries, see the :ref:`other-gui-packages` section. GUI libraries that you could be interested in. For more information about
alternatives, see the :ref:`other-gui-packages` section.
.. toctree:: .. toctree::

View File

@ -59,17 +59,14 @@ zipimporter Objects
.. class:: zipimporter(archivepath) .. 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 :exc:`ZipImportError` is raised if *archivepath* doesn't point to a valid ZIP
archive. 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]) .. method:: find_module(fullname[, path])
Search for a module specified by *fullname*. *fullname* must be the fully Search for a module specified by *fullname*. *fullname* must be the fully
@ -114,13 +111,19 @@ zipimporter Objects
.. attribute:: archive .. 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 .. attribute:: prefix
The path within the ZIP file where modules are searched; see The subpath within the ZIP file where modules are searched. This is the
:class:`zipimporter` for details. 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: .. _zipimport-examples:

View File

@ -213,9 +213,10 @@ class MetadataTestCase(unittest.TestCase):
# win32-style # win32-style
if sys.platform == 'win32': if sys.platform == 'win32':
# home drive should be found # home drive should be found
os.environ['HOMEPATH'] = curdir os.environ['HOME'] = curdir
files = dist.find_config_files() 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: finally:
for key, value in old.items(): for key, value in old.items():
if value is None: if value is None:

View File

@ -589,9 +589,6 @@ class Misc:
status = self.tk.call('grab', 'status', self._w) status = self.tk.call('grab', 'status', self._w)
if status == 'none': status = None if status == 'none': status = None
return status 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): def option_add(self, pattern, value, priority = None):
"""Set a VALUE (second parameter) for an option """Set a VALUE (second parameter) for an option
PATTERN (first parameter). PATTERN (first parameter).

View File

@ -121,7 +121,10 @@ class Completer:
if not m: if not m:
return [] return []
expr, attr = m.group(1, 3) expr, attr = m.group(1, 3)
object = eval(expr, self.namespace) try:
object = eval(expr, self.namespace)
except Exception:
return []
words = dir(object) words = dir(object)
if hasattr(object,'__class__'): if hasattr(object,'__class__'):
words.append('__class__') words.append('__class__')

View File

@ -117,7 +117,7 @@ class scheduler:
action(*argument) action(*argument)
delayfunc(0) # Let other threads run delayfunc(0) # Let other threads run
else: else:
heapq.heappush(event) heapq.heappush(q, event)
@property @property
def queue(self): def queue(self):

View File

@ -6,7 +6,7 @@ from test import test_support
class EOFTestCase(unittest.TestCase): class EOFTestCase(unittest.TestCase):
def test_EOFC(self): def test_EOFC(self):
expect = "EOL while scanning single-quoted string (<string>, line 1)" expect = "EOL while scanning string literal (<string>, line 1)"
try: try:
eval("""'this is a test\ eval("""'this is a test\
""") """)
@ -16,7 +16,8 @@ class EOFTestCase(unittest.TestCase):
raise test_support.TestFailed raise test_support.TestFailed
def test_EOFS(self): 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: try:
eval("""'''this is a test""") eval("""'''this is a test""")
except SyntaxError as msg: except SyntaxError as msg:

View File

@ -209,6 +209,7 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase):
z.close() z.close()
zi = zipimport.zipimporter(TEMP_ZIP) zi = zipimport.zipimporter(TEMP_ZIP)
self.assertEquals(zi.archive, TEMP_ZIP)
self.assertEquals(zi.is_package(TESTPACK), True) self.assertEquals(zi.is_package(TESTPACK), True)
zi.load_module(TESTPACK) zi.load_module(TESTPACK)
@ -229,6 +230,37 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase):
z.close() z.close()
os.remove(TEMP_ZIP) 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): def testGetData(self):
z = ZipFile(TEMP_ZIP, "w") z = ZipFile(TEMP_ZIP, "w")
z.compression = self.compression z.compression = self.compression

View File

@ -679,6 +679,7 @@ class _TextTestResult(TestResult):
if self.showAll: if self.showAll:
self.stream.write(self.getDescription(test)) self.stream.write(self.getDescription(test))
self.stream.write(" ... ") self.stream.write(" ... ")
self.stream.flush()
def addSuccess(self, test): def addSuccess(self, test):
TestResult.addSuccess(self, test) TestResult.addSuccess(self, test)
@ -686,6 +687,7 @@ class _TextTestResult(TestResult):
self.stream.writeln("ok") self.stream.writeln("ok")
elif self.dots: elif self.dots:
self.stream.write('.') self.stream.write('.')
self.stream.flush()
def addError(self, test, err): def addError(self, test, err):
TestResult.addError(self, test, err) TestResult.addError(self, test, err)
@ -693,6 +695,7 @@ class _TextTestResult(TestResult):
self.stream.writeln("ERROR") self.stream.writeln("ERROR")
elif self.dots: elif self.dots:
self.stream.write('E') self.stream.write('E')
self.stream.flush()
def addFailure(self, test, err): def addFailure(self, test, err):
TestResult.addFailure(self, test, err) TestResult.addFailure(self, test, err)
@ -700,6 +703,7 @@ class _TextTestResult(TestResult):
self.stream.writeln("FAIL") self.stream.writeln("FAIL")
elif self.dots: elif self.dots:
self.stream.write('F') self.stream.write('F')
self.stream.flush()
def printErrors(self): def printErrors(self):
if self.dots or self.showAll: if self.dots or self.showAll:

View File

@ -28,6 +28,9 @@ Extension Modules
Library 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. - #2659: Added ``break_on_hyphens`` option to textwrap TextWrapper class.
- Issue #2487: change the semantics of math.ldexp(x, n) when n is too - Issue #2487: change the semantics of math.ldexp(x, n) when n is too

View File

@ -545,8 +545,15 @@ PyDoc_STRVAR(zipimporter_doc,
"zipimporter(archivepath) -> zipimporter object\n\ "zipimporter(archivepath) -> zipimporter object\n\
\n\ \n\
Create a new zipimporter instance. 'archivepath' must be a path to\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 zipfile, or to a specific path inside a zipfile. For example, it can be\n\
a valid Zip archive."); '/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 #define DEFERRED_ADDRESS(ADDR) 0

View File

@ -7730,8 +7730,8 @@ PyDoc_STRVAR(split__doc__,
Return a list of the words in S, using sep as the\n\ Return a list of the words in S, using sep as the\n\
delimiter string. If maxsplit is given, at most maxsplit\n\ delimiter string. If maxsplit is given, at most maxsplit\n\
splits are done. If sep is not specified or is None, any\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 string is a separator and empty strings are\n\
whitespace is stripped before splitting."); removed from the result.");
static PyObject* static PyObject*
unicode_split(PyUnicodeObject *self, PyObject *args) unicode_split(PyUnicodeObject *self, PyObject *args)

View File

@ -1690,10 +1690,10 @@ err_input(perrdetail *err)
msg = "invalid token"; msg = "invalid token";
break; break;
case E_EOFS: case E_EOFS:
msg = "EOF while scanning triple-quoted string"; msg = "EOF while scanning triple-quoted string literal";
break; break;
case E_EOLS: case E_EOLS:
msg = "EOL while scanning single-quoted string"; msg = "EOL while scanning string literal";
break; break;
case E_INTR: case E_INTR:
if (!PyErr_Occurred()) if (!PyErr_Occurred())