]> granicus.if.org Git - python/commitdiff
Merged revisions 78966,78970,79018,79026-79027,79055,79156,79159,79163-79164,79173...
authorBenjamin Peterson <benjamin@python.org>
Sun, 21 Mar 2010 23:13:07 +0000 (23:13 +0000)
committerBenjamin Peterson <benjamin@python.org>
Sun, 21 Mar 2010 23:13:07 +0000 (23:13 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r78966 | florent.xicluna | 2010-03-14 10:20:59 -0500 (Sun, 14 Mar 2010) | 2 lines

  Do not hardcode Expat version.  It's possible to build Python with --with-system-expat option.
........
  r78970 | benjamin.peterson | 2010-03-14 21:58:24 -0500 (Sun, 14 Mar 2010) | 1 line

  this little exception dance is pointless
........
  r79018 | collin.winter | 2010-03-16 22:04:01 -0500 (Tue, 16 Mar 2010) | 1 line

  Delete unused import.
........
  r79026 | vinay.sajip | 2010-03-17 10:05:57 -0500 (Wed, 17 Mar 2010) | 1 line

  Issue #8162: logging: Clarified docstring and documentation for disable function.
........
  r79027 | collin.winter | 2010-03-17 12:36:16 -0500 (Wed, 17 Mar 2010) | 1 line

  Avoid hardcoding refcounts in tests.
........
  r79055 | benjamin.peterson | 2010-03-18 16:30:48 -0500 (Thu, 18 Mar 2010) | 1 line

  remove installation of deleted test/output dir
........
  r79156 | florent.xicluna | 2010-03-20 17:21:02 -0500 (Sat, 20 Mar 2010) | 2 lines

  Cleanup test_struct using check_warnings.
........
  r79159 | florent.xicluna | 2010-03-20 17:26:42 -0500 (Sat, 20 Mar 2010) | 2 lines

  Cleanup test_tarfile, and use check_warnings.
........
  r79163 | michael.foord | 2010-03-20 19:53:39 -0500 (Sat, 20 Mar 2010) | 1 line

  A faulty load_tests in a test module no longer halts test discovery. A placeholder test, that reports the failure, is created instead.
........
  r79164 | michael.foord | 2010-03-20 19:55:58 -0500 (Sat, 20 Mar 2010) | 1 line

  Change order of arguments in a unittest function.
........
  r79173 | georg.brandl | 2010-03-21 04:09:38 -0500 (Sun, 21 Mar 2010) | 1 line

  Document that GzipFile supports iteration.
........
  r79176 | georg.brandl | 2010-03-21 04:17:41 -0500 (Sun, 21 Mar 2010) | 1 line

  Introduce copy by slicing, used in later chapters.
........
  r79194 | florent.xicluna | 2010-03-21 06:58:11 -0500 (Sun, 21 Mar 2010) | 2 lines

  Use assertRaises and add a specific warning filter.
........
  r79208 | andrew.kuchling | 2010-03-21 13:47:12 -0500 (Sun, 21 Mar 2010) | 1 line

  Add items
........
  r79212 | georg.brandl | 2010-03-21 14:01:38 -0500 (Sun, 21 Mar 2010) | 1 line

  Fix plural.
........

13 files changed:
Doc/library/gzip.rst
Doc/library/logging.rst
Doc/tutorial/introduction.rst
Lib/compileall.py
Lib/ctypes/test/test_internals.py
Lib/logging/__init__.py
Lib/test/test_importhooks.py
Lib/test/test_tarfile.py
Lib/test/test_unittest.py
Lib/test/test_xml_etree.py
Lib/unittest/loader.py
Makefile.pre.in
Misc/Porting

index a8305936157f6b94292f2698fd9bae699449a004..b99ac740fd535ede89f1f2a0e6e6011ead95ea55 100644 (file)
@@ -67,7 +67,7 @@ The module defines the following items:
    writing as *fileobj*, and retrieve the resulting memory buffer using the
    :class:`StringIO` object's :meth:`getvalue` method.
 
-   :class:`GzipFile` supports the :keyword:`with` statement.
+   :class:`GzipFile` supports iteration and the :keyword:`with` statement.
 
    .. versionchanged:: 3.1
       Support for the :keyword:`with` statement was added.
index c5997ef72477ea048dfd6515d1301b20b29b6269..347c72c7b1938bc422552d340298dae108a428e0 100644 (file)
@@ -734,7 +734,11 @@ functions.
 
    Provides an overriding level *lvl* for all loggers which takes precedence over
    the logger's own level. When the need arises to temporarily throttle logging
-   output down across the whole application, this function can be useful.
+   output down across the whole application, this function can be useful. Its
+   effect is to disable all logging calls of severity *lvl* and below, so that
+   if you call it with a value of INFO, then all INFO and DEBUG events would be
+   discarded, whereas those of severity WARNING and above would be processed
+   according to the logger's effective level.
 
 
 .. function:: addLevelName(lvl, levelName)
index 97065afd13aede48e4f81b58126434adb83dbe56..f6339a7491cc733e52a99748acf801f4904dbe87 100644 (file)
@@ -482,6 +482,12 @@ concatenated and so on::
    >>> 3*a[:3] + ['Boo!']
    ['spam', 'eggs', 100, 'spam', 'eggs', 100, 'spam', 'eggs', 100, 'Boo!']
 
+All slice operations return a new list containing the requested elements.  This
+means that the following slice returns a shallow copy of the list *a*::
+
+   >>> a[:]
+   ['spam', 'eggs', 100, 1234]
+
 Unlike strings, which are *immutable*, it is possible to change individual
 elements of a list::
 
index eb5e24b31843745441a4456968e7d1c2ca28867f..ae86292790f0294a865137471edffa25acffaf24 100644 (file)
@@ -97,8 +97,6 @@ def compile_file(fullname, ddir=None, force=0, rx=None, quiet=0):
                 print('Compiling', fullname, '...')
             try:
                 ok = py_compile.compile(fullname, None, dfile, True)
-            except KeyboardInterrupt:
-                raise KeyboardInterrupt
             except py_compile.PyCompileError as err:
                 if quiet:
                     print('*** Error compiling', fullname, '...')
index 03d820ec7ec6f77a856841d7fb7b4d4d9af25abe..1c7e4a80975bb8fd28164933da98187d80de9b4f 100644 (file)
@@ -23,16 +23,16 @@ class ObjectsTestCase(unittest.TestCase):
 
     def test_ints(self):
         i = 42000123
-        rc = grc(i)
+        refcnt = grc(i)
         ci = c_int(i)
-        self.assertEqual(rc, grc(i))
+        self.assertEqual(refcnt, grc(i))
         self.assertEqual(ci._objects, None)
 
     def test_c_char_p(self):
         s = b"Hello, World"
-        rc = grc(s)
+        refcnt = grc(s)
         cs = c_char_p(s)
-        self.assertEqual(rc + 1, grc(s))
+        self.assertEqual(refcnt + 1, grc(s))
         self.assertSame(cs._objects, s)
 
     def test_simple_struct(self):
index 3d7ff82d2f418ba7756c487cf50fdff23310968a..d9cd14301123125bc7b444f59a3b7c279f6303be 100644 (file)
@@ -1555,7 +1555,7 @@ def log(level, msg, *args, **kwargs):
 
 def disable(level):
     """
-    Disable all logging calls less severe than 'level'.
+    Disable all logging calls of severity 'level' and below.
     """
     root.manager.disable = level
 
index 1da30b7c7743c8f5b08eb60c5275db8752b7dfa8..ec6730e9ba3921ba4f6eee0e06e8d94b644f9d3c 100644 (file)
@@ -221,15 +221,9 @@ class ImportHooksTestCase(ImportHooksBaseTestCase):
 
     def testBlocker(self):
         mname = "exceptions"  # an arbitrary harmless builtin module
-        if mname in sys.modules:
-            del sys.modules[mname]
+        support.unload(mname)
         sys.meta_path.append(ImportBlocker(mname))
-        try:
-            __import__(mname)
-        except ImportError:
-            pass
-        else:
-            self.fail("'%s' was not supposed to be importable" % mname)
+        self.assertRaises(ImportError, __import__, mname)
 
     def testImpWrapper(self):
         i = ImpWrapper()
index 89a258346789d9e274caf78e1d3dcf90dfa6057d..ff04ef835197e2017d40c400a53b4a6e06fc277e 100644 (file)
@@ -68,7 +68,7 @@ class UstarReadTest(ReadTest):
                 "fileobj.readlines() failed")
         self.assertTrue(len(lines2) == 114,
                 "fileobj.readlines() failed")
