[Python-checkins] r87772 - python/branches/py3k/Doc/whatsnew/3.2.rst

raymond.hettinger python-checkins at python.org
Wed Jan 5 23:27:49 CET 2011


Author: raymond.hettinger
Date: Wed Jan  5 23:27:49 2011
New Revision: 87772

Log:
RC1 updates to whatsnew

Modified:
   python/branches/py3k/Doc/whatsnew/3.2.rst

Modified: python/branches/py3k/Doc/whatsnew/3.2.rst
==============================================================================
--- python/branches/py3k/Doc/whatsnew/3.2.rst	(original)
+++ python/branches/py3k/Doc/whatsnew/3.2.rst	Wed Jan  5 23:27:49 2011
@@ -394,13 +394,13 @@
 
   (Contributed by Marcin Wojdyr in issue:`1772833`).
 
-* The :func:`hasattr` function used to catch and suppress any Exception.  Now,
-  it only catches :exc:`AttributeError`.  Under the hood, :func:`hasattr` works
-  by calling :func:`getattr` and throwing away the results.  This is necessary
-  because dynamic attribute creation is possible using :meth:`__getattribute__`
-  or :meth:`__getattr__`.  If :func:`hasattr` were to just scan instance and class
-  dictionaries it would miss the dynamic methods and make it difficult to
-  implement proxy objects.
+* The :func:`hasattr` function works by calling :func:`getattr` and detecting
+  whether an exception is raised.  This technique allows it to detect methods
+  created dynamically by :meth:`__getattr__` or :meth:`__getattribute__` which
+  would be absent from the class dictionary.  Formerly, *hasattr* would catch
+  any exception, possibly masking genuine errors in those methods.  Now,
+  *hasattr* has been tightened to only catch :exc:`AttributeError` and let
+  other exceptions pass through.
 
   (Discovered by Yury Selivanov and fixed by Benjamin Peterson; :issue:`9666`.)
 
@@ -682,9 +682,10 @@
             return ((self.lastname.lower(), self.firstname.lower()) <
                     (other.lastname.lower(), other.firstname.lower()))
 
-  (Contributed by Raymond Hettinger.)
+  With the *total_ordering* decorator, the remaining comparison methods
+  are filled-in automatically.
 
-.. XXX clarify what the example does
+  (Contributed by Raymond Hettinger.)
 
 * To aid in porting programs from Python 2, the :func:`~functools.cmp_to_key`
   function converts an old-style comparison function to
@@ -787,12 +788,10 @@
 
 * Also, :class:`~datetime.timedelta` objects can now be multiplied by
   :class:`float` and divided by :class:`float` and :class:`int` objects.
+  And :class:`~datetime.timedelta` objects can now divide one another.
 
-.. XXX Describe added support for dividing a timedelta by another timedelta.
-       See revision 80290 and issue #2706.
-
-  (Contributed by Alexander Belopolsky in :issue:`1289118`, :issue:`5094` and
-  :issue:`6641`.)
+  (Contributed by Alexander Belopolsky in :issue:`1289118`, :issue:`5094`,
+  :issue:`6641`, and :issue:`2706`.)
 
 abc
 ---
@@ -861,7 +860,7 @@
 (Contributed by Michael Foord in :issue:`9110`.)
 
 decimal and fractions
----------------------
+----------------------
 
 Mark Dickinson crafted an elegant and efficient scheme for assuring that
 different numeric datatypes will have the same hash value whenever their actual
@@ -902,6 +901,16 @@
 
 (Contributed by Mark Dickinson and Raymond Hettinger.)
 
+codecs
+------
+
+In an effort to keep codec aliases solely focused on bytes-to-text encodings,
+the *base64*, *bz2*, *hex*, *quopri*, *rot13*, *uu* and *zlib* codecs have been
+removed from the codec aliases. These bytes-to-bytes conversion are still
+accessible via codecs.lookup().
+
+(see :issue:`10807`.)
+
 ftp
 ---
 
@@ -930,7 +939,11 @@
 (Contributed by Tarek Ziadé and Giampaolo Rodolà in :issue:`4972`, and
 by Georg Brandl in :issue:`8046` and :issue:`1286`.)
 
