[Python-checkins] r82809 - in python/branches/release31-maint/Doc/whatsnew: 2.7.rst index.rst

georg.brandl python-checkins at python.org
Sun Jul 11 12:41:45 CEST 2010


Author: georg.brandl
Date: Sun Jul 11 12:41:44 2010
New Revision: 82809

Log:
2.7 came after 3.1, so its whatsnew document will confuse users who expect 2.7 features in 3.1.

Removed:
   python/branches/release31-maint/Doc/whatsnew/2.7.rst
Modified:
   python/branches/release31-maint/Doc/whatsnew/index.rst

Deleted: python/branches/release31-maint/Doc/whatsnew/2.7.rst
==============================================================================
--- python/branches/release31-maint/Doc/whatsnew/2.7.rst	Sun Jul 11 12:41:44 2010
+++ (empty file)
@@ -1,2479 +0,0 @@
-****************************
-  What's New in Python 2.7
-****************************
-
-:Author: A.M. Kuchling (amk at amk.ca)
-:Release: |release|
-:Date: |today|
-
-..  hyperlink all the methods & functions.
-
-.. T_STRING_INPLACE not described in main docs
-.. "Format String Syntax" in string.rst could use many more examples.
-
-.. $Id$
-   Rules for maintenance:
-
-   * Anyone can add text to this document.  Do not spend very much time
-   on the wording of your changes, because your text will probably
-   get rewritten to some degree.
-
-   * The maintainer will go through Misc/NEWS periodically and add
-   changes; it's therefore more important to add your changes to
-   Misc/NEWS than to this file.
-
-   * This is not a complete list of every single change; completeness
-   is the purpose of Misc/NEWS.  Some changes I consider too small
-   or esoteric to include.  If such a change is added to the text,
-   I'll just remove it.  (This is another reason you shouldn't spend
-   too much time on writing your addition.)
-
-   * If you want to draw your new text to the attention of the
-   maintainer, add 'XXX' to the beginning of the paragraph or
-   section.
-
-   * It's OK to just add a fragmentary note about a change.  For
-   example: "XXX Describe the transmogrify() function added to the
-   socket module."  The maintainer will research the change and
-   write the necessary text.
-
-   * You can comment out your additions if you like, but it's not
-   necessary (especially when a final release is some months away).
-
-   * Credit the author of a patch or bugfix.  Just the name is
-   sufficient; the e-mail address isn't necessary.
-
-   * It's helpful to add the bug/patch number in a parenthetical comment.
-
-   XXX Describe the transmogrify() function added to the socket
-   module.
-   (Contributed by P.Y. Developer; :issue:`12345`.)
-
-   This saves the maintainer some effort going through the SVN logs
-   when researching a change.
-
-This article explains the new features in Python 2.7.  The final
-release of 2.7 is currently scheduled for July 2010; the detailed
-schedule is described in :pep:`373`.
-
-Numeric handling has been improved in many ways, for both
-floating-point numbers and for the :class:`Decimal` class.  There are
-some useful additions to the standard library, such as a greatly
-enhanced :mod:`unittest` module, the :mod:`argparse` module for
-parsing command-line options, convenient ordered-dictionary and
-:class:`Counter` classes in the :mod:`collections` module, and many
-other improvements.
-
-Python 2.7 is planned to be the last of the 2.x releases, so we worked
-on making it a good release for the long term.  To help with porting
-to Python 3, several new features from the Python 3.x series have been
-included in 2.7.
-
-This article doesn't attempt to provide a complete specification of
-the new features, but instead provides a convenient overview.  For
-full details, you should refer to the documentation for Python 2.7 at
-http://docs.python.org. If you want to understand the rationale for
-the design and implementation, refer to the PEP for a particular new
-feature or the issue on http://bugs.python.org in which a change was
-discussed.  Whenever possible, "What's New in Python" links to the
-bug/patch item for each change.
-
-.. _whatsnew27-python31:
-
-The Future for Python 2.x
-=========================
-
-Python 2.7 is intended to be the last major release in the 2.x series.
-The Python maintainers are planning to focus their future efforts on
-the Python 3.x series.
-
-This means that 2.7 will remain in place for a long time, running
-production systems that have not been ported to Python 3.x.
-Two consequences of the long-term significance of 2.7 are:
-
-* It's very likely the 2.7 release will have a longer period of
-  maintenance compared to earlier 2.x versions.  Python 2.7 will
-  continue to be maintained while the transition to 3.x continues, and
-  the developers are planning to support Python 2.7 with bug-fix
-  releases beyond the typical two years.
-
-* A policy decision was made to silence warnings only of interest to
-  developers.  :exc:`DeprecationWarning` and its
-  descendants are now ignored unless otherwise requested, preventing
-  users from seeing warnings triggered by an application.  This change
-  was also made in the branch that will become Python 3.2. (Discussed
-  on stdlib-sig and carried out in :issue:`7319`.)
-
-  In previous releases, :exc:`DeprecationWarning` messages were
-  enabled by default, providing Python developers with a clear
-  indication of where their code may break in a future major version
-  of Python.
-
-  However, there are increasingly many users of Python-based
-  applications who are not directly involved in the development of
-  those applications.  :exc:`DeprecationWarning` messages are
-  irrelevant to such users, making them worry about an application
-  that's actually working correctly and burdening application developers
-  with responding to these concerns.
-
-  You can re-enable display of :exc:`DeprecationWarning` messages by
-  running Python with the :option:`-Wdefault` (short form:
-  :option:`-Wd`) switch, or by setting the :envvar:`PYTHONWARNINGS`
-  environment variable to ``"default"`` (or ``"d"``) before running
-  Python.  Python code can also re-enable them
-  by calling ``warnings.simplefilter('default')``.
-
-
-Python 3.1 Features
-=======================
-
-Much as Python 2.6 incorporated features from Python 3.0,
-version 2.7 incorporates some of the new features
-in Python 3.1.  The 2.x series continues to provide tools
-for migrating to the 3.x series.
-
-A partial list of 3.1 features that were backported to 2.7:
-
-* The syntax for set literals (``{1,2,3}`` is a mutable set).
-* Dictionary and set comprehensions (``{ i: i*2 for i in range(3)}``).
-* Multiple context managers in a single :keyword:`with` statement.
-* A new version of the :mod:`io` library, rewritten in C for performance.
-* The ordered-dictionary type described in :ref:`pep-0372`.
-* The new ``","`` format specifier described in :ref:`pep-0378`.
-* The :class:`memoryview` object.
-* A small subset of the :mod:`importlib` module,
-  `described below <#importlib-section>`__.
-* Float-to-string and string-to-float conversions now round their
-  results more correctly, and :func:`repr` of a floating-point
-  number *x* returns a result that's guaranteed to round back to the
-  same number when converted back to a float.
-* The :ctype:`PyCapsule` type, used to provide a C API for extension modules.
-* The :cfunc:`PyLong_AsLongAndOverflow` C API function.
-
-Other new Python3-mode warnings include:
-
-* :func:`operator.isCallable` and :func:`operator.sequenceIncludes`,
-  which are not supported in 3.x, now trigger warnings.
-* The :option:`-3` switch now automatically
-  enables the :option:`-Qwarn` switch that causes warnings
-  about using classic division with integers and long integers.
-
-
-
-.. ========================================================================
-.. Large, PEP-level features and changes should be described here.
-.. ========================================================================
-
-.. _pep-0372:
-
-PEP 372: Adding an Ordered Dictionary to collections
-====================================================
-
-Regular Python dictionaries iterate over key/value pairs in arbitrary order.
-Over the years, a number of authors have written alternative implementations
-that remember the order that the keys were originally inserted.  Based on
-the experiences from those implementations, 2.7 introduces a new
-:class:`~collections.OrderedDict` class in the :mod:`collections` module.
-
-The :class:`~collections.OrderedDict` API provides the same interface as regular
-dictionaries but iterates over keys and values in a guaranteed order
-depending on when a key was first inserted::
-
-    >>> from collections import OrderedDict
-    >>> d = OrderedDict([('first', 1),
-    ...                  ('second', 2),
-    ...                  ('third', 3)])
-    >>> d.items()
-    [('first', 1), ('second', 2), ('third', 3)]
-
-If a new entry overwrites an existing entry, the original insertion
-position is left unchanged::
-
-    >>> d['second'] = 4
-    >>> d.items()
-    [('first', 1), ('second', 4), ('third', 3)]
-
-Deleting an entry and reinserting it will move it to the end::
-
-    >>> del d['second']
-    >>> d['second'] = 5
-    >>> d.items()
-    [('first', 1), ('third', 3), ('second', 5)]
-
-The :meth:`~collections.OrderedDict.popitem` method has an optional *last*
-argument that defaults to True.  If *last* is True, the most recently
-added key is returned and removed; if it's False, the
-oldest key is selected::
-
-    >>> od = OrderedDict([(x,0) for x in range(20)])
-    >>> od.popitem()
-    (19, 0)
-    >>> od.popitem()
-    (18, 0)
-    >>> od.popitem(last=False)
-    (0, 0)
-    >>> od.popitem(last=False)
-    (1, 0)
-
-Comparing two ordered dictionaries checks both the keys and values,
-and requires that the insertion order was the same::
-
-    >>> od1 = OrderedDict([('first', 1),
-    ...                    ('second', 2),
-    ...                    ('third', 3)])
-    >>> od2 = OrderedDict([('third', 3),
-    ...                    ('first', 1),
-    ...                    ('second', 2)])
-    >>> od1 == od2
-    False
-    >>> # Move 'third' key to the end
-    >>> del od2['third']; od2['third'] = 3
-    >>> od1 == od2
-    True
-
-Comparing an :class:`~collections.OrderedDict` with a regular dictionary
-ignores the insertion order and just compares the keys and values.
-
-How does the :class:`~collections.OrderedDict` work?  It maintains a
-doubly-linked list of keys, appending new keys to the list as they're inserted.
-A secondary dictionary maps keys to their corresponding list node, so
-deletion doesn't have to traverse the entire linked list and therefore
-remains O(1).
-
-The standard library now supports use of ordered dictionaries in several
-modules.
-
-* The :mod:`ConfigParser` module uses them by default, meaning that
-  configuration files can now read, modified, and then written back
-  in their original order.
-
-* The :meth:`~collections.somenamedtuple._asdict()` method for
-  :func:`collections.namedtuple` now returns an ordered dictionary with the
-  values appearing in the same order as the underlying tuple indices.
-
-* The :mod:`json` module's :class:`~json.JSONDecoder` class
-  constructor was extended with an *object_pairs_hook* parameter to
-  allow :class:`OrderedDict` instances to be built by the decoder.
-  Support was also added for third-party tools like
-  `PyYAML <http://pyyaml.org/>`_.
-
-.. seealso::
-
-   :pep:`372` - Adding an ordered dictionary to collections
-     PEP written by Armin Ronacher and Raymond Hettinger;
-     implemented by Raymond Hettinger.
-
-.. _pep-0378:
-
-PEP 378: Format Specifier for Thousands Separator
-=================================================
-
-To make program output more readable, it can be useful to add
-separators to large numbers, rendering them as
-18,446,744,073,709,551,616 instead of 18446744073709551616.
-
-The fully general solution for doing this is the :mod:`locale` module,
-which can use different separators ("," in North America, "." in
-Europe) and different grouping sizes, but :mod:`locale` is complicated
-to use and unsuitable for multi-threaded applications where different
-threads are producing output for different locales.
-
-Therefore, a simple comma-grouping mechanism has been added to the
-mini-language used by the :meth:`str.format` method.  When
-formatting a floating-point number, simply include a comma between the
-width and the precision::
-
-   >>> '{:20,.2f}'.format(18446744073709551616.0)
-   '18,446,744,073,709,551,616.00'
-
-When formatting an integer, include the comma after the width:
-
-   >>> '{:20,d}'.format(18446744073709551616)
-   '18,446,744,073,709,551,616'
-
-This mechanism is not adaptable at all; commas are always used as the
-separator and the grouping is always into three-digit groups.  The
-comma-formatting mechanism isn't as general as the :mod:`locale`
-module, but it's easier to use.
-
-.. seealso::
-
-   :pep:`378` - Format Specifier for Thousands Separator
-     PEP written by Raymond Hettinger; implemented by Eric Smith.
-
-PEP 389: The argparse Module for Parsing Command Lines
-======================================================
-
-The :mod:`argparse` module for parsing command-line arguments was
-added as a more powerful replacement for the
-:mod:`optparse` module.
-
-This means Python now supports three different modules for parsing
-command-line arguments: :mod:`getopt`, :mod:`optparse`, and
-:mod:`argparse`.  The :mod:`getopt` module closely resembles the C
-library's :cfunc:`getopt` function, so it remains useful if you're writing a
-Python prototype that will eventually be rewritten in C.
-:mod:`optparse` becomes redundant, but there are no plans to remove it
-because there are many scripts still using it, and there's no
-automated way to update these scripts.  (Making the :mod:`argparse`
-API consistent with :mod:`optparse`'s interface was discussed but
-rejected as too messy and difficult.)
-
-In short, if you're writing a new script and don't need to worry
-about compatibility with earlier versions of Python, use
-:mod:`argparse` instead of :mod:`optparse`.
-
-Here's an example::
-
-    import argparse
-
-    parser = argparse.ArgumentParser(description='Command-line example.')
-
-    # Add optional switches
-    parser.add_argument('-v', action='store_true', dest='is_verbose',
-                        help='produce verbose output')
-    parser.add_argument('-o', action='store', dest='output',
-                        metavar='FILE',
-                        help='direct output to FILE instead of stdout')
-    parser.add_argument('-C', action='store', type=int, dest='context',
-                        metavar='NUM', default=0,
-                        help='display NUM lines of added context')
-
-    # Allow any number of additional arguments.
-    parser.add_argument(nargs='*', action='store', dest='inputs',
-                        help='input filenames (default is stdin)')
-
-    args = parser.parse_args()
-    print args.__dict__
-
-Unless you override it, :option:`-h` and :option:`--help` switches
-are automatically added, and produce neatly formatted output::
-
-    -> ./python.exe argparse-example.py --help
-    usage: argparse-example.py [-h] [-v] [-o FILE] [-C NUM] [inputs [inputs ...]]
-
-    Command-line example.
-
-    positional arguments:
-      inputs      input filenames (default is stdin)
-
-    optional arguments:
-      -h, --help  show this help message and exit
-      -v          produce verbose output
-      -o FILE     direct output to FILE instead of stdout
-      -C NUM      display NUM lines of added context
-
-As with :mod:`optparse`, the command-line switches and arguments
-are returned as an object with attributes named by the *dest* parameters::
-
-    -> ./python.exe argparse-example.py -v
-    {'output': None,
-     'is_verbose': True,
-     'context': 0,
-     'inputs': []}
-
-    -> ./python.exe argparse-example.py -v -o /tmp/output -C 4 file1 file2
-    {'output': '/tmp/output',
-     'is_verbose': True,
-     'context': 4,
-     'inputs': ['file1', 'file2']}
-
-:mod:`argparse` has much fancier validation than :mod:`optparse`; you
-can specify an exact number of arguments as an integer, 0 or more
-arguments by passing ``'*'``, 1 or more by passing ``'+'``, or an
-optional argument with ``'?'``.  A top-level parser can contain
-sub-parsers to define subcommands that have different sets of
-switches, as in ``svn commit``, ``svn checkout``, etc.  You can
-specify an argument's type as :class:`~argparse.FileType`, which will
-automatically open files for you and understands that ``'-'`` means
-standard input or output.
-
-.. seealso::
-
-   `argparse module documentation <http://docs.python.org/dev/library/argparse.html>`__
-
-   `Upgrading optparse code to use argparse <http://docs.python.org/dev/library/argparse.html#upgrading-optparse-code>`__
-     Part of the Python documentation, describing how to convert
-     code that uses :mod:`optparse`.
-
-   :pep:`389` - argparse - New Command Line Parsing Module
-     PEP written and implemented by Steven Bethard.
-
-PEP 391: Dictionary-Based Configuration For Logging
-====================================================
-
-.. XXX not documented in library reference yet; add link here once it's added.
-
-The :mod:`logging` module is very flexible; applications can define
-a tree of logging subsystems, and each logger in this tree can filter
-out certain messages, format them differently, and direct messages to
-a varying number of handlers.
-
-All this flexibility can require a lot of configuration.  You can
-write Python statements to create objects and set their properties,
-but a complex set-up requires verbose but boring code.
-:mod:`logging` also supports a :func:`~logging.config.fileConfig`
-function that parses a file, but the file format doesn't support
-configuring filters, and it's messier to generate programmatically.
-
-Python 2.7 adds a :func:`~logging.config.dictConfig` function that
-uses a dictionary to configure logging.  There are many ways to
-produce a dictionary from different sources: construct one with code;
-parse a file containing JSON; or use a YAML parsing library if one is
-installed.
-
-The following example configures two loggers, the root logger and a
-logger named "network".   Messages sent to the root logger will be
-sent to the system log using the syslog protocol, and messages
-to the "network" logger will be written to a :file:`network.log` file
-that will be rotated once the log reaches 1Mb.
-
-::
-
-    import logging
-    import logging.config
-
-    configdict = {
-     'version': 1,    # Configuration schema in use; must be 1 for now
-     'formatters': {
-         'standard': {
-             'format': ('%(asctime)s %(name)-15s '
-                        '%(levelname)-8s %(message)s')}},
-
-     'handlers': {'netlog': {'backupCount': 10,
-                         'class': 'logging.handlers.RotatingFileHandler',
-                         'filename': '/logs/network.log',
-                         'formatter': 'standard',
-                         'level': 'INFO',
-                         'maxBytes': 1024*1024},
-                  'syslog': {'class': 'logging.handlers.SysLogHandler',
-                             'formatter': 'standard',
-                             'level': 'ERROR'}},
-
-     # Specify all the subordinate loggers
-     'loggers': {
-                 'network': {
-                             'handlers': ['netlog']
-                 }
-     },
-     # Specify properties of the root logger
-     'root': {
-              'handlers': ['syslog']
-     },
-    }
-
-    # Set up configuration
-    logging.config.dictConfig(configdict)
-
-    # As an example, log two error messages
-    logger = logging.getLogger('/')
-    logger.error('Database not found')
-
-    netlogger = logging.getLogger('network')
-    netlogger.error('Connection failed')
-
-Three smaller enhancements to the :mod:`logging` module, all
-implemented by Vinay Sajip, are:
-
-.. rev79293
-
-* The :class:`~logging.handlers.SysLogHandler` class now supports
-  syslogging over TCP.  The constructor has a *socktype* parameter
-  giving the type of socket to use, either :const:`socket.SOCK_DGRAM`
-  for UDP or :const:`socket.SOCK_STREAM` for TCP.  The default
-  protocol remains UDP.
-
-* :class:`Logger` instances gained a :meth:`getChild` method that retrieves a
-  descendant logger using a relative path.  For example,
-  once you retrieve a logger by doing ``log = getLogger('app')``,
-  calling ``log.getChild('network.listen')`` is equivalent to
-  ``getLogger('app.network.listen')``.
-
-* The :class:`LoggerAdapter` class gained a :meth:`isEnabledFor` method
-  that takes a *level* and returns whether the underlying logger would
-  process a message of that level of importance.
-
-.. seealso::
-
-   :pep:`391` - Dictionary-Based Configuration For Logging
-     PEP written and implemented by Vinay Sajip.
-
-PEP 3106: Dictionary Views
-====================================================
-
-The dictionary methods :meth:`keys`, :meth:`values`, and :meth:`items`
-are different in Python 3.x.  They return an object called a :dfn:`view`
-instead of a fully materialized list.
-
-It's not possible to change the return values of :meth:`keys`,
-:meth:`values`, and :meth:`items` in Python 2.7 because too much code
-would break.  Instead the 3.x versions were added under the new names
-:meth:`viewkeys`, :meth:`viewvalues`, and :meth:`viewitems`.
-
-::
-
-    >>> d = dict((i*10, chr(65+i)) for i in range(26))
-    >>> d
-    {0: 'A', 130: 'N', 10: 'B', 140: 'O', 20: ..., 250: 'Z'}
-    >>> d.viewkeys()
-    dict_keys([0, 130, 10, 140, 20, 150, 30, ..., 250])
-
-Views can be iterated over, but the key and item views also behave
-like sets.  The ``&`` operator performs intersection, and ``|``
-performs a union::
-
-    >>> d1 = dict((i*10, chr(65+i)) for i in range(26))
-    >>> d2 = dict((i**.5, i) for i in range(1000))
-    >>> d1.viewkeys() & d2.viewkeys()
-    set([0.0, 10.0, 20.0, 30.0])
-    >>> d1.viewkeys() | range(0, 30)
-    set([0, 1, 130, 3, 4, 5, 6, ..., 120, 250])
-
-The view keeps track of the dictionary and its contents change as the
-dictionary is modified::
-
-    >>> vk = d.viewkeys()
-    >>> vk
-    dict_keys([0, 130, 10, ..., 250])
-    >>> d[260] = '&'
-    >>> vk
-    dict_keys([0, 130, 260, 10, ..., 250])
-
-However, note that you can't add or remove keys while you're iterating
-over the view::
-
-    >>> for k in vk:
-    ...     d[k*2] = k
-    ...
-    Traceback (most recent call last):
-      File "<stdin>", line 1, in <module>
-    RuntimeError: dictionary changed size during iteration
-
-You can use the view methods in Python 2.x code, and the 2to3
-converter will change them to the standard :meth:`keys`,
-:meth:`values`, and :meth:`items` methods.
-
-.. seealso::
-
-   :pep:`3106` - Revamping dict.keys(), .values() and .items()
-     PEP written by Guido van Rossum.
-     Backported to 2.7 by Alexandre Vassalotti; :issue:`1967`.
-
-
-PEP 3137: The memoryview Object
-====================================================
-
-The :class:`memoryview` object provides a view of another object's
-memory content that matches the :class:`bytes` type's interface.
-
-    >>> import string
-    >>> m = memoryview(string.letters)
-    >>> m
-    <memory at 0x37f850>
-    >>> len(m)           # Returns length of underlying object
-    52
-    >>> m[0], m[25], m[26]   # Indexing returns one byte
-    ('a', 'z', 'A')
-    >>> m2 = m[0:26]         # Slicing returns another memoryview
-    >>> m2
-    <memory at 0x37f080>
-
-The content of the view can be converted to a string of bytes or
-a list of integers:
-
-    >>> m2.tobytes()
-    'abcdefghijklmnopqrstuvwxyz'
-    >>> m2.tolist()
-    [97, 98, 99, 100, 101, 102, 103, ... 121, 122]
-    >>>
-
-:class:`memoryview` objects allow modifying the underlying object if
-it's a mutable object.
-
-    >>> m2[0] = 75
-    Traceback (most recent call last):
-      File "<stdin>", line 1, in <module>
-    TypeError: cannot modify read-only memory
-    >>> b = bytearray(string.letters)  # Creating a mutable object
-    >>> b
-    bytearray(b'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
-    >>> mb = memoryview(b)
-    >>> mb[0] = '*'         # Assign to view, changing the bytearray.
-    >>> b[0:5]              # The bytearray has been changed.
-    bytearray(b'*bcde')
-    >>>
-
-.. seealso::
-
-   :pep:`3137` - Immutable Bytes and Mutable Buffer
-     PEP written by Guido van Rossum.
-     Implemented by Travis Oliphant, Antoine Pitrou and others.
-     Backported to 2.7 by Antoine Pitrou; :issue:`2396`.
-
-
-
-Other Language Changes
-======================
-
-Some smaller changes made to the core Python language are:
-
-* The syntax for set literals has been backported from Python 3.x.
-  Curly brackets are used to surround the contents of the resulting
-  mutable set; set literals are
-  distinguished from dictionaries by not containing colons and values.
-  ``{}`` continues to represent an empty dictionary; use
-  ``set()`` for an empty set.
-
-    >>> {1,2,3,4,5}
-    set([1, 2, 3, 4, 5])
-    >>> set() # empty set
-    set([])
-    >>> {}    # empty dict
-    {}
-
-  Backported by Alexandre Vassalotti; :issue:`2335`.
-
-* Dictionary and set comprehensions are another feature backported from
-  3.x, generalizing list/generator comprehensions to use
-  the literal syntax for sets and dictionaries.
-
-    >>> {x: x*x for x in range(6)}
-    {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
-    >>> {('a'*x) for x in range(6)}
-    set(['', 'a', 'aa', 'aaa', 'aaaa', 'aaaaa'])
-
-  Backported by Alexandre Vassalotti; :issue:`2333`.
-
-* The :keyword:`with` statement can now use multiple context managers
-  in one statement.  Context managers are processed from left to right
-  and each one is treated as beginning a new :keyword:`with` statement.
-  This means that::
-
-   with A() as a, B() as b:
-       ... suite of statements ...
-
-  is equivalent to::
-
-   with A() as a:
-       with B() as b:
-           ... suite of statements ...
-
-  The :func:`contextlib.nested` function provides a very similar
-  function, so it's no longer necessary and has been deprecated.
-
-  (Proposed in http://codereview.appspot.com/53094; implemented by
-  Georg Brandl.)
-
-* Conversions between floating-point numbers and strings are
-  now correctly rounded on most platforms.  These conversions occur
-  in many different places: :func:`str` on
-  floats and complex numbers; the :class:`float` and :class:`complex`
-  constructors;
-  numeric formatting; serializing and
-  deserializing floats and complex numbers using the
-  :mod:`marshal`, :mod:`pickle`
-  and :mod:`json` modules;
-  parsing of float and imaginary literals in Python code;
-  and :class:`~decimal.Decimal`-to-float conversion.
-
-  Related to this, the :func:`repr` of a floating-point number *x*
-  now returns a result based on the shortest decimal string that's
-  guaranteed to round back to *x* under correct rounding (with
-  round-half-to-even rounding mode).  Previously it gave a string
-  based on rounding x to 17 decimal digits.
-
-  .. maybe add an example?
-
-  The rounding library responsible for this improvement works on
-  Windows and on Unix platforms using the gcc, icc, or suncc
-  compilers.  There may be a small number of platforms where correct
-  operation of this code cannot be guaranteed, so the code is not
-  used on such systems.  You can find out which code is being used
-  by checking :data:`sys.float_repr_style`,  which will be ``short``
-  if the new code is in use and ``legacy`` if it isn't.
-
-  Implemented by Eric Smith and Mark Dickinson, using David Gay's
-  :file:`dtoa.c` library; :issue:`7117`.
-
-* Conversions from long integers and regular integers to floating
-  point now round differently, returning the floating-point number
-  closest to the number.  This doesn't matter for small integers that
-  can be converted exactly, but for large numbers that will
-  unavoidably lose precision, Python 2.7 now approximates more
-  closely.  For example, Python 2.6 computed the following::
-
-    >>> n = 295147905179352891391
-    >>> float(n)
-    2.9514790517935283e+20
-    >>> n - long(float(n))
-    65535L
-
-  Python 2.7's floating-point result is larger, but much closer to the
-  true value::
-
-    >>> n = 295147905179352891391
-    >>> float(n)
-    2.9514790517935289e+20
-    >>> n - long(float(n))
-    -1L
-
-  (Implemented by Mark Dickinson; :issue:`3166`.)
-
-  Integer division is also more accurate in its rounding behaviours.  (Also
-  implemented by Mark Dickinson; :issue:`1811`.)
-
-* Implicit coercion for complex numbers has been removed; the interpreter
-  will no longer ever attempt to call a :meth:`__coerce__` method on complex
-  objects.  (Removed by Meador Inge and Mark Dickinson; :issue:`5211`.)
-
-* The :meth:`str.format` method now supports automatic numbering of the replacement
-  fields.  This makes using :meth:`str.format` more closely resemble using
-  ``%s`` formatting::
-
-    >>> '{}:{}:{}'.format(2009, 04, 'Sunday')
-    '2009:4:Sunday'
-    >>> '{}:{}:{day}'.format(2009, 4, day='Sunday')
-    '2009:4:Sunday'
-
-  The auto-numbering takes the fields from left to right, so the first ``{...}``
-  specifier will use the first argument to :meth:`str.format`, the next
-  specifier will use the next argument, and so on.  You can't mix auto-numbering
-  and explicit numbering -- either number all of your specifier fields or none
-  of them -- but you can mix auto-numbering and named fields, as in the second
-  example above.  (Contributed by Eric Smith; :issue:`5237`.)
-
-  Complex numbers now correctly support usage with :func:`format`,
-  and default to being right-aligned.
-  Specifying a precision or comma-separation applies to both the real
-  and imaginary parts of the number, but a specified field width and
-  alignment is applied to the whole of the resulting ``1.5+3j``
-  output.  (Contributed by Eric Smith; :issue:`1588` and :issue:`7988`.)
-
-  The 'F' format code now always formats its output using uppercase characters,
-  so it will now produce 'INF' and 'NAN'.
-  (Contributed by Eric Smith; :issue:`3382`.)
-
-  A low-level change: the :meth:`object.__format__` method now triggers
-  a :exc:`PendingDeprecationWarning` if it's passed a format string,
-  because the :meth:`__format__` method for :class:`object` converts
-  the object to a string representation and formats that.  Previously
-  the method silently applied the format string to the string
-  representation, but that could hide mistakes in Python code.  If
-  you're supplying formatting information such as an alignment or
-  precision, presumably you're expecting the formatting to be applied
-  in some object-specific way.  (Fixed by Eric Smith; :issue:`7994`.)
-
-* The :func:`int` and :func:`long` types gained a ``bit_length``
-  method that returns the number of bits necessary to represent
-  its argument in binary::
-
-      >>> n = 37
-      >>> bin(n)
-      '0b100101'
-      >>> n.bit_length()
-      6
-      >>> n = 2**123-1
-      >>> n.bit_length()
-      123
-      >>> (n+1).bit_length()
-      124
-
-  (Contributed by Fredrik Johansson and Victor Stinner; :issue:`3439`.)
-
-* The :keyword:`import` statement will no longer try a relative import
-  if an absolute import (e.g. ``from .os import sep``) fails.  This
-  fixes a bug, but could possibly break certain :keyword:`import`
-  statements that were only working by accident.  (Fixed by Meador Inge;
-  :issue:`7902`.)
-
-* It's now possible for a subclass of the built-in :class:`unicode` type
-  to override the :meth:`__unicode__` method.  (Implemented by
-  Victor Stinner; :issue:`1583863`.)
-
-* The :class:`bytearray` type's :meth:`~bytearray.translate` method now accepts
-  ``None`` as its first argument.  (Fixed by Georg Brandl;
-  :issue:`4759`.)
-
-  .. bytearray doesn't seem to be documented
-
-* When using ``@classmethod`` and ``@staticmethod`` to wrap
-  methods as class or static methods, the wrapper object now
-  exposes the wrapped function as their :attr:`__func__` attribute.
-  (Contributed by Amaury Forgeot d'Arc, after a suggestion by
-  George Sakkis; :issue:`5982`.)
-
-* When a restricted set of attributes were set using ``__slots__``,
-  deleting an unset attribute would not raise :exc:`AttributeError`
-  as you would expect.  Fixed by Benjamin Peterson; :issue:`7604`.)
-
-* Two new encodings are now supported: "cp720", used primarily for
-  Arabic text; and "cp858", a variant of CP 850 that adds the euro
-  symbol.  (CP720 contributed by Alexander Belchenko and Amaury
-  Forgeot d'Arc in :issue:`1616979`; CP858 contributed by Tim Hatch in
-  :issue:`8016`.)
-
-* The :class:`file` object will now set the :attr:`filename` attribute
-  on the :exc:`IOError` exception when trying to open a directory
-  on POSIX platforms (noted by Jan Kaliszewski; :issue:`4764`), and
-  now explicitly checks for and forbids writing to read-only file objects
-  instead of trusting the C library to catch and report the error
-  (fixed by Stefan Krah; :issue:`5677`).
-
-* The Python tokenizer now translates line endings itself, so the
-  :func:`compile` built-in function now accepts code using any
-  line-ending convention.  Additionally, it no longer requires that the
-  code end in a newline.
-
-* Extra parentheses in function definitions are illegal in Python 3.x,
-  meaning that you get a syntax error from ``def f((x)): pass``.  In
-  Python3-warning mode, Python 2.7 will now warn about this odd usage.
-  (Noted by James Lingard; :issue:`7362`.)
-
-* It's now possible to create weak references to old-style class
-  objects.  New-style classes were always weak-referenceable.  (Fixed
-  by Antoine Pitrou; :issue:`8268`.)
-
-* When a module object is garbage-collected, the module's dictionary is
-  now only cleared if no one else is holding a reference to the
-  dictionary (:issue:`7140`).
-
-.. ======================================================================
-
-.. _new-27-interpreter:
-
-Interpreter Changes
--------------------------------
-
-A new environment variable, :envvar:`PYTHONWARNINGS`,
-allows controlling warnings.  It should be set to a string
-containing warning settings, equivalent to those
-used with the :option:`-W` switch, separated by commas.
-(Contributed by Brian Curtin; :issue:`7301`.)
-
-For example, the following setting will print warnings every time
-they occur, but turn warnings from the :mod:`Cookie` module into an
-error.  (The exact syntax for setting an environment variable varies
-across operating systems and shells.)
-
-::
-
-  export PYTHONWARNINGS=all,error:::Cookie:0
-
-.. ======================================================================
-
-
-Optimizations
--------------
-
-Several performance enhancements have been added:
-
-.. * A new :program:`configure` option, :option:`--with-computed-gotos`,
-   compiles the main bytecode interpreter loop using a new dispatch
-   mechanism that gives speedups of up to 20%, depending on the system
-   and benchmark.  The new mechanism is only supported on certain
-   compilers, such as gcc, SunPro, and icc.
-
-* A new opcode was added to perform the initial setup for
-  :keyword:`with` statements, looking up the :meth:`__enter__` and
-  :meth:`__exit__` methods.  (Contributed by Benjamin Peterson.)
-
-* The garbage collector now performs better for one common usage
-  pattern: when many objects are being allocated without deallocating
-  any of them.  This would previously take quadratic
-  time for garbage collection, but now the number of full garbage collections
-  is reduced as the number of objects on the heap grows.
-  The new logic only performs a full garbage collection pass when
-  the middle generation has been collected 10 times and when the
-  number of survivor objects from the middle generation exceeds 10% of
-  the number of objects in the oldest generation.  (Suggested by Martin
-  von Löwis and implemented by Antoine Pitrou; :issue:`4074`.)
-
-* The garbage collector tries to avoid tracking simple containers
-  which can't be part of a cycle. In Python 2.7, this is now true for
-  tuples and dicts containing atomic types (such as ints, strings,
-  etc.). Transitively, a dict containing tuples of atomic types won't
-  be tracked either. This helps reduce the cost of each
-  garbage collection by decreasing the number of objects to be
-  considered and traversed by the collector.
-  (Contributed by Antoine Pitrou; :issue:`4688`.)
-
-* Long integers are now stored internally either in base 2**15 or in base
-  2**30, the base being determined at build time.  Previously, they
-  were always stored in base 2**15.  Using base 2**30 gives
-  significant performance improvements on 64-bit machines, but
-  benchmark results on 32-bit machines have been mixed.  Therefore,
-  the default is to use base 2**30 on 64-bit machines and base 2**15
-  on 32-bit machines; on Unix, there's a new configure option
-  :option:`--enable-big-digits` that can be used to override this default.
-
-  Apart from the performance improvements this change should be
-  invisible to end users, with one exception: for testing and
-  debugging purposes there's a new structseq :data:`sys.long_info` that
-  provides information about the internal format, giving the number of
-  bits per digit and the size in bytes of the C type used to store
-  each digit::
-
-     >>> import sys
-     >>> sys.long_info
-     sys.long_info(bits_per_digit=30, sizeof_digit=4)
-
-  (Contributed by Mark Dickinson; :issue:`4258`.)
-
-  Another set of changes made long objects a few bytes smaller: 2 bytes
-  smaller on 32-bit systems and 6 bytes on 64-bit.
-  (Contributed by Mark Dickinson; :issue:`5260`.)
-
-* The division algorithm for long integers has been made faster
-  by tightening the inner loop, doing shifts instead of multiplications,
-  and fixing an unnecessary extra iteration.
-  Various benchmarks show speedups of between 50% and 150% for long
-  integer divisions and modulo operations.
-  (Contributed by Mark Dickinson; :issue:`5512`.)
-  Bitwise operations are also significantly faster (initial patch by
-  Gregory Smith; :issue:`1087418`).
-
-* The implementation of ``%`` checks for the left-side operand being
-  a Python string and special-cases it; this results in a 1-3%
-  performance increase for applications that frequently use ``%``
-  with strings, such as templating libraries.
-  (Implemented by Collin Winter; :issue:`5176`.)
-
-* List comprehensions with an ``if`` condition are compiled into
-  faster bytecode.  (Patch by Antoine Pitrou, back-ported to 2.7
-  by Jeffrey Yasskin; :issue:`4715`.)
-
-* Converting an integer or long integer to a decimal string was made
-  faster by special-casing base 10 instead of using a generalized
-  conversion function that supports arbitrary bases.
-  (Patch by Gawain Bolton; :issue:`6713`.)
-
-* The :meth:`split`, :meth:`replace`, :meth:`rindex`,
-  :meth:`rpartition`, and :meth:`rsplit` methods of string-like types
-  (strings, Unicode strings, and :class:`bytearray` objects) now use a
-  fast reverse-search algorithm instead of a character-by-character
-  scan.  This is sometimes faster by a factor of 10.  (Added by
-  Florent Xicluna; :issue:`7462` and :issue:`7622`.)
-
-* The :mod:`pickle` and :mod:`cPickle` modules now automatically
-  intern the strings used for attribute names, reducing memory usage
-  of the objects resulting from unpickling.  (Contributed by Jake
-  McGuire; :issue:`5084`.)
-
-* The :mod:`cPickle` module now special-cases dictionaries,
-  nearly halving the time required to pickle them.
-  (Contributed by Collin Winter; :issue:`5670`.)
-
-.. ======================================================================
-
-New and Improved Modules
-========================
-
-As in every release, Python's standard library received a number of
-enhancements and bug fixes.  Here's a partial list of the most notable
-changes, sorted alphabetically by module name. Consult the
-:file:`Misc/NEWS` file in the source tree for a more complete list of
-changes, or look through the Subversion logs for all the details.
-
-* The :mod:`bdb` module's base debugging class :class:`~bdb.Bdb`
-  gained a feature for skipping modules.  The constructor
-  now takes an iterable containing glob-style patterns such as
-  ``django.*``; the debugger will not step into stack frames
-  from a module that matches one of these patterns.
-  (Contributed by Maru Newby after a suggestion by
-  Senthil Kumaran; :issue:`5142`.)
-
-* The :mod:`binascii` module now supports the buffer API, so it can be
-  used with :class:`memoryview` instances and other similar buffer objects.
-  (Backported from 3.x by Florent Xicluna; :issue:`7703`.)
-
-* Updated module: the :mod:`bsddb` module has been updated from 4.7.2devel9
-  to version 4.8.4 of
-  `the pybsddb package <http://www.jcea.es/programacion/pybsddb.htm>`__.
-  The new version features better Python 3.x compatibility, various bug fixes,
-  and adds several new BerkeleyDB flags and methods.
-  (Updated by Jesús Cea Avión; :issue:`8156`.  The pybsddb
-  changelog can be read at http://hg.jcea.es/pybsddb/file/tip/ChangeLog.)
-
-* The :mod:`bz2` module's :class:`~bz2.BZ2File` now supports the context
-  management protocol, so you can write ``with bz2.BZ2File(...) as f:``.
-  (Contributed by Hagen Fürstenau; :issue:`3860`.)
-
-* New class: the :class:`~collections.Counter` class in the :mod:`collections`
-  module is useful for tallying data.  :class:`~collections.Counter` instances
-  behave mostly like dictionaries but return zero for missing keys instead of
-  raising a :exc:`KeyError`:
-
-  .. doctest::
-     :options: +NORMALIZE_WHITESPACE
-
-     >>> from collections import Counter
-     >>> c = Counter()
-     >>> for letter in 'here is a sample of english text':
-     ...   c[letter] += 1
-     ...
-     >>> c
-     Counter({' ': 6, 'e': 5, 's': 3, 'a': 2, 'i': 2, 'h': 2,
-     'l': 2, 't': 2, 'g': 1, 'f': 1, 'm': 1, 'o': 1, 'n': 1,
-     'p': 1, 'r': 1, 'x': 1})
-     >>> c['e']
-     5
-     >>> c['z']
-     0
-
-  There are three additional :class:`~collections.Counter` methods.
-  :meth:`~collections.Counter.most_common` returns the N most common
-  elements and their counts.  :meth:`~collections.Counter.elements`
-  returns an iterator over the contained elements, repeating each
-  element as many times as its count.
-  :meth:`~collections.Counter.subtract` takes an iterable and
-  subtracts one for each element instead of adding; if the argument is
-  a dictionary or another :class:`Counter`, the counts are
-  subtracted. ::
-
-    >>> c.most_common(5)
-    [(' ', 6), ('e', 5), ('s', 3), ('a', 2), ('i', 2)]
-    >>> c.elements() ->
-       'a', 'a', ' ', ' ', ' ', ' ', ' ', ' ',
-       'e', 'e', 'e', 'e', 'e', 'g', 'f', 'i', 'i',
-       'h', 'h', 'm', 'l', 'l', 'o', 'n', 'p', 's',
-       's', 's', 'r', 't', 't', 'x'
-    >>> c['e']
-    5
-    >>> c.subtract('very heavy on the letter e')
-    >>> c['e']    # Count is now lower
-    -1
-
-  Contributed by Raymond Hettinger; :issue:`1696199`.
-
-  .. revision 79660
-
-  New class: :class:`~collections.OrderedDict` is described in the earlier
-  section :ref:`pep-0372`.
-
-  New method: The :class:`~collections.deque` data type now has a
-  :meth:`~collections.deque.count` method that returns the number of
-  contained elements equal to the supplied argument *x*, and a
-  :meth:`~collections.deque.reverse` method that reverses the elements
-  of the deque in-place.  :class:`deque` also exposes its maximum
-  length as the read-only :attr:`~collections.deque.maxlen` attribute.
-  (Both features added by Raymond Hettinger.)
-
-  The :class:`~collections.namedtuple` class now has an optional *rename* parameter.
-  If *rename* is true, field names that are invalid because they've
-  been repeated or aren't legal Python identifiers will be
-  renamed to legal names that are derived from the field's
-  position within the list of fields:
-
-     >>> from collections import namedtuple
-     >>> T = namedtuple('T', ['field1', '$illegal', 'for', 'field2'], rename=True)
-     >>> T._fields
-     ('field1', '_1', '_2', 'field2')
-
-  (Added by Raymond Hettinger; :issue:`1818`.)
-
-  Finally, the :class:`~collections.Mapping` abstract base class now
-  returns :const:`NotImplemented` if a mapping is compared to
-  another type that isn't a :class:`Mapping`.
-  (Fixed by Daniel Stutzbach; :issue:`8729`.)
-
-* Constructors for the parsing classes in the :mod:`ConfigParser` module now
-  take a *allow_no_value* parameter, defaulting to false; if true,
-  options without values will be allowed.  For example::
-
-    >>> import ConfigParser, StringIO
-    >>> sample_config = """
-    ... [mysqld]
-    ... user = mysql
-    ... pid-file = /var/run/mysqld/mysqld.pid
-    ... skip-bdb
-    ... """
-    >>> config = ConfigParser.RawConfigParser(allow_no_value=True)
-    >>> config.readfp(StringIO.StringIO(sample_config))
-    >>> config.get('mysqld', 'user')
-    'mysql'
-    >>> print config.get('mysqld', 'skip-bdb')
-    None
-    >>> print config.get('mysqld', 'unknown')
-    Traceback (most recent call last):
-      ...
-    NoOptionError: No option 'unknown' in section: 'mysqld'
-
-  (Contributed by Mats Kindahl; :issue:`7005`.)
-
-* Deprecated function: :func:`contextlib.nested`, which allows
-  handling more than one context manager with a single :keyword:`with`
-  statement, has been deprecated, because the :keyword:`with` statement
-  now supports multiple context managers.
-
-* The :mod:`cookielib` module now ignores cookies that have an invalid
-  version field, one that doesn't contain an integer value.  (Fixed by
-  John J. Lee; :issue:`3924`.)
-
-* The :mod:`copy` module's :func:`~copy.deepcopy` function will now
-  correctly copy bound instance methods.  (Implemented by
-  Robert Collins; :issue:`1515`.)
-
-* The :mod:`ctypes` module now always converts ``None`` to a C NULL
-  pointer for arguments declared as pointers.  (Changed by Thomas
-  Heller; :issue:`4606`.)  The underlying `libffi library
-  <http://sourceware.org/libffi/>`__ has been updated to version
-  3.0.9, containing various fixes for different platforms.  (Updated
-  by Matthias Klose; :issue:`8142`.)
-
-* New method: the :mod:`datetime` module's :class:`~datetime.timedelta` class
-  gained a :meth:`~datetime.timedelta.total_seconds` method that returns the
-  number of seconds in the duration.  (Contributed by Brian Quinlan; :issue:`5788`.)
-
-* New method: the :class:`~decimal.Decimal` class gained a
-  :meth:`~decimal.Decimal.from_float` class method that performs an exact
-  conversion of a floating-point number to a :class:`~decimal.Decimal`.
-  This exact conversion strives for the
-  closest decimal approximation to the floating-point representation's value;
-  the resulting decimal value will therefore still include the inaccuracy,
-  if any.
-  For example, ``Decimal.from_float(0.1)`` returns
-  ``Decimal('0.1000000000000000055511151231257827021181583404541015625')``.
-  (Implemented by Raymond Hettinger; :issue:`4796`.)
-
-  Comparing instances of :class:`Decimal` with floating-point
-  numbers now produces sensible results based on the numeric values
-  of the operands.  Previously such comparisons would fall back to
-  Python's default rules for comparing objects, which produced arbitrary
-  results based on their type.  Note that you still cannot combine
-  :class:`Decimal` and floating-point in other operations such as addition,
-  since you should be explicitly choosing how to convert between float and
-  :class:`Decimal`.
-  (Fixed by Mark Dickinson; :issue:`2531`.)
-
-  The constructor for :class:`~decimal.Decimal` now accepts
-  floating-point numbers (added by Raymond Hettinger; :issue:`8257`)
-  and non-European Unicode characters such as Arabic-Indic digits
-  (contributed by Mark Dickinson; :issue:`6595`).
-
-  Most of the methods of the :class:`~decimal.Context` class now accept integers
-  as well as :class:`~decimal.Decimal` instances; the only exceptions are the
-  :meth:`~decimal.Context.canonical` and :meth:`~decimal.Context.is_canonical`
-  methods.  (Patch by Juan José Conti; :issue:`7633`.)
-
-  When using :class:`~decimal.Decimal` instances with a string's
-  :meth:`~str.format` method, the default alignment was previously
-  left-alignment.  This has been changed to right-alignment, which is
-  more sensible for numeric types.  (Changed by Mark Dickinson; :issue:`6857`.)
-
-  Comparisons involving a signaling NaN value (or ``sNAN``) now signal
-  :const:`InvalidOperation` instead of silently returning a true or
-  false value depending on the comparison operator.  Quiet NaN values
-  (or ``NaN``) are now hashable.  (Fixed by Mark Dickinson;
-  :issue:`7279`.)
-
-* The :mod:`difflib` module now produces output that is more
-  compatible with modern :command:`diff`/:command:`patch` tools
-  through one small change, using a tab character instead of spaces as
-  a separator in the header giving the filename.  (Fixed by Anatoly
-  Techtonik; :issue:`7585`.)
-
-* The Distutils ``sdist`` command now always regenerates the
-  :file:`MANIFEST` file, since even if the :file:`MANIFEST.in` or
-  :file:`setup.py` files haven't been modified, the user might have
-  created some new files that should be included.
-  (Fixed by Tarek Ziadé; :issue:`8688`.)
-
-* The :mod:`doctest` module's :const:`IGNORE_EXCEPTION_DETAIL` flag
-  will now ignore the name of the module containing the exception
-  being tested.  (Patch by Lennart Regebro; :issue:`7490`.)
-
-* The :mod:`email` module's :class:`~email.message.Message` class will
-  now accept a Unicode-valued payload, automatically converting the
-  payload to the encoding specified by :attr:`output_charset`.
-  (Added by R. David Murray; :issue:`1368247`.)
-
-* The :class:`~fractions.Fraction` class now accepts a single float or
-  :class:`~decimal.Decimal` instance, or two rational numbers, as
-  arguments to its constructor.  (Implemented by Mark Dickinson;
-  rationals added in :issue:`5812`, and float/decimal in
-  :issue:`8294`.)
-
-  Ordering comparisons (``<``, ``<=``, ``>``, ``>=``) between
-  fractions and complex numbers now raise a :exc:`TypeError`.
-  This fixes an oversight, making the :class:`Fraction` match the other
-  numeric types.
-
-  .. revision 79455
-
-* New class: :class:`~ftplib.FTP_TLS` in
-  the :mod:`ftplib` module provides secure FTP
-  connections using TLS encapsulation of authentication as well as
-  subsequent control and data transfers.
-  (Contributed by Giampaolo Rodola; :issue:`2054`.)
-
-  The :meth:`~ftplib.FTP.storbinary` method for binary uploads can now restart
-  uploads thanks to an added *rest* parameter (patch by Pablo Mouzo;
-  :issue:`6845`.)
-
-* New class decorator: :func:`total_ordering` in the :mod:`functools`
-  module takes a class that defines an :meth:`__eq__` method and one of
-  :meth:`__lt__`, :meth:`__le__`, :meth:`__gt__`, or :meth:`__ge__`,
-  and generates the missing comparison methods.  Since the
-  :meth:`__cmp__` method is being deprecated in Python 3.x,
-  this decorator makes it easier to define ordered classes.
-  (Added by Raymond Hettinger; :issue:`5479`.)
-
-  New function: :func:`cmp_to_key` will take an old-style comparison
-  function that expects two arguments and return a new callable that
-  can be used as the *key* parameter to functions such as
-  :func:`sorted`, :func:`min` and :func:`max`, etc.  The primary
-  intended use is to help with making code compatible with Python 3.x.
-  (Added by Raymond Hettinger.)
-
-* New function: the :mod:`gc` module's :func:`~gc.is_tracked` returns
-  true if a given instance is tracked by the garbage collector, false
-  otherwise. (Contributed by Antoine Pitrou; :issue:`4688`.)
-
-* The :mod:`gzip` module's :class:`~gzip.GzipFile` now supports the context
-  management protocol, so you can write ``with gzip.GzipFile(...) as f:``
-  (contributed by Hagen Fürstenau; :issue:`3860`), and it now implements
-  the :class:`io.BufferedIOBase` ABC, so you can wrap it with
-  :class:`io.BufferedReader` for faster processing
-  (contributed by Nir Aides; :issue:`7471`).
-  It's also now possible to override the modification time
-  recorded in a gzipped file by providing an optional timestamp to
-  the constructor.  (Contributed by Jacques Frechet; :issue:`4272`.)
-
-  Files in gzip format can be padded with trailing zero bytes; the
-  :mod:`gzip` module will now consume these trailing bytes.  (Fixed by
-  Tadek Pietraszek and Brian Curtin; :issue:`2846`.)
-
-* New attribute: the :mod:`hashlib` module now has an :attr:`~hashlib.hashlib.algorithms`
-  attribute containing a tuple naming the supported algorithms.
-  In Python 2.7, ``hashlib.algorithms`` contains
-  ``('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512')``.
-  (Contributed by Carl Chenet; :issue:`7418`.)
-
-* The default :class:`~httplib.HTTPResponse` class used by the :mod:`httplib` module now
-  supports buffering, resulting in much faster reading of HTTP responses.
-  (Contributed by Kristján Valur Jónsson; :issue:`4879`.)
-
-  The :class:`~httplib.HTTPConnection` and :class:`~httplib.HTTPSConnection` classes
-  now support a *source_address* parameter, a ``(host, port)`` 2-tuple
-  giving the source address that will be used for the connection.
-  (Contributed by Eldon Ziegler; :issue:`3972`.)
-
-* The :mod:`ihooks` module now supports relative imports.  Note that
-  :mod:`ihooks` is an older module for customizing imports,
-  superseded by the :mod:`imputil` module added in Python 2.0.
-  (Relative import support added by Neil Schemenauer.)
-
-  .. revision 75423
-
-* The :mod:`imaplib` module now supports IPv6 addresses.
-  (Contributed by Derek Morr; :issue:`1655`.)
-
-* New function: the :mod:`inspect` module's :func:`~inspect.getcallargs`
-  takes a callable and its positional and keyword arguments,
-  and figures out which of the callable's parameters will receive each argument,
-  returning a dictionary mapping argument names to their values.  For example::
-
-    >>> from inspect import getcallargs
-    >>> def f(a, b=1, *pos, **named):
-    ...     pass
-    >>> getcallargs(f, 1, 2, 3)
-    {'a': 1, 'b': 2, 'pos': (3,), 'named': {}}
-    >>> getcallargs(f, a=2, x=4)
-    {'a': 2, 'b': 1, 'pos': (), 'named': {'x': 4}}
-    >>> getcallargs(f)
-    Traceback (most recent call last):
-    ...
-    TypeError: f() takes at least 1 argument (0 given)
-
-  Contributed by George Sakkis; :issue:`3135`.
-
-* Updated module: The :mod:`io` library has been upgraded to the version shipped with
-  Python 3.1.  For 3.1, the I/O library was entirely rewritten in C
-  and is 2 to 20 times faster depending on the task being performed.  The
-  original Python version was renamed to the :mod:`_pyio` module.
-
-  One minor resulting change: the :class:`io.TextIOBase` class now
-  has an :attr:`errors` attribute giving the error setting
-  used for encoding and decoding errors (one of ``'strict'``, ``'replace'``,
-  ``'ignore'``).
-
-  The :class:`io.FileIO` class now raises an :exc:`OSError` when passed
-  an invalid file descriptor.  (Implemented by Benjamin Peterson;
-  :issue:`4991`.)  The :meth:`~io.IOBase.truncate` method now preserves the
-  file position; previously it would change the file position to the
-  end of the new file.  (Fixed by Pascal Chambon; :issue:`6939`.)
-
-* New function: ``itertools.compress(data, selectors)`` takes two
-  iterators.  Elements of *data* are returned if the corresponding
-  value in *selectors* is true::
-
-    itertools.compress('ABCDEF', [1,0,1,0,1,1]) =>
-      A, C, E, F
-
-  .. maybe here is better to use >>> list(itertools.compress(...)) instead
-
-  New function: ``itertools.combinations_with_replacement(iter, r)``
-  returns all the possible *r*-length combinations of elements from the
-  iterable *iter*.  Unlike :func:`~itertools.combinations`, individual elements
-  can be repeated in the generated combinations::
-
-    itertools.combinations_with_replacement('abc', 2) =>
-      ('a', 'a'), ('a', 'b'), ('a', 'c'),
-      ('b', 'b'), ('b', 'c'), ('c', 'c')
-
-  Note that elements are treated as unique depending on their position
-  in the input, not their actual values.
-
-  The :func:`itertools.count` function now has a *step* argument that
-  allows incrementing by values other than 1.  :func:`~itertools.count` also
-  now allows keyword arguments, and using non-integer values such as
-  floats or :class:`~decimal.Decimal` instances.  (Implemented by Raymond
-  Hettinger; :issue:`5032`.)
-
-  :func:`itertools.combinations` and :func:`itertools.product`
-  previously raised :exc:`ValueError` for values of *r* larger than
-  the input iterable.  This was deemed a specification error, so they
-  now return an empty iterator.  (Fixed by Raymond Hettinger; :issue:`4816`.)
-
-* Updated module: The :mod:`json` module was upgraded to version 2.0.9 of the
-  simplejson package, which includes a C extension that makes
-  encoding and decoding faster.
-  (Contributed by Bob Ippolito; :issue:`4136`.)
-
-  To support the new :class:`collections.OrderedDict` type, :func:`json.load`
-  now has an optional *object_pairs_hook* parameter that will be called
-  with any object literal that decodes to a list of pairs.
-  (Contributed by Raymond Hettinger; :issue:`5381`.)
-
-* The :mod:`mailbox` module's :class:`Maildir` class now records the
-  timestamp on the directories it reads, and only re-reads them if the
-  modification time has subsequently changed.  This improves
-  performance by avoiding unneeded directory scans.  (Fixed by
-  A.M. Kuchling and Antoine Pitrou; :issue:`1607951`, :issue:`6896`.)
-
-* New functions: the :mod:`math` module gained
-  :func:`~math.erf` and :func:`~math.erfc` for the error function and the complementary error function,
-  :func:`~math.expm1` which computes ``e**x - 1`` with more precision than
-  using :func:`~math.exp` and subtracting 1,
-  :func:`~math.gamma` for the Gamma function, and
-  :func:`~math.lgamma` for the natural log of the Gamma function.
-  (Contributed by Mark Dickinson and nirinA raseliarison; :issue:`3366`.)
-
-* The :mod:`multiprocessing` module's :class:`Manager*` classes
-  can now be passed a callable that will be called whenever
-  a subprocess is started, along with a set of arguments that will be
-  passed to the callable.
-  (Contributed by lekma; :issue:`5585`.)
-
-  The :class:`~multiprocessing.Pool` class, which controls a pool of worker processes,
-  now has an optional *maxtasksperchild* parameter.  Worker processes
-  will perform the specified number of tasks and then exit, causing the
-  :class:`~multiprocessing.Pool` to start a new worker.  This is useful if tasks may leak
-  memory or other resources, or if some tasks will cause the worker to
-  become very large.
-  (Contributed by Charles Cazabon; :issue:`6963`.)
-
-* The :mod:`nntplib` module now supports IPv6 addresses.
-  (Contributed by Derek Morr; :issue:`1664`.)
-
-* New functions: the :mod:`os` module wraps the following POSIX system
-  calls: :func:`~os.getresgid` and :func:`~os.getresuid`, which return the
-  real, effective, and saved GIDs and UIDs;
-  :func:`~os.setresgid` and :func:`~os.setresuid`, which set
-  real, effective, and saved GIDs and UIDs to new values;
-  :func:`~os.initgroups`, which initialize the group access list
-  for the current process.  (GID/UID functions
-  contributed by Travis H.; :issue:`6508`.  Support for initgroups added
-  by Jean-Paul Calderone; :issue:`7333`.)
-
-  The :func:`os.fork` function now re-initializes the import lock in
-  the child process; this fixes problems on Solaris when :func:`~os.fork`
-  is called from a thread.  (Fixed by Zsolt Cserna; :issue:`7242`.)
-
-* In the :mod:`os.path` module, the :func:`~os.path.normpath` and
-  :func:`~os.path.abspath` functions now preserve Unicode; if their input path
-  is a Unicode string, the return value is also a Unicode string.
-  (:meth:`~os.path.normpath` fixed by Matt Giuca in :issue:`5827`;
-  :meth:`~os.path.abspath` fixed by Ezio Melotti in :issue:`3426`.)
-
-* The :mod:`pydoc` module now has help for the various symbols that Python
-  uses.  You can now do ``help('<<')`` or ``help('@')``, for example.
-  (Contributed by David Laban; :issue:`4739`.)
-
-* The :mod:`re` module's :func:`~re.split`, :func:`~re.sub`, and :func:`~re.subn`
-  now accept an optional *flags* argument, for consistency with the
-  other functions in the module.  (Added by Gregory P. Smith.)
-
-* New function: :func:`~runpy.run_path` in the :mod:`runpy` module
-  will execute the code at a provided *path* argument.  *path* can be
-  the path of a Python source file (:file:`example.py`), a compiled
-  bytecode file (:file:`example.pyc`), a directory
-  (:file:`./package/`), or a zip archive (:file:`example.zip`).  If a
-  directory or zip path is provided, it will be added to the front of
-  ``sys.path`` and the module :mod:`__main__` will be imported.  It's
-  expected that the directory or zip contains a :file:`__main__.py`;
-  if it doesn't, some other :file:`__main__.py` might be imported from
-  a location later in ``sys.path``.  This makes more of the machinery
-  of :mod:`runpy` available to scripts that want to mimic the way
-  Python's command line processes an explicit path name.
-  (Added by Nick Coghlan; :issue:`6816`.)
-
-* New function: in the :mod:`shutil` module, :func:`~shutil.make_archive`
-  takes a filename, archive type (zip or tar-format), and a directory
-  path, and creates an archive containing the directory's contents.
-  (Added by Tarek Ziadé.)
-
-  :mod:`shutil`'s :func:`~shutil.copyfile` and :func:`~shutil.copytree`
-  functions now raise a :exc:`~shutil.SpecialFileError` exception when
-  asked to copy a named pipe.  Previously the code would treat
-  named pipes like a regular file by opening them for reading, and
-  this would block indefinitely.  (Fixed by Antoine Pitrou; :issue:`3002`.)
-
-* The :mod:`signal` module no longer re-installs the signal handler
-  unless this is truly necessary, which fixes a bug that could make it
-  impossible to catch the EINTR signal robustly.  (Fixed by
-  Charles-Francois Natali; :issue:`8354`.)
-
-* New functions: in the :mod:`site` module, three new functions
-  return various site- and user-specific paths.
-  :func:`~site.getsitepackages` returns a list containing all
-  global site-packages directories,
-  :func:`~site.getusersitepackages` returns the path of the user's
-  site-packages directory, and
-  :func:`~site.getuserbase` returns the value of the :envvar:`USER_BASE`
-  environment variable, giving the path to a directory that can be used
-  to store data.
-  (Contributed by Tarek Ziadé; :issue:`6693`.)
-
-  The :mod:`site` module now reports exceptions occurring
-  when the :mod:`sitecustomize` module is imported, and will no longer
-  catch and swallow the :exc:`KeyboardInterrupt` exception.  (Fixed by
-  Victor Stinner; :issue:`3137`.)
-
-* The :func:`~socket.create_connection` function
-  gained a *source_address* parameter, a ``(host, port)`` 2-tuple
-  giving the source address that will be used for the connection.
-  (Contributed by Eldon Ziegler; :issue:`3972`.)
-
-  The :meth:`~socket.socket.recv_into` and :meth:`~socket.socket.recvfrom_into`
-  methods will now write into objects that support the buffer API, most usefully
-  the :class:`bytearray` and :class:`memoryview` objects.  (Implemented by
-  Antoine Pitrou; :issue:`8104`.)
-
-* The :mod:`SocketServer` module's :class:`~SocketServer.TCPServer` class now
-  supports socket timeouts and disabling the Nagle algorithm.
-  The :attr:`~SocketServer.TCPServer.disable_nagle_algorithm` class attribute
-  defaults to False; if overridden to be True,
-  new request connections will have the TCP_NODELAY option set to
-  prevent buffering many small sends into a single TCP packet.
-  The :attr:`~SocketServer.TCPServer.timeout` class attribute can hold
-  a timeout in seconds that will be applied to the request socket; if
-  no request is received within that time, :meth:`handle_timeout`
-  will be called and :meth:`handle_request` will return.
-  (Contributed by Kristján Valur Jónsson; :issue:`6192` and :issue:`6267`.)
-
-* Updated module: the :mod:`sqlite3` module has been updated to
-  version 2.6.0 of the `pysqlite package <http://code.google.com/p/pysqlite/>`__. Version 2.6.0 includes a number of bugfixes, and adds
-  the ability to load SQLite extensions from shared libraries.
-  Call the ``enable_load_extension(True)`` method to enable extensions,
-  and then call :meth:`~sqlite3.Connection.load_extension` to load a particular shared library.
-  (Updated by Gerhard Häring.)
-
-* The :mod:`ssl` module's :class:`ssl.SSLSocket` objects now support the
-  buffer API, which fixed a test suite failure (fix by Antoine Pitrou;
-  :issue:`7133`) and automatically set
-  OpenSSL's :cmacro:`SSL_MODE_AUTO_RETRY`, which will prevent an error
-  code being returned from :meth:`recv` operations that trigger an SSL
-  renegotiation (fix by Antoine Pitrou; :issue:`8222`).
-
-  The :func:`ssl.wrap_socket` constructor function now takes a
-  *ciphers* argument that's a string listing the encryption algorithms
-  to be allowed; the format of the string is described
-  `in the OpenSSL documentation
-  <http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT>`__.
-  (Added by Antoine Pitrou; :issue:`8322`.)
-
-  Another change makes the extension load all of OpenSSL's ciphers and
-  digest algorithms so that they're all available.  Some SSL
-  certificates couldn't be verified, reporting an "unknown algorithm"
-  error.  (Reported by Beda Kosata, and fixed by Antoine Pitrou;
-  :issue:`8484`.)
-
-  The version of OpenSSL being used is now available as the module
-  attributes :data:`ssl.OPENSSL_VERSION` (a string),
-  :data:`ssl.OPENSSL_VERSION_INFO` (a 5-tuple), and
-  :data:`ssl.OPENSSL_VERSION_NUMBER` (an integer).  (Added by Antoine
-  Pitrou; :issue:`8321`.)
-
-* The :mod:`struct` module will no longer silently ignore overflow
-  errors when a value is too large for a particular integer format
-  code (one of ``bBhHiIlLqQ``); it now always raises a
-  :exc:`struct.error` exception.  (Changed by Mark Dickinson;
-  :issue:`1523`.)  The :func:`~struct.pack` function will also
-  attempt to use :meth:`__index__` to convert and pack non-integers
-  before trying the :meth:`__int__` method or reporting an error.
-  (Changed by Mark Dickinson; :issue:`8300`.)
-
-* New function: the :mod:`subprocess` module's
-  :func:`~subprocess.check_output` runs a command with a specified set of arguments
-  and returns the command's output as a string when the command runs without
-  error, or raises a :exc:`~subprocess.CalledProcessError` exception otherwise.
-
-  ::
-
-    >>> subprocess.check_output(['df', '-h', '.'])
-    'Filesystem     Size   Used  Avail Capacity  Mounted on\n
-    /dev/disk0s2    52G    49G   3.0G    94%    /\n'
-
-    >>> subprocess.check_output(['df', '-h', '/bogus'])
-      ...
-    subprocess.CalledProcessError: Command '['df', '-h', '/bogus']' returned non-zero exit status 1
-
-  (Contributed by Gregory P. Smith.)
-
-  The :mod:`subprocess` module will now retry its internal system calls
-  on receiving an :const:`EINTR` signal.  (Reported by several people; final
-  patch by Gregory P. Smith in :issue:`1068268`.)
-
-* New function: :func:`~symtable.is_declared_global` in the :mod:`symtable` module
-  returns true for variables that are explicitly declared to be global,
-  false for ones that are implicitly global.
-  (Contributed by Jeremy Hylton.)
-
-* The :mod:`syslog` module will now use the value of ``sys.argv[0]`` as the
-  identifier instead of the previous default value of ``'python'``.
-  (Changed by Sean Reifschneider; :issue:`8451`.)
-
-* The ``sys.version_info`` value is now a named tuple, with attributes
-  named :attr:`major`, :attr:`minor`, :attr:`micro`,
-  :attr:`releaselevel`, and :attr:`serial`.  (Contributed by Ross
-  Light; :issue:`4285`.)
-
-  :func:`sys.getwindowsversion` also returns a named tuple,
-  with attributes named :attr:`major`, :attr:`minor`, :attr:`build`,
-  :attr:`platform`, :attr:`service_pack`, :attr:`service_pack_major`,
-  :attr:`service_pack_minor`, :attr:`suite_mask`, and
-  :attr:`product_type`.  (Contributed by Brian Curtin; :issue:`7766`.)
-
-* The :mod:`tarfile` module's default error handling has changed, to
-  no longer suppress fatal errors.  The default error level was previously 0,
-  which meant that errors would only result in a message being written to the
-  debug log, but because the debug log is not activated by default,
-  these errors go unnoticed.  The default error level is now 1,
-  which raises an exception if there's an error.
-  (Changed by Lars Gustäbel; :issue:`7357`.)
-
-  :mod:`tarfile` now supports filtering the :class:`~tarfile.TarInfo`
-  objects being added to a tar file.  When you call :meth:`~tarfile.TarFile.add`,
-  you may supply an optional *filter* argument
-  that's a callable.  The *filter* callable will be passed the
-  :class:`~tarfile.TarInfo` for every file being added, and can modify and return it.
-  If the callable returns ``None``, the file will be excluded from the
-  resulting archive.  This is more powerful than the existing
-  *exclude* argument, which has therefore been deprecated.
-  (Added by Lars Gustäbel; :issue:`6856`.)
-  The :class:`~tarfile.TarFile` class also now supports the context manager protocol.
-  (Added by Lars Gustäbel; :issue:`7232`.)
-
-* The :meth:`~threading.Event.wait` method of the :class:`threading.Event` class
-  now returns the internal flag on exit.  This means the method will usually
-  return true because :meth:`~threading.Event.wait` is supposed to block until the
-  internal flag becomes true.  The return value will only be false if
-  a timeout was provided and the operation timed out.
-  (Contributed by Tim Lesher; :issue:`1674032`.)
-
-* The Unicode database provided by the :mod:`unicodedata` module is
-  now used internally to determine which characters are numeric,
-  whitespace, or represent line breaks.  The database also
-  includes information from the :file:`Unihan.txt` data file (patch
-  by Anders Chrigström and Amaury Forgeot d'Arc; :issue:`1571184`)
-  and has been updated to version 5.2.0 (updated by
-  Florent Xicluna; :issue:`8024`).
-
-* The :mod:`urlparse` module's :func:`~urlparse.urlsplit` now handles
-  unknown URL schemes in a fashion compliant with :rfc:`3986`: if the
-  URL is of the form ``"<something>://..."``, the text before the
-  ``://`` is treated as the scheme, even if it's a made-up scheme that
-  the module doesn't know about.  This change may break code that
-  worked around the old behaviour.  For example, Python 2.6.4 or 2.5
-  will return the following:
-
-    >>> import urlparse
-    >>> urlparse.urlsplit('invented://host/filename?query')
-    ('invented', '', '//host/filename?query', '', '')
-
-  Python 2.7 (and Python 2.6.5) will return:
-
-    >>> import urlparse
-    >>> urlparse.urlsplit('invented://host/filename?query')
-    ('invented', 'host', '/filename?query', '', '')
-
-  (Python 2.7 actually produces slightly different output, since it
-  returns a named tuple instead of a standard tuple.)
-
-  The :mod:`urlparse` module also supports IPv6 literal addresses as defined by
-  :rfc:`2732` (contributed by Senthil Kumaran; :issue:`2987`). ::
-
-    >>> urlparse.urlparse('http://[1080::8:800:200C:417A]/foo')
-    ParseResult(scheme='http', netloc='[1080::8:800:200C:417A]',
-                path='/foo', params='', query='', fragment='')
-
-* New class: the :class:`~weakref.WeakSet` class in the :mod:`weakref`
-  module is a set that only holds weak references to its elements; elements
-  will be removed once there are no references pointing to them.
-  (Originally implemented in Python 3.x by Raymond Hettinger, and backported
-  to 2.7 by Michael Foord.)
-
-* The ElementTree library, :mod:`xml.etree`, no longer escapes
-  ampersands and angle brackets when outputting an XML processing
-  instruction (which looks like ``<?xml-stylesheet href="#style1"?>``)
-  or comment (which looks like ``<!-- comment -->``).
-  (Patch by Neil Muller; :issue:`2746`.)
-
-* The XML-RPC client and server, provided by the :mod:`xmlrpclib` and
-  :mod:`SimpleXMLRPCServer` modules, have improved performance by
-  supporting HTTP/1.1 keep-alive and by optionally using gzip encoding
-  to compress the XML being exchanged.  The gzip compression is
-  controlled by the :attr:`encode_threshold` attribute of
-  :class:`SimpleXMLRPCRequestHandler`, which contains a size in bytes;
-  responses larger than this will be compressed.
-  (Contributed by Kristján Valur Jónsson; :issue:`6267`.)
-
-* The :mod:`zipfile` module's :class:`~zipfile.ZipFile` now supports the context
-  management protocol, so you can write ``with zipfile.ZipFile(...) as f:``.
-  (Contributed by Brian Curtin; :issue:`5511`.)
-
-  :mod:`zipfile` now also supports archiving empty directories and
-  extracts them correctly.  (Fixed by Kuba Wieczorek; :issue:`4710`.)
-  Reading files out of an archive is faster, and interleaving
-  :meth:`~zipfile.ZipFile.read` and :meth:`~zipfile.ZipFile.readline` now works correctly.
-  (Contributed by Nir Aides; :issue:`7610`.)
-
-  The :func:`~zipfile.is_zipfile` function now
-  accepts a file object, in addition to the path names accepted in earlier
-  versions.  (Contributed by Gabriel Genellina; :issue:`4756`.)
-
-  The :meth:`~zipfile.ZipFile.writestr` method now has an optional *compress_type* parameter
-  that lets you override the default compression method specified in the
-  :class:`~zipfile.ZipFile` constructor.  (Contributed by Ronald Oussoren;
-  :issue:`6003`.)
-
-
-.. ======================================================================
-.. whole new modules get described in subsections here
-
-
-.. _importlib-section:
-
-New module: importlib
-------------------------------
-
-Python 3.1 includes the :mod:`importlib` package, a re-implementation
-of the logic underlying Python's :keyword:`import` statement.
-:mod:`importlib` is useful for implementors of Python interpreters and
-to users who wish to write new importers that can participate in the
-import process.  Python 2.7 doesn't contain the complete
-:mod:`importlib` package, but instead has a tiny subset that contains
-a single function, :func:`~importlib.import_module`.
-
-``import_module(name, package=None)`` imports a module.  *name* is
-a string containing the module or package's name.  It's possible to do
-relative imports by providing a string that begins with a ``.``
-character, such as ``..utils.errors``.  For relative imports, the
-*package* argument must be provided and is the name of the package that
-will be used as the anchor for
-the relative import.  :func:`~importlib.import_module` both inserts the imported
-module into ``sys.modules`` and returns the module object.
-
-Here are some examples::
-
-    >>> from importlib import import_module
-    >>> anydbm = import_module('anydbm')  # Standard absolute import
-    >>> anydbm
-    <module 'anydbm' from '/p/python/Lib/anydbm.py'>
-    >>> # Relative import
-    >>> file_util = import_module('..file_util', 'distutils.command')
-    >>> file_util
-    <module 'distutils.file_util' from '/python/Lib/distutils/file_util.pyc'>
-
-:mod:`importlib` was implemented by Brett Cannon and introduced in
-Python 3.1.
-
-
-New module: sysconfig
----------------------------------
-
-The :mod:`sysconfig` module has been pulled out of the Distutils
-package, becoming a new top-level module in its own right.
-:mod:`sysconfig` provides functions for getting information about
-Python's build process: compiler switches, installation paths, the
-platform name, and whether Python is running from its source
-directory.
-
-Some of the functions in the module are:
-
-* :func:`~sysconfig.get_config_var` returns variables from Python's
-  Makefile and the :file:`pyconfig.h` file.
-* :func:`~sysconfig.get_config_vars` returns a dictionary containing
-  all of the configuration variables.
-* :func:`~sysconfig.getpath` returns the configured path for
-  a particular type of module: the standard library,
-  site-specific modules, platform-specific modules, etc.
-* :func:`~sysconfig.is_python_build` returns true if you're running a
-  binary from a Python source tree, and false otherwise.
-
-Consult the :mod:`sysconfig` documentation for more details and for
-a complete list of functions.
-
-The Distutils package and :mod:`sysconfig` are now maintained by Tarek
-Ziadé, who has also started a Distutils2 package (source repository at
-http://hg.python.org/distutils2/) for developing a next-generation
-version of Distutils.
-
-
-ttk: Themed Widgets for Tk
---------------------------
-
-Tcl/Tk 8.5 includes a set of themed widgets that re-implement basic Tk
-widgets but have a more customizable appearance and can therefore more
-closely resemble the native platform's widgets.  This widget
-set was originally called Tile, but was renamed to Ttk (for "themed Tk")
-on being added to Tcl/Tck release 8.5.
-
-To learn more, read the :mod:`ttk` module documentation.  You may also
-wish to read the Tcl/Tk manual page describing the
-Ttk theme engine, available at
-http://www.tcl.tk/man/tcl8.5/TkCmd/ttk_intro.htm. Some
-screenshots of the Python/Ttk code in use are at
-http://code.google.com/p/python-ttk/wiki/Screenshots.
-
-The :mod:`ttk` module was written by Guilherme Polo and added in
-:issue:`2983`.  An alternate version called ``Tile.py``, written by
-Martin Franklin and maintained by Kevin Walzer, was proposed for
-inclusion in :issue:`2618`, but the authors argued that Guilherme
-Polo's work was more comprehensive.
-
-
-.. _unittest-section:
-
-Updated module: unittest
----------------------------------
-
-The :mod:`unittest` module was greatly enhanced; many
-new features were added.  Most of these features were implemented
-by Michael Foord, unless otherwise noted.  The enhanced version of
-the module is downloadable separately for use with Python versions 2.4 to 2.6,
-packaged as the :mod:`unittest2` package, from
-http://pypi.python.org/pypi/unittest2.
-
-When used from the command line, the module can automatically discover
-tests.  It's not as fancy as `py.test <http://pytest.org>`__ or
-`nose <http://code.google.com/p/python-nose/>`__, but provides a simple way
-to run tests kept within a set of package directories.  For example,
-the following command will search the :file:`test/` subdirectory for
-any importable test files named ``test*.py``::
-
-   python -m unittest discover -s test
-
-Consult the :mod:`unittest` module documentation for more details.
-(Developed in :issue:`6001`.)
-
-The :func:`main` function supports some other new options:
-
-* :option:`-b` or :option:`--buffer` will buffer the standard output
-  and standard error streams during each test.  If the test passes,
-  any resulting output will be discarded; on failure, the buffered
-  output will be displayed.
-
-* :option:`-c` or :option:`--catch` will cause the control-C interrupt
-  to be handled more gracefully.  Instead of interrupting the test
-  process immediately, the currently running test will be completed
-  and then the partial results up to the interruption will be reported.
-  If you're impatient, a second press of control-C will cause an immediate
-  interruption.
-
-  This control-C handler tries to avoid causing problems when the code
-  being tested or the tests being run have defined a signal handler of
-  their own, by noticing that a signal handler was already set and
-  calling it.  If this doesn't work for you, there's a
-  :func:`removeHandler` decorator that can be used to mark tests that
-  should have the control-C handling disabled.
-
-* :option:`-f` or :option:`--failfast` makes
-  test execution stop immediately when a test fails instead of
-  continuing to execute further tests.  (Suggested by Cliff Dyer and
-  implemented by Michael Foord; :issue:`8074`.)
-
-The progress messages now show 'x' for expected failures
-and 'u' for unexpected successes when run in verbose mode.
-(Contributed by Benjamin Peterson.)
-
-Test cases can raise the :exc:`~unittest.SkipTest` exception to skip a
-test (:issue:`1034053`).
-
-The error messages for :meth:`~unittest.TestCase.assertEqual`,
-:meth:`~unittest.TestCase.assertTrue`, and :meth:`~unittest.TestCase.assertFalse`
-failures now provide more information.  If you set the
-:attr:`~unittest.TestCase.longMessage` attribute of your :class:`~unittest.TestCase` classes to
-True, both the standard error message and any additional message you
-provide will be printed for failures.  (Added by Michael Foord; :issue:`5663`.)
-
-The :meth:`~unittest.TestCase.assertRaises` method now
-returns a context handler when called without providing a callable
-object to run.  For example, you can write this::
-
-  with self.assertRaises(KeyError):
-      {}['foo']
-
-(Implemented by Antoine Pitrou; :issue:`4444`.)
-
-.. rev 78774
-
-Module- and class-level setup and teardown fixtures are now supported.
-Modules can contain :func:`~unittest.setUpModule` and :func:`~unittest.tearDownModule`
-functions.  Classes can have :meth:`~unittest.TestCase.setUpClass` and
-:meth:`~unittest.TestCase.tearDownClass` methods that must be defined as class methods
-(using ``@classmethod`` or equivalent).  These functions and
-methods are invoked when the test runner switches to a test case in a
-different module or class.
-
-The methods :meth:`~unittest.TestCase.addCleanup` and
-:meth:`~unittest.TestCase.doCleanups` were added.
-:meth:`~unittest.TestCase.addCleanup` lets you add cleanup functions that
-will be called unconditionally (after :meth:`~unittest.TestCase.setUp` if
-:meth:`~unittest.TestCase.setUp` fails, otherwise after :meth:`~unittest.TestCase.tearDown`). This allows
-for much simpler resource allocation and deallocation during tests
-(:issue:`5679`).
-
-A number of new methods were added that provide more specialized
-tests.  Many of these methods were written by Google engineers
-for use in their test suites; Gregory P. Smith, Michael Foord, and
-GvR worked on merging them into Python's version of :mod:`unittest`.
-
-* :meth:`~unittest.TestCase.assertIsNone` and :meth:`~unittest.TestCase.assertIsNotNone` take one
-  expression and verify that the result is or is not ``None``.
-
-* :meth:`~unittest.TestCase.assertIs` and :meth:`~unittest.TestCase.assertIsNot`
-  take two values and check whether the two values evaluate to the same object or not.
-  (Added by Michael Foord; :issue:`2578`.)
-
-* :meth:`~unittest.TestCase.assertIsInstance` and
-  :meth:`~unittest.TestCase.assertNotIsInstance` check whether
-  the resulting object is an instance of a particular class, or of
-  one of a tuple of classes.  (Added by Georg Brandl; :issue:`7031`.)
-
-* :meth:`~unittest.TestCase.assertGreater`, :meth:`~unittest.TestCase.assertGreaterEqual`,
-  :meth:`~unittest.TestCase.assertLess`, and :meth:`~unittest.TestCase.assertLessEqual` compare
-  two quantities.
-
-* :meth:`~unittest.TestCase.assertMultiLineEqual` compares two strings, and if they're
-  not equal, displays a helpful comparison that highlights the
-  differences in the two strings.  This comparison is now used by
-  default when Unicode strings are compared with :meth:`~unittest.TestCase.assertEqual`.
-
-* :meth:`~unittest.TestCase.assertRegexpMatches` and
-  :meth:`~unittest.TestCase.assertNotRegexpMatches` checks whether the
-  first argument is a string matching or not matching the regular
-  expression provided as the second argument (:issue:`8038`).
-
-* :meth:`~unittest.TestCase.assertRaisesRegexp` checks whether a particular exception
-  is raised, and then also checks that the string representation of
-  the exception matches the provided regular expression.
-
-* :meth:`~unittest.TestCase.assertIn` and :meth:`~unittest.TestCase.assertNotIn`
-  tests whether *first* is or is not in  *second*.
-
-* :meth:`~unittest.TestCase.assertItemsEqual` tests whether two provided sequences
-  contain the same elements.
-
-* :meth:`~unittest.TestCase.assertSetEqual` compares whether two sets are equal, and
-  only reports the differences between the sets in case of error.
-
-* Similarly, :meth:`~unittest.TestCase.assertListEqual` and :meth:`~unittest.TestCase.assertTupleEqual`
-  compare the specified types and explain any differences without necessarily
-  printing their full values; these methods are now used by default
-  when comparing lists and tuples using :meth:`~unittest.TestCase.assertEqual`.
-  More generally, :meth:`~unittest.TestCase.assertSequenceEqual` compares two sequences
-  and can optionally check whether both sequences are of a
-  particular type.
-
-* :meth:`~unittest.TestCase.assertDictEqual` compares two dictionaries and reports the
-  differences; it's now used by default when you compare two dictionaries
-  using :meth:`~unittest.TestCase.assertEqual`.  :meth:`~unittest.TestCase.assertDictContainsSubset` checks whether
-  all of the key/value pairs in *first* are found in *second*.
-
-* :meth:`~unittest.TestCase.assertAlmostEqual` and :meth:`~unittest.TestCase.assertNotAlmostEqual` test
-  whether *first* and *second* are approximately equal.  This method
-  can either round their difference to an optionally-specified number
-  of *places* (the default is 7) and compare it to zero, or require
-  the difference to be smaller than a supplied *delta* value.
-
-* :meth:`~unittest.TestLoader.loadTestsFromName` properly honors the
-  :attr:`~unittest.TestLoader.suiteClass` attribute of
-  the :class:`~unittest.TestLoader`. (Fixed by Mark Roddy; :issue:`6866`.)
-
-* A new hook lets you extend the :meth:`~unittest.TestCase.assertEqual` method to handle
-  new data types.  The :meth:`~unittest.TestCase.addTypeEqualityFunc` method takes a type
-  object and a function. The function will be used when both of the
-  objects being compared are of the specified type.  This function
-  should compare the two objects and raise an exception if they don't
-  match; it's a good idea for the function to provide additional
-  information about why the two objects aren't matching, much as the new
-  sequence comparison methods do.
-
-:func:`unittest.main` now takes an optional ``exit`` argument.  If
-False, :func:`~unittest.main` doesn't call :func:`sys.exit`, allowing
-:func:`main` to be used from the interactive interpreter.
-(Contributed by J. Pablo Fernández; :issue:`3379`.)
-
-:class:`~unittest.TestResult` has new :meth:`~unittest.TestResult.startTestRun` and
-:meth:`~unittest.TestResult.stopTestRun` methods that are called immediately before
-and after a test run.  (Contributed by Robert Collins; :issue:`5728`.)
-
-With all these changes, the :file:`unittest.py` was becoming awkwardly
-large, so the module was turned into a package and the code split into
-several files (by Benjamin Peterson).  This doesn't affect how the
-module is imported or used.
-
-.. seealso::
-
-  http://www.voidspace.org.uk/python/articles/unittest2.shtml
-    Describes the new features, how to use them, and the
-    rationale for various design decisions.  (By Michael Foord.)
-
-.. _elementtree-section:
-
-Updated module: ElementTree 1.3
----------------------------------
-
-The version of the ElementTree library included with Python was updated to
-version 1.3.  Some of the new features are:
-
-* The various parsing functions now take a *parser* keyword argument
-  giving an :class:`XMLParser` instance that will
-  be used.  This makes it possible to override the file's internal encoding::
-
-    p = ET.XMLParser(encoding='utf-8')
-    t = ET.XML("""<root/>""", parser=p)
-
-  Errors in parsing XML now raise a :exc:`ParseError` exception, whose
-  instances have a :attr:`position` attribute
-  containing a (*line*, *column*) tuple giving the location of the problem.
-
-* ElementTree's code for converting trees to a string has been
-  significantly reworked, making it roughly twice as fast in many
-  cases.  The :class:`ElementTree` :meth:`write` and :class:`Element`
-  :meth:`write` methods now have a *method* parameter that can be
-  "xml" (the default), "html", or "text".  HTML mode will output empty
-  elements as ``<empty></empty>`` instead of ``<empty/>``, and text
-  mode will skip over elements and only output the text chunks.  If
-  you set the :attr:`tag` attribute of an element to ``None`` but
-  leave its children in place, the element will be omitted when the
-  tree is written out, so you don't need to do more extensive rearrangement
-  to remove a single element.
-
-  Namespace handling has also been improved.  All ``xmlns:<whatever>``
-  declarations are now output on the root element, not scattered throughout
-  the resulting XML.  You can set the default namespace for a tree
-  by setting the :attr:`default_namespace` attribute and can
-  register new prefixes with :meth:`register_namespace`.  In XML mode,
-  you can use the true/false *xml_declaration* parameter to suppress the
-  XML declaration.
-
-* New :class:`Element` method: :meth:`extend` appends the items from a
-  sequence to the element's children.  Elements themselves behave like
-  sequences, so it's easy to move children from one element to
-  another::
-
-    from xml.etree import ElementTree as ET
-
-    t = ET.XML("""<list>
-      <item>1</item> <item>2</item>  <item>3</item>
-    </list>""")
-    new = ET.XML('<root/>')
-    new.extend(t)
-
-    # Outputs <root><item>1</item>...</root>
-    print ET.tostring(new)
-
-* New :class:`Element` method: :meth:`iter` yields the children of the
-  element as a generator.  It's also possible to write ``for child in
-  elem:`` to loop over an element's children.  The existing method
-  :meth:`getiterator` is now deprecated, as is :meth:`getchildren`
-  which constructs and returns a list of children.
-
-* New :class:`Element` method: :meth:`itertext` yields all chunks of
-  text that are descendants of the element.  For example::
-
-    t = ET.XML("""<list>
-      <item>1</item> <item>2</item>  <item>3</item>
-    </list>""")
-
-    # Outputs ['\n  ', '1', ' ', '2', '  ', '3', '\n']
-    print list(t.itertext())
-
-* Deprecated: using an element as a Boolean (i.e., ``if elem:``) would
-  return true if the element had any children, or false if there were
-  no children.  This behaviour is confusing -- ``None`` is false, but
-  so is a childless element? -- so it will now trigger a
-  :exc:`FutureWarning`.  In your code, you should be explicit: write
-  ``len(elem) != 0`` if you're interested in the number of children,
-  or ``elem is not None``.
-
-Fredrik Lundh develops ElementTree and produced the 1.3 version;
-you can read his article describing 1.3 at
-http://effbot.org/zone/elementtree-13-intro.htm.
-Florent Xicluna updated the version included with
-Python, after discussions on python-dev and in :issue:`6472`.)
-
-.. ======================================================================
-
-
-Build and C API Changes
-=======================
-
-Changes to Python's build process and to the C API include:
-
-* The latest release of the GNU Debugger, GDB 7, can be `scripted
-  using Python
-  <http://sourceware.org/gdb/current/onlinedocs/gdb/Python.html>`__.
-  When you begin debugging an executable program P, GDB will look for
-  a file named ``P-gdb.py`` and automatically read it.  Dave Malcolm
-  contributed a :file:`python-gdb.py` that adds a number of
-  commands useful when debugging Python itself.  For example,
-  ``py-up`` and ``py-down`` go up or down one Python stack frame,
-  which usually corresponds to several C stack frames.  ``py-print``
-  prints the value of a Python variable, and ``py-bt`` prints the
-  Python stack trace.  (Added as a result of :issue:`8032`.)
-
-* If you use the :file:`.gdbinit` file provided with Python,
-  the "pyo" macro in the 2.7 version now works correctly when the thread being
-  debugged doesn't hold the GIL; the macro now acquires it before printing.
-  (Contributed by Victor Stinner; :issue:`3632`.)
-
-* :cfunc:`Py_AddPendingCall` is now thread-safe, letting any
-  worker thread submit notifications to the main Python thread.  This
-  is particularly useful for asynchronous IO operations.
-  (Contributed by Kristján Valur Jónsson; :issue:`4293`.)
-
-* New function: :cfunc:`PyCode_NewEmpty` creates an empty code object;
-  only the filename, function name, and first line number are required.
-  This is useful for extension modules that are attempting to
-  construct a more useful traceback stack.  Previously such
-  extensions needed to call :cfunc:`PyCode_New`, which had many
-  more arguments.  (Added by Jeffrey Yasskin.)
-
-* New function: :cfunc:`PyErr_NewExceptionWithDoc` creates a new
-  exception class, just as the existing :cfunc:`PyErr_NewException` does,
-  but takes an extra ``char *`` argument containing the docstring for the
-  new exception class.  (Added by 'lekma' on the Python bug tracker;
-  :issue:`7033`.)
-
-* New function: :cfunc:`PyFrame_GetLineNumber` takes a frame object
-  and returns the line number that the frame is currently executing.
-  Previously code would need to get the index of the bytecode
-  instruction currently executing, and then look up the line number
-  corresponding to that address.  (Added by Jeffrey Yasskin.)
-
-* New functions: :cfunc:`PyLong_AsLongAndOverflow` and
-  :cfunc:`PyLong_AsLongLongAndOverflow`  approximates a Python long
-  integer as a C :ctype:`long` or :ctype:`long long`.
-  If the number is too large to fit into
-  the output type, an *overflow* flag is set and returned to the caller.
-  (Contributed by Case Van Horsen; :issue:`7528` and :issue:`7767`.)
-
-* New function: stemming from the rewrite of string-to-float conversion,
-  a new :cfunc:`PyOS_string_to_double` function was added.  The old
-  :cfunc:`PyOS_ascii_strtod` and :cfunc:`PyOS_ascii_atof` functions
-  are now deprecated.
-
-* New function: :cfunc:`PySys_SetArgvEx` sets the value of
-  ``sys.argv`` and can optionally update ``sys.path`` to include the
-  directory containing the script named by ``sys.argv[0]`` depending
-  on the value of an *updatepath* parameter.
-
-  This function was added to close a security hole for applications
-  that embed Python.  The old function, :cfunc:`PySys_SetArgv`, would
-  always update ``sys.path``, and sometimes it would add the current
-  directory.  This meant that, if you ran an application embedding
-  Python in a directory controlled by someone else, attackers could
-  put a Trojan-horse module in the directory (say, a file named
-  :file:`os.py`) that your application would then import and run.
-
-  If you maintain a C/C++ application that embeds Python, check
-  whether you're calling :cfunc:`PySys_SetArgv` and carefully consider
-  whether the application should be using :cfunc:`PySys_SetArgvEx`
-  with *updatepath* set to false.
-
-  Security issue reported as `CVE-2008-5983
-  <http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-5983>`_;
-  discussed in :issue:`5753`, and fixed by Antoine Pitrou.
-
-* New macros: the Python header files now define the following macros:
-  :cmacro:`Py_ISALNUM`,
-  :cmacro:`Py_ISALPHA`,
-  :cmacro:`Py_ISDIGIT`,
-  :cmacro:`Py_ISLOWER`,
-  :cmacro:`Py_ISSPACE`,
-  :cmacro:`Py_ISUPPER`,
-  :cmacro:`Py_ISXDIGIT`,
-  and :cmacro:`Py_TOLOWER`, :cmacro:`Py_TOUPPER`.
-  All of these functions are analogous to the C
-  standard macros for classifying characters, but ignore the current
-  locale setting, because in
-  several places Python needs to analyze characters in a
-  locale-independent way.  (Added by Eric Smith;
-  :issue:`5793`.)
-
-  .. XXX these macros don't seem to be described in the c-api docs.
-
-* Removed function: :cmacro:`PyEval_CallObject` is now only available
-  as a macro.  A function version was being kept around to preserve
-  ABI linking compatibility, but that was in 1997; it can certainly be
-  deleted by now.  (Removed by Antoine Pitrou; :issue:`8276`.)
-
-* New format codes: the :cfunc:`PyFormat_FromString`,
-  :cfunc:`PyFormat_FromStringV`, and :cfunc:`PyErr_Format` functions now
-  accept ``%lld`` and ``%llu`` format codes for displaying
-  C's :ctype:`long long` types.
-  (Contributed by Mark Dickinson; :issue:`7228`.)
-
-* The complicated interaction between threads and process forking has
-  been changed.  Previously, the child process created by
-  :func:`os.fork` might fail because the child is created with only a
-  single thread running, the thread performing the :func:`os.fork`.
-  If other threads were holding a lock, such as Python's import lock,
-  when the fork was performed, the lock would still be marked as
-  "held" in the new process.  But in the child process nothing would
-  ever release the lock, since the other threads weren't replicated,
-  and the child process would no longer be able to perform imports.
-
-  Python 2.7 acquires the import lock before performing an
-  :func:`os.fork`, and will also clean up any locks created using the
-  :mod:`threading` module.  C extension modules that have internal
-  locks, or that call :cfunc:`fork()` themselves, will not benefit
-  from this clean-up.
-
-  (Fixed by Thomas Wouters; :issue:`1590864`.)
-
-* The :cfunc:`Py_Finalize` function now calls the internal
-  :func:`threading._shutdown` function; this prevents some exceptions from
-  being raised when an interpreter shuts down.
-  (Patch by Adam Olsen; :issue:`1722344`.)
-
-* When using the :ctype:`PyMemberDef` structure to define attributes
-  of a type, Python will no longer let you try to delete or set a
-  :const:`T_STRING_INPLACE` attribute.
-
-  .. rev 79644
-
-* Global symbols defined by the :mod:`ctypes` module are now prefixed
-  with ``Py``, or with ``_ctypes``.  (Implemented by Thomas
-  Heller; :issue:`3102`.)
-
-* New configure option: the :option:`--with-system-expat` switch allows
-  building the :mod:`pyexpat` module to use the system Expat library.
-  (Contributed by Arfrever Frehtes Taifersar Arahesis; :issue:`7609`.)
-
-* New configure option: the
-  :option:`--with-valgrind` option will now disable the pymalloc
-  allocator, which is difficult for the Valgrind memory-error detector
-  to analyze correctly.
-  Valgrind will therefore be better at detecting memory leaks and
-  overruns. (Contributed by James Henstridge; :issue:`2422`.)
-
-* New configure option: you can now supply an empty string to
-  :option:`--with-dbmliborder=` in order to disable all of the various
-  DBM modules.  (Added by Arfrever Frehtes Taifersar Arahesis;
-  :issue:`6491`.)
-
-* The :program:`configure` script now checks for floating-point rounding bugs
-  on certain 32-bit Intel chips and defines a :cmacro:`X87_DOUBLE_ROUNDING`
-  preprocessor definition.  No code currently uses this definition,
-  but it's available if anyone wishes to use it.
-  (Added by Mark Dickinson; :issue:`2937`.)
-
-  :program:`configure` also now sets a :envvar:`LDCXXSHARED` Makefile
-  variable for supporting C++ linking.  (Contributed by Arfrever
-  Frehtes Taifersar Arahesis; :issue:`1222585`.)
-
-* The build process now creates the necessary files for pkg-config
-  support.  (Contributed by Clinton Roy; :issue:`3585`.)
-
-* The build process now supports Subversion 1.7.  (Contributed by
-  Arfrever Frehtes Taifersar Arahesis; :issue:`6094`.)
-
-
-.. _whatsnew27-capsules:
-
-Capsules
--------------------
-
-Python 3.1 adds a new C datatype, :ctype:`PyCapsule`, for providing a
-C API to an extension module.  A capsule is essentially the holder of
-a C ``void *`` pointer, and is made available as a module attribute; for
-example, the :mod:`socket` module's API is exposed as ``socket.CAPI``,
-and :mod:`unicodedata` exposes ``ucnhash_CAPI``.  Other extensions
-can import the module, access its dictionary to get the capsule
-object, and then get the ``void *`` pointer, which will usually point
-to an array of pointers to the module's various API functions.
-
-There is an existing data type already used for this,
-:ctype:`PyCObject`, but it doesn't provide type safety.  Evil code
-written in pure Python could cause a segmentation fault by taking a
-:ctype:`PyCObject` from module A and somehow substituting it for the
-:ctype:`PyCObject` in module B.   Capsules know their own name,
-and getting the pointer requires providing the name::
-
-   void *vtable;
-
-   if (!PyCapsule_IsValid(capsule, "mymodule.CAPI") {
-           PyErr_SetString(PyExc_ValueError, "argument type invalid");
-           return NULL;
-   }
-
-   vtable = PyCapsule_GetPointer(capsule, "mymodule.CAPI");
-
-You are assured that ``vtable`` points to whatever you're expecting.
-If a different capsule was passed in, :cfunc:`PyCapsule_IsValid` would
-detect the mismatched name and return false.  Refer to
-:ref:`using-capsules` for more information on using these objects.
-
-Python 2.7 now uses capsules internally to provide various
-extension-module APIs, but the :cfunc:`PyCObject_AsVoidPtr` was
-modified to handle capsules, preserving compile-time compatibility
-with the :ctype:`CObject` interface.  Use of
-:cfunc:`PyCObject_AsVoidPtr` will signal a
-:exc:`PendingDeprecationWarning`, which is silent by default.
-
-Implemented in Python 3.1 and backported to 2.7 by Larry Hastings;
-discussed in :issue:`5630`.
-
-
-.. ======================================================================
-
-Port-Specific Changes: Windows
------------------------------------
-
-* The :mod:`msvcrt` module now contains some constants from
-  the :file:`crtassem.h` header file:
-  :data:`CRT_ASSEMBLY_VERSION`,
-  :data:`VC_ASSEMBLY_PUBLICKEYTOKEN`,
-  and :data:`LIBRARIES_ASSEMBLY_NAME_PREFIX`.
-  (Contributed by David Cournapeau; :issue:`4365`.)
-
-* The :mod:`_winreg` module for accessing the registry now implements
-  the :func:`CreateKeyEx` and :func:`DeleteKeyEx` functions, extended
-  versions of previously-supported functions that take several extra
-  arguments.  The :func:`DisableReflectionKey`,
-  :func:`EnableReflectionKey`, and :func:`QueryReflectionKey` were also
-  tested and documented.
-  (Implemented by Brian Curtin: :issue:`7347`.)
-
-* The new :cfunc:`_beginthreadex` API is used to start threads, and
-  the native thread-local storage functions are now used.
-  (Contributed by Kristján Valur Jónsson; :issue:`3582`.)
-
-* The :func:`os.kill` function now works on Windows.  The signal value
-  can be the constants :const:`CTRL_C_EVENT`,
-  :const:`CTRL_BREAK_EVENT`, or any integer.  The first two constants
-  will send Control-C and Control-Break keystroke events to
-  subprocesses; any other value will use the :cfunc:`TerminateProcess`
-  API.  (Contributed by Miki Tebeka; :issue:`1220212`.)
-
-* The :func:`os.listdir` function now correctly fails
-  for an empty path.  (Fixed by Hirokazu Yamamoto; :issue:`5913`.)
-
-* The :mod:`mimelib` module will now read the MIME database from
-  the Windows registry when initializing.
-  (Patch by Gabriel Genellina; :issue:`4969`.)
-
-.. ======================================================================
-
-Port-Specific Changes: Mac OS X
------------------------------------
-
-* The path ``/Library/Python/2.7/site-packages`` is now appended to
-  ``sys.path``, in order to share added packages between the system
-  installation and a user-installed copy of the same version.
-  (Changed by Ronald Oussoren; :issue:`4865`.)
-
-Port-Specific Changes: FreeBSD
------------------------------------
-
-* FreeBSD 7.1's :const:`SO_SETFIB` constant, used with
-  :func:`~socket.getsockopt`/:func:`~socket.setsockopt` to select an
-  alternate routing table, is now available in the :mod:`socket`
-  module.  (Added by Kyle VanderBeek; :issue:`8235`.)
-
-Other Changes and Fixes
-=======================
-
-* Two benchmark scripts, :file:`iobench` and :file:`ccbench`, were
-  added to the :file:`Tools` directory.  :file:`iobench` measures the
-  speed of the built-in file I/O objects returned by :func:`open`
-  while performing various operations, and :file:`ccbench` is a
-  concurrency benchmark that tries to measure computing throughput,
-  thread switching latency, and IO processing bandwidth when
-  performing several tasks using a varying number of threads.
-
-* The :file:`Tools/i18n/msgfmt.py` script now understands plural
-  forms in :file:`.po` files.  (Fixed by Martin von Löwis;
-  :issue:`5464`.)
-
-* When importing a module from a :file:`.pyc` or :file:`.pyo` file
-  with an existing :file:`.py` counterpart, the :attr:`co_filename`
-  attributes of the resulting code objects are overwritten when the
-  original filename is obsolete.  This can happen if the file has been
-  renamed, moved, or is accessed through different paths.  (Patch by
-  Ziga Seilnacht and Jean-Paul Calderone; :issue:`1180193`.)
-
-* The :file:`regrtest.py` script now takes a :option:`--randseed=`
-  switch that takes an integer that will be used as the random seed
-  for the :option:`-r` option that executes tests in random order.
-  The :option:`-r` option also reports the seed that was used
-  (Added by Collin Winter.)
-
-* Another :file:`regrtest.py` switch is :option:`-j`, which
-  takes an integer specifying how many tests run in parallel. This
-  allows reducing the total runtime on multi-core machines.
-  This option is compatible with several other options, including the
-  :option:`-R` switch which is known to produce long runtimes.
-  (Added by Antoine Pitrou, :issue:`6152`.)  This can also be used
-  with a new :option:`-F` switch that runs selected tests in a loop
-  until they fail.  (Added by Antoine Pitrou; :issue:`7312`.)
-
-* When executed as a script, the :file:`py_compile.py` module now
-  accepts ``'-'`` as an argument, which will read standard input for
-  the list of filenames to be compiled.  (Contributed by Piotr
-  Ożarowski; :issue:`8233`.)
-
-.. ======================================================================
-
-Porting to Python 2.7
-=====================
-
-This section lists previously described changes and other bugfixes
-that may require changes to your code:
-
-* The :func:`range` function processes its arguments more
-  consistently; it will now call :meth:`__int__` on non-float,
-  non-integer arguments that are supplied to it.  (Fixed by Alexander
-  Belopolsky; :issue:`1533`.)
-
-* The string :meth:`format` method changed the default precision used
-  for floating-point and complex numbers from 6 decimal
-  places to 12, which matches the precision used by :func:`str`.
-  (Changed by Eric Smith; :issue:`5920`.)
-
-* Because of an optimization for the :keyword:`with` statement, the special
-  methods :meth:`__enter__` and :meth:`__exit__` must belong to the object's
-  type, and cannot be directly attached to the object's instance.  This
-  affects new-style classes (derived from :class:`object`) and C extension
-  types.  (:issue:`6101`.)
-
-* Due to a bug in Python 2.6, the *exc_value* parameter to
-  :meth:`__exit__` methods was often the string representation of the
-  exception, not an instance.  This was fixed in 2.7, so *exc_value*
-  will be an instance as expected.  (Fixed by Florent Xicluna;
-  :issue:`7853`.)
-
-* When a restricted set of attributes were set using ``__slots__``,
-  deleting an unset attribute would not raise :exc:`AttributeError`
-  as you would expect.  Fixed by Benjamin Peterson; :issue:`7604`.)
-
-In the standard library:
-
-* Operations with :class:`datetime` instances that resulted in a year
-  falling outside the supported range didn't always raise
-  :exc:`OverflowError`.  Such errors are now checked more carefully
-  and will now raise the exception. (Reported by Mark Leander, patch
-  by Anand B. Pillai and Alexander Belopolsky; :issue:`7150`.)
-
-* When using :class:`Decimal` instances with a string's
-  :meth:`format` method, the default alignment was previously
-  left-alignment.  This has been changed to right-alignment, which might
-  change the output of your programs.
-  (Changed by Mark Dickinson; :issue:`6857`.)
-
-  Comparisons involving a signaling NaN value (or ``sNAN``) now signal
-  :const:`InvalidOperation` instead of silently returning a true or
-  false value depending on the comparison operator.  Quiet NaN values
-  (or ``NaN``) are now hashable.  (Fixed by Mark Dickinson;
-  :issue:`7279`.)
-
-* The ElementTree library, :mod:`xml.etree`, no longer escapes
-  ampersands and angle brackets when outputting an XML processing
-  instruction (which looks like `<?xml-stylesheet href="#style1"?>`)
-  or comment (which looks like `<!-- comment -->`).
-  (Patch by Neil Muller; :issue:`2746`.)
-
-* The :meth:`readline` method of :class:`StringIO` objects now does
-  nothing when a negative length is requested, as other file-like
-  objects do.  (:issue:`7348`).
-
-* The :mod:`syslog` module will now use the value of ``sys.argv[0]`` as the
-  identifier instead of the previous default value of ``'python'``.
-  (Changed by Sean Reifschneider; :issue:`8451`.)
-
-* The :mod:`tarfile` module's default error handling has changed, to
-  no longer suppress fatal errors.  The default error level was previously 0,
-  which meant that errors would only result in a message being written to the
-  debug log, but because the debug log is not activated by default,
-  these errors go unnoticed.  The default error level is now 1,
-  which raises an exception if there's an error.
-  (Changed by Lars Gustäbel; :issue:`7357`.)
-
-* The :mod:`urlparse` module's :func:`~urlparse.urlsplit` now handles
-  unknown URL schemes in a fashion compliant with :rfc:`3986`: if the
-  URL is of the form ``"<something>://..."``, the text before the
-  ``://`` is treated as the scheme, even if it's a made-up scheme that
-  the module doesn't know about.  This change may break code that
-  worked around the old behaviour.  For example, Python 2.6.4 or 2.5
-  will return the following:
-
-    >>> import urlparse
-    >>> urlparse.urlsplit('invented://host/filename?query')
-    ('invented', '', '//host/filename?query', '', '')
-
-  Python 2.7 (and Python 2.6.5) will return:
-
-    >>> import urlparse
-    >>> urlparse.urlsplit('invented://host/filename?query')
-    ('invented', 'host', '/filename?query', '', '')
-
-  (Python 2.7 actually produces slightly different output, since it
-  returns a named tuple instead of a standard tuple.)
-
-For C extensions:
-
-* C extensions that use integer format codes with the ``PyArg_Parse*``
-  family of functions will now raise a :exc:`TypeError` exception
-  instead of triggering a :exc:`DeprecationWarning` (:issue:`5080`).
-
-* Use the new :cfunc:`PyOS_string_to_double` function instead of the old
-  :cfunc:`PyOS_ascii_strtod` and :cfunc:`PyOS_ascii_atof` functions,
-  which are now deprecated.
-
-For applications that embed Python:
-
-* The :cfunc:`PySys_SetArgvEx` function was added, letting
-  applications close a security hole when the existing
-  :cfunc:`PySys_SetArgv` function was used.  Check whether you're
-  calling :cfunc:`PySys_SetArgv` and carefully consider whether the
-  application should be using :cfunc:`PySys_SetArgvEx` with
-  *updatepath* set to false.
-
-.. ======================================================================
-
-
-.. _acks27:
-
-Acknowledgements
-================
-
-The author would like to thank the following people for offering
-suggestions, corrections and assistance with various drafts of this
-article: Nick Coghlan, Philip Jenvey, Ryan Lovett, R. David Murray,
-Hugh Secker-Walker.
-

Modified: python/branches/release31-maint/Doc/whatsnew/index.rst
==============================================================================
--- python/branches/release31-maint/Doc/whatsnew/index.rst	(original)
+++ python/branches/release31-maint/Doc/whatsnew/index.rst	Sun Jul 11 12:41:44 2010
@@ -13,7 +13,6 @@
 
    3.1.rst
    3.0.rst
-   2.7.rst
    2.6.rst
    2.5.rst
    2.4.rst


More information about the Python-checkins mailing list