-        self.assertTrue(lines2[83] == \
+        self.assertTrue(lines2[83] ==
                 "I will gladly admit that Python is not the fastest running scripting language.\n",
                 "fileobj.readlines() failed")
 
@@ -706,11 +706,12 @@ class WriteTest(WriteTestBase):
                 name = os.path.join(tempdir, name)
                 open(name, "wb").close()
 
-            def exclude(name):
-                return os.path.isfile(name)
+            exclude = os.path.isfile
 
             tar = tarfile.open(tmpname, self.mode, encoding="iso8859-1")
-            tar.add(tempdir, arcname="empty_dir", exclude=exclude)
+            with support.check_warnings(("use the filter argument",
+                                         DeprecationWarning)):
+                tar.add(tempdir, arcname="empty_dir", exclude=exclude)
             tar.close()
 
             tar = tarfile.open(tmpname, "r")
@@ -888,10 +889,12 @@ class GNUWriteTest(unittest.TestCase):
 
         tar = tarfile.open(tmpname)
         member = tar.next()
-        self.assertFalse(member is None, "unable to read longname member")
-        self.assertTrue(tarinfo.name == member.name and \
-                     tarinfo.linkname == member.linkname, \
-                     "unable to read longname member")
+        self.assertIsNotNone(member,
+                "unable to read longname member")
+        self.assertEqual(tarinfo.name, member.name,
+                "unable to read longname member")
+        self.assertEqual(tarinfo.linkname, member.linkname,
+                "unable to read longname member")
 
     def test_longname_1023(self):
         self._test(("longnam/" * 127) + "longnam")
@@ -993,7 +996,7 @@ class PaxWriteTest(GNUWriteTest):
                 "test": "\xe4\xf6\xfc",
                 "\xe4\xf6\xfc": "test"}
 