-.. XXX mention os.popen and subprocess.Popen auto-closing of fds
+popen
+-----
+
+The :func:`os.popen` and :func:`subprocess.Popen` functions now support
+the :keyword:`with`-statement` for auto-closing of the file descriptors.
 
 gzip and zipfile
 ----------------
@@ -1077,6 +1090,11 @@
 unittest
 --------
 
+The unittest module has a number of improvements supporting test discovery for
+packages, easier experimentation at the interactive prompt, new testcase
+methods, improved diagnostic messages for test failures, and better method
+names.
+
 * The command-line call, ``python -m unittest`` can now accept file paths
   instead of module names for running specific tests (:issue:`10620`).  The new
   test discovery can find tests within packages, locating any test importable
@@ -1088,14 +1106,24 @@
 
   (Contributed by Michael Foord.)
 
+* Experimentation at the interactive prompt is now easier because the
+  :class:`unittest.case.TestCase` class can now be instantiated without
+  arguments:
+
+  >>> TestCase().assertEqual(pow(2, 3), 8)
+
+  (Contributed by Michael Foord.)
+
 * The :mod:`unittest` module has two new methods,
   :meth:`~unittest.TestCase.assertWarns` and
-  :meth:`~unittest.TestCase.assertWarnsRegex` to check that a given warning type
+  :meth:`~unittest.TestCase.assertWarnsRegex` to verify that a given warning type
   is triggered by the code under test:
 
   >>> with self.assertWarns(DeprecationWarning):
   ...     legacy_function('XYZ')
 
+  (Contributed by Michael Foord and Ezio Melotti.)
+
   Another new method, :meth:`~unittest.TestCase.assertCountEqual` is used to
   compare two iterables to determine if their element counts are equal (whether
   the same elements are present with the same number of occurrences regardless
@@ -1104,23 +1132,28 @@
      def test_anagram(self):
          self.assertCountEqual('algorithm', 'logarithm')
 
-  A principal feature of the unittest module is an effort to produce meaningful
+  (Contributed by Raymond Hettinger.)
+
+* A principal feature of the unittest module is an effort to produce meaningful
   diagnostics when a test fails.  When possible the failure is recorded along
   with a diff of the output.  This is especially helpful for analyzing log files
   of failed test runs. However, since diffs can sometime be voluminous, there is
   a new :attr:`~unittest.TestCase.maxDiff` attribute which sets maximum length of
   diffs.
 
-  In addition the naming in the module has undergone a number of clean-ups.  For
-  example, :meth:`~unittest.TestCase.assertRegex` is the new name for
+* In addition, the method names in the module have undergone a number of clean-ups.
+
+  For example, :meth:`~unittest.TestCase.assertRegex` is the new name for
   :meth:`~unittest.TestCase.assertRegexpMatches` which was misnamed because the
   test uses :func:`re.search`, not :func:`re.match`.  Other methods using
-  regular expressions are now named using short form "Regex" in preference
-  to "Regexp" -- this matches the names used in other unittest implementations,
+  regular expressions are now named using short form "Regex" in preference to
+  "Regexp" -- this matches the names used in other unittest implementations,
   matches Python's old name for the :mod:`re` module, and it has unambiguous
   camel-casing.
 
-  To improve consistency, some of long-standing method aliases are being
+  (Contributed by Raymond Hettinger and implemented by Ezio Melotti.)
+
+* To improve consistency, some of long-standing method aliases are being
   deprecated in favor of the preferred names:
 
    - replace :meth:`assert_` with :meth:`.assertTrue`
@@ -1135,6 +1168,13 @@
 
   (Contributed by Ezio Melotti; :issue:`9424`.)
 
+* The :meth:`~unittest.TestCase.assertDictContainsSubset` method was deprecated
+  because it was mis-implemented with the arguments in the wrong order.  This
+  created hard-to-debug optical illusions where tests like
+  ``TestCase().assertDictContainsSubset({'a':1, 'b':2}, {'a':1})`` would fail.
+
+  (Contributed by Raymond Hettinger.)
+
 random
 ------
 
@@ -1548,12 +1588,22 @@
 No functionality was changed.  This just provides an easier-to-read
 alternate implementation.  (Contributed by Alexander Belopolsky.)
 
+The unmaintained *Demo* directory has been removed.  Some demos were integrated
+into the documentation, some were moved to the *Tools/demo* directory, and
+others were removed altogether.  (Contributed by Georg Brandl.)
+
 
 IDLE
 ====
 
 * The format menu now has an option to clean-up source files by stripping
-  trailing whitespace (:issue:`5150`).
+  trailing whitespace.
+
+  (Contributed by Raymond Hettinger; :issue:`5150`.)
+
+* IDLE on Mac OS X now works with both Carbon AquaTk and Cocoa AquaTk.
+
+  (Contributed by Kevin Walzer, Ned Deily, and Ronald Oussoren; :issue:`6075`.)
 
 
 Build and C API Changes
@@ -1561,6 +1611,9 @@
 
 Changes to Python's build process and to the C API include:
 
+* The *idle*, *pydoc* and *2to3* scripts are now installed with a
+  version-specific suffix on ``make altinstall`` (:issue:`10679`).
+
 * The C functions that access the Unicode Database now accept and return
   characters from the full Unicode range, even on narrow unicode builds
   (Py_UNICODE_TOLOWER, Py_UNICODE_ISDECIMAL, and others).  A visible difference
@@ -1713,6 +1766,13 @@
   (Contributed by Georg Brandl and Mattias Brändström;
   `appspot issue 53094 <http://codereview.appspot.com/53094>`_.)
 
-* :func:`struct.pack` no longer implicitly encodes unicode to UTF-8: use
-  explicit conversion instead and replace unicode literals by bytes literals.
+* :func:`struct.pack` now only allows bytes for the ``s`` string pack code.
+  Formerly, it would accept text arguments and implicitly encode them to bytes
+  using UTF-8.  This was problematic because it made assumptions about the
+  correct encoding and because a variable length encoding can fail when writing
+  to fixed length segment of a structure.
+
+  Code such as ``struct.pack('<6sHHBBB', 'GIF87a', x, y)`` should be rewritten
+  with to use bytes instead of text, ``struct.pack('<6sHHBBB', b'GIF87a', x, y)``.
 
+  (Discovered by David Beazley and fixed by Victor Stinner; :issue:`10783`.


More information about the Python-checkins mailing list