From c0747cf537ca474307fc1bac8203e296e1c52834 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Mon, 3 Nov 2008 20:31:38 +0000 Subject: [PATCH] Merged revisions 67028,67040,67044,67046,67052,67065,67070,67077,67082 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r67028 | benjamin.peterson | 2008-10-25 18:27:07 -0500 (Sat, 25 Oct 2008) | 1 line don't use a catch-all ........ r67040 | armin.rigo | 2008-10-28 12:01:21 -0500 (Tue, 28 Oct 2008) | 5 lines Fix one of the tests: it relied on being present in an "output test" in order to actually test what it was supposed to test, i.e. that the code in the __del__ method did not crash. Use instead the new helper test_support.captured_output(). ........ r67044 | amaury.forgeotdarc | 2008-10-29 18:15:57 -0500 (Wed, 29 Oct 2008) | 3 lines Correct error message in io.open(): closefd=True is the only accepted value with a file name. ........ r67046 | thomas.heller | 2008-10-30 15:18:13 -0500 (Thu, 30 Oct 2008) | 2 lines Fixed a modulefinder crash on certain relative imports. ........ r67052 | christian.heimes | 2008-10-30 16:26:15 -0500 (Thu, 30 Oct 2008) | 1 line Issue #4237: io.FileIO() was raising invalid warnings caused by insufficient initialization of PyFileIOObject struct members. ........ r67065 | benjamin.peterson | 2008-10-30 18:59:18 -0500 (Thu, 30 Oct 2008) | 1 line move unprefixed error into .c file ........ r67070 | benjamin.peterson | 2008-10-31 15:41:44 -0500 (Fri, 31 Oct 2008) | 1 line rephrase has_key doc ........ r67077 | benjamin.peterson | 2008-11-03 09:14:51 -0600 (Mon, 03 Nov 2008) | 1 line #4048 make the parser module accept relative imports as valid ........ r67082 | hirokazu.yamamoto | 2008-11-03 12:03:06 -0600 (Mon, 03 Nov 2008) | 2 lines Issue #3774: Fixed an error when create a Tkinter menu item without command and then remove it. Written by Guilherme Polo (gpolo). ........ --- Doc/ACKS.txt | 1 + Include/compile.h | 2 -- Lib/modulefinder.py | 5 ++++- Lib/test/test_descr.py | 10 +++------- Lib/test/test_io.py | 1 + Lib/test/test_modulefinder.py | 16 ++++++++++++++++ Lib/test/test_parser.py | 2 ++ Misc/ACKS | 1 + Modules/_fileio.c | 2 +- Modules/parsermodule.c | 4 ++-- Python/future.c | 2 ++ Tools/scripts/findnocoding.py | 2 +- 12 files changed, 34 insertions(+), 14 deletions(-) diff --git a/Doc/ACKS.txt b/Doc/ACKS.txt index 965358dd847..4537c654788 100644 --- a/Doc/ACKS.txt +++ b/Doc/ACKS.txt @@ -16,6 +16,7 @@ docs@python.org), and we'll be glad to correct the problem. * A. Amoroso * Pehr Anderson * Oliver Andrich + * Heidi Annexstad * Jesús Cea Avión * Daniel Barclay * Chris Barker diff --git a/Include/compile.h b/Include/compile.h index d24cad789a6..d78f8249ec0 100644 --- a/Include/compile.h +++ b/Include/compile.h @@ -32,8 +32,6 @@ PyAPI_FUNC(PyCodeObject *) PyAST_Compile(struct _mod *, const char *, PyCompilerFlags *, PyArena *); PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); -#define ERR_LATE_FUTURE \ -"from __future__ imports must occur at the beginning of the file" #ifdef __cplusplus } diff --git a/Lib/modulefinder.py b/Lib/modulefinder.py index e4184a16a24..989172aa8f6 100644 --- a/Lib/modulefinder.py +++ b/Lib/modulefinder.py @@ -310,7 +310,10 @@ class ModuleFinder: def _add_badmodule(self, name, caller): if name not in self.badmodules: self.badmodules[name] = {} - self.badmodules[name][caller.__name__] = 1 + if caller: + self.badmodules[name][caller.__name__] = 1 + else: + self.badmodules[name]["-"] = 1 def _safe_import_hook(self, name, caller, fromlist, level=-1): # wrapper for self.import_hook() that won't raise ImportError diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index 85df9dca1e2..0e1f7c36971 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -1020,14 +1020,10 @@ order (MRO) for bases """ def __del__(self_): self.assertEqual(self_.a, 1) self.assertEqual(self_.b, 2) - - save_stderr = sys.stderr - sys.stderr = sys.stdout - h = H() - try: + with test_support.captured_output('stderr') as s: + h = H() del h - finally: - sys.stderr = save_stderr + self.assertEqual(s.getvalue(), '') def test_slots_special(self): # Testing __dict__ and __weakref__ in __slots__... diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index ea965d77d56..f28bade6c72 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -1245,6 +1245,7 @@ class MiscIOTest(unittest.TestCase): self.assertRaises(ValueError, io.FileIO, "/some/invalid/name", "rt") self.assertEqual(w.warnings, []) + def test_main(): support.run_unittest(IOTest, BytesIOTest, StringIOTest, BufferedReaderTest, BufferedWriterTest, diff --git a/Lib/test/test_modulefinder.py b/Lib/test/test_modulefinder.py index 85bc6697b12..bee2abb63e1 100644 --- a/Lib/test/test_modulefinder.py +++ b/Lib/test/test_modulefinder.py @@ -190,6 +190,19 @@ a/b/c/e.py a/b/c/f.py """] +relative_import_test_3 = [ + "a.module", + ["a", "a.module"], + ["a.bar"], + [], + """\ +a/__init__.py + def foo(): pass +a/module.py + from . import foo + from . import bar +"""] + def open_file(path): ##print "#", os.path.abspath(path) dirname = os.path.dirname(path) @@ -256,6 +269,9 @@ class ModuleFinderTest(unittest.TestCase): def test_relative_imports_2(self): self._do_test(relative_import_test_2) + def test_relative_imports_3(self): + self._do_test(relative_import_test_3) + def test_main(): distutils.log.set_threshold(distutils.log.WARN) support.run_unittest(ModuleFinderTest) diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py index cec4c70aa20..449005276a9 100644 --- a/Lib/test/test_parser.py +++ b/Lib/test/test_parser.py @@ -1,4 +1,5 @@ import parser +import os import unittest import sys from test import support @@ -172,6 +173,7 @@ class RoundtripLegalSyntaxTestCase(unittest.TestCase): "from sys.path import (dirname, basename as my_basename)") self.check_suite( "from sys.path import (dirname, basename as my_basename,)") + self.check_suite("from .bogus import x") def test_basic_import_statement(self): self.check_suite("import sys") diff --git a/Misc/ACKS b/Misc/ACKS index 0cc5adea1ed..a33b6e9cf2e 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -61,6 +61,7 @@ Eric Beser Steven Bethard Stephen Bevan Ron Bickers +David Binger Dominic Binks Philippe Biondi Stuart Bishop diff --git a/Modules/_fileio.c b/Modules/_fileio.c index 4b3519434ae..a946ea51284 100644 --- a/Modules/_fileio.c +++ b/Modules/_fileio.c @@ -251,7 +251,7 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) self->closefd = 1; if (!closefd) { PyErr_SetString(PyExc_ValueError, - "Cannot use closefd=True with file name"); + "Cannot use closefd=False with file name"); goto error; } diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index 652b07ce80b..58d7dfb29c5 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -1710,10 +1710,10 @@ static int count_from_dots(node *tree) { int i; - for (i = 0; i < NCH(tree); i++) + for (i = 1; i < NCH(tree); i++) if (TYPE(CHILD(tree, i)) != DOT) break; - return i; + return i-1; } /* 'from' ('.'* dotted_name | '.') 'import' ('*' | '(' import_as_names ')' | diff --git a/Python/future.c b/Python/future.c index e775384ec28..1a2db1b8437 100644 --- a/Python/future.c +++ b/Python/future.c @@ -8,6 +8,8 @@ #include "symtable.h" #define UNDEFINED_FUTURE_FEATURE "future feature %.100s is not defined" +#define ERR_LATE_FUTURE \ +"from __future__ imports must occur at the beginning of the file" static int future_check_features(PyFutureFeatures *ff, stmt_ty s, const char *filename) diff --git a/Tools/scripts/findnocoding.py b/Tools/scripts/findnocoding.py index 84dc3e052fa..78fc8efeba3 100755 --- a/Tools/scripts/findnocoding.py +++ b/Tools/scripts/findnocoding.py @@ -12,7 +12,7 @@ import sys, os, re, getopt # our pysource module finds Python source files try: import pysource -except: +except ImportError: # emulate the module with a simple os.walk class pysource: has_python_ext = looks_like_python = can_be_compiled = None