-        tar = tarfile.open(tmpname, "w", format=tarfile.PAX_FORMAT, \
+        tar = tarfile.open(tmpname, "w", format=tarfile.PAX_FORMAT,
                 pax_headers=pax_headers)
         tar.addfile(tarfile.TarInfo("test"))
         tar.close()
index f24a92925973100f438c3df95e2e1a486a9109a0..b4716a41cca50df71fb08f2881aa238d61b063dc 100644 (file)
@@ -291,6 +291,21 @@ class Test_TestLoader(TestCase):
         suite = loader.loadTestsFromModule(m, use_load_tests=False)
         self.assertEquals(load_tests_args, [])
 
+    def test_loadTestsFromModule__faulty_load_tests(self):
+        m = types.ModuleType('m')
+
+        def load_tests(loader, tests, pattern):
+            raise TypeError('some failure')
+        m.load_tests = load_tests
+
+        loader = unittest.TestLoader()
+        suite = loader.loadTestsFromModule(m)
+        self.assertIsInstance(suite, unittest.TestSuite)
+        self.assertEqual(suite.countTestCases(), 1)
+        test = list(suite)[0]
+
+        self.assertRaisesRegexp(TypeError, "some failure", test.m)
+
     ################################################################
     ### /Tests for TestLoader.loadTestsFromModule()
 
index 3051540b7884fcc5a95cb68f8d493a8d186e813f..f1990d1e1b51af7dec84f030755aa7d5e20a7d7a 100644 (file)
@@ -597,8 +597,8 @@ def parsefile():
     </ns0:root>
 
     >>> parser = ET.XMLParser()
-    >>> parser.version  # XXX: Upgrade to 2.0.1?
-    'Expat 2.0.0'
+    >>> parser.version  # doctest: +ELLIPSIS
+    'Expat ...'
     >>> parser.feed(open(SIMPLE_XMLFILE).read())
     >>> print(serialize(parser.close()))
     <root>
index bfee3dcc4117b17ab6db972942ae7ef4245b5de3..4e9e152869ff0beadc7f25404080546914b2272a 100644 (file)
@@ -23,12 +23,18 @@ def _make_failed_import_test(name, suiteClass):
         # Python 2.3 compatibility
         # format_exc returns two frames of discover.py as well
         message += '\n%s' % traceback.format_exc()
+    return _make_failed_test('ModuleImportFailure', name, ImportError(message),
+                             suiteClass)
 
-    def testImportFailure(self):
-        raise ImportError(message)
-    attrs = {name: testImportFailure}
-    ModuleImportFailure = type('ModuleImportFailure', (case.TestCase,), attrs)
-    return suiteClass((ModuleImportFailure(name),))
+def _make_failed_load_tests(name, exception, suiteClass):
+    return _make_failed_test('LoadTestsFailure', name, exception, suiteClass)
+
+def _make_failed_test(classname, methodname, exception, suiteClass):
+    def testFailure(self):
+        raise exception
+    attrs = {methodname: testFailure}
+    TestClass = type(classname, (case.TestCase,), attrs)
+    return suiteClass((TestClass(methodname),))
 
 
 class TestLoader(object):
@@ -63,7 +69,11 @@ class TestLoader(object):
         load_tests = getattr(module, 'load_tests', None)
         tests = self.suiteClass(tests)
         if use_load_tests and load_tests is not None:
-            return load_tests(self, tests, None)
+            try:
+                return load_tests(self, tests, None)
+            except Exception as e:
+                return _make_failed_load_tests(module.__name__, e,
+                                               self.suiteClass)
         return tests
 
     def loadTestsFromName(self, name, module=None):
@@ -234,7 +244,11 @@ class TestLoader(object):
                     for test in self._find_tests(full_path, pattern):
                         yield test
                 else:
-                    yield load_tests(self, tests, pattern)
+                    try:
+                        yield load_tests(self, tests, pattern)
+                    except Exception as e:
+                        yield _make_failed_load_tests(package.__name__, e,
+                                                      self.suiteClass)
 
 defaultTestLoader = TestLoader()
 
index ea22f1258ae4629d8c2e1322ddf5901e77792240..380f9141dda7b3fa5bbe29aed44bfd953a2c8d12 100644 (file)
@@ -836,7 +836,7 @@ EXTRAPLATDIR= @EXTRAPLATDIR@
 MACHDEPS=      $(PLATDIR) $(EXTRAPLATDIR)
 XMLLIBSUBDIRS=  xml xml/dom xml/etree xml/parsers xml/sax
 LIBSUBDIRS=    tkinter tkinter/test tkinter/test/test_tkinter \
-                tkinter/test/test_ttk site-packages test test/data \
+                tkinter/test/test_ttk site-packages test \
                test/decimaltestdata test/xmltestdata \
                encodings \
                email email/mime email/test email/test/data \
index ec9cf1f4411d3d5c27c8d793862099bad4f3c174..51f73e63d1e4aa8e2986e11081d3ca03a6bce8a3 100644 (file)
@@ -31,7 +31,7 @@ target platform.  Forget about the posix module for now -- simply take
 it out of the config.c file.
 
 Bang on it until you get a >>> prompt.  (You may have to disable the
-importing of "site.py" by passing the -S options.)
+importing of "site.py" by passing the -S option.)
 
 Then bang on it until it executes very simple Python statements.