[Python-checkins] cpython (merge 3.6 -> default): Merge 3.6 (issue #28635)

yury.selivanov python-checkins at python.org
Thu Nov 10 13:28:11 EST 2016


https://hg.python.org/cpython/rev/69bdf8bdfd61
changeset:   105042:69bdf8bdfd61
parent:      105040:5c4ce500dd35
parent:      105041:c0060567f35d
user:        Yury Selivanov <yury at magic.io>
date:        Thu Nov 10 13:28:03 2016 -0500
summary:
  Merge 3.6 (issue #28635)

files:
  Doc/whatsnew/3.6.rst |  1125 +++++++++++++++++++++++------
  1 files changed, 878 insertions(+), 247 deletions(-)


diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst
--- a/Doc/whatsnew/3.6.rst
+++ b/Doc/whatsnew/3.6.rst
@@ -87,7 +87,7 @@
 
 * The :ref:`dict <typesmapping>` type has been reimplemented to use
   a :ref:`faster, more compact representation <whatsnew36-compactdict>`
-  similar to the `PyPy dict implementation`_. This resulted in dictionaries
+  similar to the `PyPy dict implementation`_.  This resulted in dictionaries
   using 20% to 25% less memory when compared to Python 3.5.
 
 * Customization of class creation has been simplified with the
@@ -96,27 +96,49 @@
 * The class attibute definition order is
   :ref:`now preserved  <whatsnew36-pep520>`.
 
-* The order of elements in ``**kwargs`` now corresponds to the order in
-  the function signature:
-  :ref:`Preserving Keyword Argument Order <whatsnew36-pep468>`.
-
-* DTrace and SystemTap :ref:`probing support <whatsnew36-tracing>`.
+* The order of elements in ``**kwargs`` now
+  :ref:`corresponds to the order <whatsnew36-pep468>` in which keyword
+  arguments were passed to the function.
+
+* DTrace and SystemTap :ref:`probing support <whatsnew36-tracing>` has
+  been added.
+
+* The new :ref:`PYTHONMALLOC <whatsnew36-pythonmalloc>` environment variable
+  can now be used to debug the interpreter memory allocation and access
+  errors.
 
 
 Significant improvements in the standard library:
 
+* The :mod:`asyncio` module has received new features, significant
+  usability and performance improvements, and a fair amount of bug fixes.
+  Starting with Python 3.6 the ``asyncio`` module is no longer provisional
+  and its API is considered stable.
+
 * A new :ref:`file system path protocol <whatsnew36-pep519>` has been
   implemented to support :term:`path-like objects <path-like object>`.
   All standard library functions operating on paths have been updated to
   work with the new protocol.
 
-* The overhead of :mod:`asyncio` implementation has been reduced by
-  up to 50% thanks to the new C implementation of the :class:`asyncio.Future`
-  and :class:`asyncio.Task` classes and other optimizations.
+* The :mod:`datetime` module has gained support for
+  :ref:`Local Time Disambiguation <whatsnew36-pep495>`.
+
+* The :mod:`typing` module received a number of
+  :ref:`improvements <whatsnew36-typing>` and is no longer provisional.
+
+* The :mod:`tracemalloc` module has been significantly reworked
+  and is now used to provide better output for :exc:`ResourceWarning`s
+  as well as provide better diagnostics for memory allocation errors.
+  See the :ref:`PYTHONMALLOC section <whatsnew36-pythonmalloc>` for more
+  information.
 
 
 Security improvements:
 
+* The new :mod:`secrets` module has been added to simplify the generation of
+  cryptographically strong pseudo-random numbers suitable for
+  managing secrets such as account authentication, tokens, and similar.
+
 * On Linux, :func:`os.urandom` now blocks until the system urandom entropy
   pool is initialized to increase the security. See the :pep:`524` for the
   rationale.
@@ -153,26 +175,6 @@
   more information.
 
 
-A complete list of PEP's implemented in Python 3.6:
-
-* :pep:`468`, :ref:`Preserving Keyword Argument Order <whatsnew36-pep468>`
-* :pep:`487`, :ref:`Simpler customization of class creation <whatsnew36-pep487>`
-* :pep:`495`, Local Time Disambiguation
-* :pep:`498`, :ref:`Formatted string literals <whatsnew36-pep498>`
-* :pep:`506`, Adding A Secrets Module To The Standard Library
-* :pep:`509`, :ref:`Add a private version to dict <whatsnew36-pep509>`
-* :pep:`515`, :ref:`Underscores in Numeric Literals <whatsnew36-pep515>`
-* :pep:`519`, :ref:`Adding a file system path protocol <whatsnew36-pep519>`
-* :pep:`520`, :ref:`Preserving Class Attribute Definition Order <whatsnew36-pep520>`
-* :pep:`523`, :ref:`Adding a frame evaluation API to CPython <whatsnew36-pep523>`
-* :pep:`524`, Make os.urandom() blocking on Linux (during system startup)
-* :pep:`525`, Asynchronous Generators (provisional)
-* :pep:`526`, :ref:`Syntax for Variable Annotations (provisional) <whatsnew36-pep526>`
-* :pep:`528`, :ref:`Change Windows console encoding to UTF-8 (provisional) <whatsnew36-pep528>`
-* :pep:`529`, :ref:`Change Windows filesystem encoding to UTF-8 (provisional) <whatsnew36-pep529>`
-* :pep:`530`, Asynchronous Comprehensions
-
-
 .. _PyPy dict implementation: https://morepypy.blogspot.com/2015/01/faster-more-memory-efficient-and-more.html
 
 
@@ -185,7 +187,7 @@
 ----------------------------------
 
 :pep:`498` introduces a new kind of string literals: *f-strings*, or
-*formatted string literals*.
+:ref:`formatted string literals <f-strings>`.
 
 Formatted string literals are prefixed with ``'f'`` and are similar to
 the format strings accepted by :meth:`str.format`.  They contain replacement
@@ -196,6 +198,11 @@
     >>> name = "Fred"
     >>> f"He said his name is {name}."
     'He said his name is Fred.'
+    >>> width = 10
+    >>> precision = 4
+    >>> value = decimal.Decimal("12.34567")
+    >>> f"result: {value:{width}.{precision}}"  # nested fields
+    'result:      12.35'
 
 .. seealso::
 
@@ -258,6 +265,18 @@
 specifier.  Leading, trailing, or multiple underscores in a row are not
 allowed.
 
+The :ref:`string formatting <formatspec>` language also now has support
+for the ``'_'`` option to signal the use of an underscore for a thousands
+separator for floating point presentation types and for integer
+presentation type ``'d'``.  For integer presentation types ``'b'``,
+``'o'``, ``'x'``, and ``'X'``, underscores will be inserted every 4
+digits::
+
+    >>> '{:_}'.format(1000000)
+    '1_000_000'
+    >>> '{:_x}'.format(0xFFFFFFFF)
+    'ffff_ffff'
+
 .. seealso::
 
    :pep:`515` -- Underscores in Numeric Literals
@@ -302,7 +321,7 @@
 Additionally, ``await`` expressions are supported in all kinds
 of comprehensions::
 
-    result = [await fun() for fun in funcs]
+    result = [await fun() for fun in funcs if await condition()]
 
 .. seealso::
 
@@ -319,17 +338,18 @@
 The new ``__init_subclass__`` classmethod will be called on the base class
 whenever a new subclass is created::
 
-    >>> class QuestBase:
-    ...    # this is implicitly a @classmethod
-    ...    def __init_subclass__(cls, swallow, **kwargs):
-    ...        cls.swallow = swallow
-    ...        super().__init_subclass__(**kwargs)
-
-    >>> class Quest(QuestBase, swallow="african"):
-    ...    pass
-
-    >>> Quest.swallow
-    'african'
+    class PluginBase:
+        subclasses = []
+
+        def __init_subclass__(cls, **kwargs):
+            super().__init_subclass__(**kwargs)
+            cls.subclasses.append(cls)
+
+    class Plugin1(PluginBase):
+        pass
+
+    class Plugin2(PluginBase):
+        pass
 
 .. seealso::
 
@@ -345,10 +365,29 @@
 -----------------------------------------
 
 :pep:`487` extends the descriptor protocol has to include the new optional
-``__set_name__`` method.  Whenever a new class is defined, the new method
-will be called on all descriptors included in the definition, providing
+:meth:`~object.__set_name__` method.  Whenever a new class is defined, the new
+method will be called on all descriptors included in the definition, providing
 them with a reference to the class being defined and the name given to the
-descriptor within the class namespace.
+descriptor within the class namespace.  In other words, instances of
+descriptors can now know the attribute name of the descriptor in the
+owner class::
+
+    class IntField:
+        def __get__(self, instance, owner):
+            return instance.__dict__[self.name]
+
+        def __set__(self, instance, value):
+            if not isinstance(value, int):
+                raise ValueError(f'expecting integer in {self.name}')
+            instance.__dict__[self.name] = value
+
+        # this is the new initializer:
+        def __set_name__(self, owner, name):
+            self.name = name
+
+    class Model:
+        int_field = IntField()
+
 
 .. seealso::
 
@@ -358,20 +397,6 @@
     :ref:`Feature documentation <descriptors>`
 
 
-.. _whatsnew36-pep506:
-
-PEP 506: Adding A Secrets Module To The Standard Library
---------------------------------------------------------
-
-
-
-.. seealso::
-
-    :pep:`506` -- Adding A Secrets Module To The Standard Library
-      PEP written and implemented by Steven D'Aprano.
-
-
-
 .. _whatsnew36-pep519:
 
 PEP 519: Adding a file system path protocol
@@ -401,9 +426,8 @@
 
 The built-in :func:`open` function has been updated to accept
 :class:`os.PathLike` objects as have all relevant functions in the
-:mod:`os` and :mod:`os.path` modules. :c:func:`PyUnicode_FSConverter`
-and :c:func:`PyUnicode_FSConverter` have been changed to accept
-path-like objects. The :class:`os.DirEntry` class
+:mod:`os` and :mod:`os.path` modules, as well as most functions and
+classes in the standard library.  The :class:`os.DirEntry` class
 and relevant classes in :mod:`pathlib` have also been updated to
 implement :class:`os.PathLike`.
 
@@ -439,6 +463,43 @@
        PEP written by Brett Cannon and Koos Zevenhoven.
 
 
+.. _whatsnew36-pep495:
+
+PEP 495: Local Time Disambiguation
+----------------------------------
+
+In most world locations, there have been and will be times when local clocks
+are moved back.  In those times, intervals are introduced in which local
+clocks show the same time twice in the same day. In these situations, the
+information displayed on a local clock (or stored in a Python datetime
+instance) is insufficient to identify a particular moment in time.
+
+:pep:`495` adds the new *fold* attribute to instances of
+:class:`datetime.datetime` and :class:`datetime.time` classes to differentiate
+between two moments in time for which local times are the same::
+
+    >>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
+    >>> for i in range(4):
+    ...     u = u0 + i*HOUR
+    ...     t = u.astimezone(Eastern)
+    ...     print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
+    ...
+    04:00:00 UTC = 00:00:00 EDT 0
+    05:00:00 UTC = 01:00:00 EDT 0
+    06:00:00 UTC = 01:00:00 EST 1
+    07:00:00 UTC = 02:00:00 EST 0
+
+The values of the :attr:`fold <datetime.datetime.fold>` attribute have the
+value `0`  all instances except those that represent the second
+(chronologically) moment in time in an ambiguous case.
+
+.. seealso::
+
+  :pep:`495` -- Local Time Disambiguation
+     PEP written by Alexander Belopolsky and Tim Peters, implementation
+     by Alexander Belopolsky.
+
+
 .. _whatsnew36-pep529:
 
 PEP 529: Change Windows filesystem encoding to UTF-8
@@ -489,10 +550,11 @@
 
 Attributes in a class definition body have a natural ordering: the same
 order in which the names appear in the source.  This order is now
-preserved in the new class's ``__dict__`` attribute.
+preserved in the new class's :attr:`~object.__dict__` attribute.
 
 Also, the effective default class *execution* namespace (returned from
-``type.__prepare__()``) is now an insertion-order-preserving mapping.
+:ref:`type.__prepare__() <prepare>`) is now an insertion-order-preserving
+mapping.
 
 .. seealso::
 
@@ -523,16 +585,16 @@
 `pioneered by PyPy <https://morepypy.blogspot.com/2015/01/faster-more-memory-efficient-and-more.html>`_.
 The memory usage of the new :func:`dict` is between 20% and 25% smaller
 compared to Python 3.5.
-:pep:`468` (Preserving the order of ``**kwargs`` in a function.) is
-implemented by this. The order-preserving aspect of this new
-implementation is considered an implementation detail and should
-not be relied upon (this may change in the future, but it is desired
-to have this new dict implementation in the language for a few
-releases before changing the language spec to mandate
+
+The order-preserving aspect of this new implementation is considered an
+implementation detail and should not be relied upon (this may change in
+the future, but it is desired to have this new dict implementation in
+the language for a few releases before changing the language spec to mandate
 order-preserving semantics for all current and future Python
 implementations; this also helps preserve backwards-compatibility
 with older versions of the language where random iteration order is
 still in effect, e.g. Python 3.5).
+
 (Contributed by INADA Naoki in :issue:`27350`. Idea
 `originally suggested by Raymond Hettinger
 <https://mail.python.org/pipermail/python-dev/2012-December/123028.html>`_.)
@@ -545,7 +607,7 @@
 
 While Python provides extensive support to customize how code
 executes, one place it has not done so is in the evaluation of frame
-objects. If you wanted some way to intercept frame evaluation in
+objects.  If you wanted some way to intercept frame evaluation in
 Python there really wasn't any way without directly manipulating
 function pointers for defined functions.
 
@@ -567,17 +629,7 @@
      PEP written by Brett Cannon and Dino Viehland.
 
 
-.. _whatsnew36-pep509:
-
-PEP 509: Add a private version to dict
---------------------------------------
-
-Add a new private version to the builtin ``dict`` type, incremented at
-each dictionary creation and at each dictionary change, to implement
-fast guards on namespaces.
-
-(Contributed by Victor Stinner in :issue:`26058`.)
-
+.. _whatsnew36-pythonmalloc:
 
 PYTHONMALLOC environment variable
 ---------------------------------
@@ -691,34 +743,77 @@
 
 * Long sequences of repeated traceback lines are now abbreviated as
   ``"[Previous line repeated {count} more times]"`` (see
-  :ref:`py36-traceback` for an example).
+  :ref:`whatsnew36-traceback` for an example).
   (Contributed by Emanuel Barry in :issue:`26823`.)
 
 * Import now raises the new exception :exc:`ModuleNotFoundError`
   (subclass of :exc:`ImportError`) when it cannot find a module.  Code
   that current checks for ImportError (in try-except) will still work.
+  (Contributed by Eric Snow in :issue:`15767`.)
+
+* Class methods relying on zero-argument ``super()`` will now work correctly
+  when called from metaclass methods during class creation.
+  (Contributed by Martin Teichmann in :issue:`23722`.)
 
 
 New Modules
 ===========
 
+.. _whatsnew36-pep506:
+
 secrets
 -------
 
-The new :mod:`secrets` module.
+The main purpose of the new :mod:`secrets` module is to provide an obvious way
+to reliably generate cryptographically strong pseudo-random values suitable
+for managing secrets, such as account authentication, tokens, and similar.
+
+.. warning::
+
+  Note that the pseudo-random generators in the :mod:`random` module
+  should *NOT* be used for security purposes.  Use :mod:`secrets`
+  on Python 3.6+ and :func:`os.urandom()` on Python 3.5 and earlier.
+
+.. seealso::
+
+    :pep:`506` -- Adding A Secrets Module To The Standard Library
+      PEP written and implemented by Steven D'Aprano.
 
 
 Improved Modules
 ================
 
+array
+-----
+
+Exhausted iterators of :class:`array.array` will now stay exhausted even
+if the iterated array is extended.  This is consistent with the behavior
+of other mutable sequences.
+
+Contributed by Serhiy Storchaka in :issue:`26492`.
+
+ast
+---
+
+The new :class:`ast.Constant` AST node has been added.  It can be used
+by external AST optimizers for the purposes of constant folding.
+
+Contributed by Victor Stinner in :issue:`26146`.
+
+
 asyncio
 -------
 
-Since the :mod:`asyncio` module is :term:`provisional <provisional api>`,
-all changes introduced in Python 3.6 have also been backported to Python
-3.5.x.
-
-Notable changes in the :mod:`asyncio` module since Python 3.5.0:
+Starting with Python 3.6 the ``asyncio`` is no longer provisional and its
+API is considered stable.
+
+Notable changes in the :mod:`asyncio` module since Python 3.5.0
+(all backported to 3.5.x due to the provisional status):
+
+* The :func:`~asyncio.get_event_loop` function has been changed to
+  always return the currently running loop when called from couroutines
+  and callbacks.
+  (Contributed by Yury Selivanov in :issue:`28613`.)
 
 * The :func:`~asyncio.ensure_future` function and all functions that
   use it, such as :meth:`loop.run_until_complete() <asyncio.BaseEventLoop.run_until_complete>`,
@@ -742,54 +837,165 @@
   loop implementations, such as
   `uvloop <https://github.com/MagicStack/uvloop>`_, to provide a faster
   :class:`asyncio.Future` implementation.
-  (Contributed by Yury Selivanov.)
+  (Contributed by Yury Selivanov in :issue:`27041`.)
 
 * New :meth:`loop.get_exception_handler() <asyncio.BaseEventLoop.get_exception_handler>`
   method to get the current exception handler.
-  (Contributed by Yury Selivanov.)
+  (Contributed by Yury Selivanov in :issue:`27040`.)
 
 * New :meth:`StreamReader.readuntil() <asyncio.StreamReader.readuntil>`
   method to read data from the stream until a separator bytes
   sequence appears.
   (Contributed by Mark Korenberg.)
 
+* The performance of :meth:`StreamReader.readexactly() <asyncio.StreamReader.readexactly>`
+  has been improved.
+  (Contributed by Mark Korenberg in :issue:`28370`.)
+
 * The :meth:`loop.getaddrinfo() <asyncio.BaseEventLoop.getaddrinfo>`
   method is optimized to avoid calling the system ``getaddrinfo``
   function if the address is already resolved.
   (Contributed by A. Jesse Jiryu Davis.)
 
+* The :meth:`BaseEventLoop.stop() <asyncio.BaseEventLoop.stop>`
+  method has been changed to stop the loop immediately after
+  the current iteration.  Any new callbacks scheduled as a result
+  of the last iteration will be discarded.
+  (Contributed by Guido van Rossum in :issue:`25593`.)
+
+* :meth:`Future.set_exception <asyncio.futures.Future.set_exception>`
+  will now raise :exc:`TypeError` when passed an instance of
+  :exc:`StopIteration` exception.
+  (Contributed by Chris Angelico in :issue:`26221`.)
+
+* New :meth:`Loop.connect_accepted_socket() <asyncio.BaseEventLoop.connect_accepted_socket>`
+  method to be used by servers that accept connections outside of asyncio,
+  but that use asyncio to handle them.
+  (Contributed by Jim Fulton in :issue:`27392`.)
+
+
+base64
+------
+
+The :func:`~base64.a85decode` function no longer requires the leading
+``'<~'`` characters in input when the *adobe* argument is set.
+(Contributed by Swati Jaiswal in :issue:`25913`.)
+
+
+binascii
+--------
+
+The :func:`~binascii.b2a_base64` function now accepts an optional *newline*
+keyword argument to control whether the newline character is appended to the
+return value.
+(Contributed by Victor Stinner in :issue:`25357`.)
+
+
+cmath
+-----
+
+The new :const:`cmath.tau` (τ) constant has been added.
+(Contributed by Lisa Roach in :issue:`12345`, see :pep:`628` for details.)
+
+New constants: :const:`cmath.inf` and :const:`cmath.nan` to
+match :const:`math.inf` and :const:`math.nan`, and also :const:`cmath.infj`
+and :const:`cmath.nanj` to match the format used by complex repr.
+(Contributed by Mark Dickinson in :issue:`23229`.)
+
+
+collections
+-----------
+
+The new :class:`~collections.Collection` abstract base class has been
+added to represent sized iterable container classes.
+
+The :func:`~collections.namedtuple` function now accepts an optional
+keyword argument *module*, which, when specified, is used for
+the ``__module__`` attribute of the returned named tuple class.
+(Contributed by Raymond Hettinger in :issue:`17941`.)
+
+The *verbose* and *rename* arguments for
+:func:`~collections.namedtuple` are now keyword-only.
+(Contributed by Raymond Hettinger in :issue:`25628`.)
+
+Recursive :class:`collections.deque` instances can now be pickled.
+(Contributed by Serhiy Storchaka in :issue:`26482`.)
+
+
+concurrent.futures
+------------------
+
+The :class:`ThreadPoolExecutor <concurrent.futures.thread.ThreadPoolExecutor`
+class constructor now accepts an optional *thread_name_prefix* argument
+to make it possible to customize the names of the threads created by the
+pool.
+(Contributed by Gregory P. Smith in :issue:`27664`.)
+
 
 contextlib
 ----------
 
 The :class:`contextlib.AbstractContextManager` class has been added to
-provide an abstract base class for context managers. It provides a
+provide an abstract base class for context managers.  It provides a
 sensible default implementation for `__enter__()` which returns
-``self`` and leaves `__exit__()` an abstract method. A matching
+``self`` and leaves `__exit__()` an abstract method.  A matching
 class has been added to the :mod:`typing` module as
 :class:`typing.ContextManager`.
 (Contributed by Brett Cannon in :issue:`25609`.)
 
 
-venv
-----
-
-:mod:`venv` accepts a new parameter ``--prompt``. This parameter provides an
-alternative prefix for the virtual environment. (Proposed by Łukasz.Balcerzak
-and ported to 3.6 by Stéphane Wirtel in :issue:`22829`.)
-
-
 datetime
 --------
 
+The :class:`~datetime.datetime` and :class:`~datetime.time` classes have
+the new :attr:`~time.fold` attribute used to disambiguate local time
+when necessary.  Many functions in the :mod:`datetime` have been
+updated to support local time disambiguation.
+See :ref:`Local Time Disambiguation <whatsnew36-pep495>` section for more
+information.
+(Contributed by Alexander Belopolsky in :issue:`24773`.)
+
 The :meth:`datetime.strftime() <datetime.datetime.strftime>` and
-:meth:`date.strftime() <datetime.date.strftime>` methods now support ISO 8601 date
-directives ``%G``, ``%u`` and ``%V``.
+:meth:`date.strftime() <datetime.date.strftime>` methods now support
+ISO 8601 date directives ``%G``, ``%u`` and ``%V``.
 (Contributed by Ashley Anderson in :issue:`12006`.)
 
-
-distutils.command.sdist
------------------------
+The :func:`datetime.isoformat() <datetime.datetime.isoformat>` function
+now accepts an optional *timespec* argument that specifies the number
+of additional components of the time value to include.
+(Contributed by Alessandro Cucci and Alexander Belopolsky in :issue:`19475`.)
+
+The :meth:`datetime.combine() <datetime.datetime.combine>` now
+accepts an optional *tzinfo* argument.
+(Contributed by Alexander Belopolsky in :issue:`27661`.)
+
+
+decimal
+-------
+
+New :meth:`Decimal.as_integer_ratio() <decimal.Decimal.as_integer_ratio>`
+method that returns a pair ``(n, d)`` of integers that represent the given
+:class:`~decimal.Decimal` instance as a fraction, in lowest terms and
+with a positive denominator::
+
+    >>> Decimal('-3.14').as_integer_ratio()
+    (-157, 50)
+
+(Contributed by Stefan Krah amd Mark Dickinson in :issue:`25928`.)
+
+
+dis
+---
+
+Disassembling a class now disassembles class and static
+methods.  (Contributed by Xiang Zhang in :issue:`26733`.)
+
+The disassembler now decodes ``FORMAT_VALUE`` argument.
+(Contributed by Serhiy Storchaka in :issue:`28317`.)
+
+
+distutils
+---------
 
 The ``default_format`` attribute has been removed from
 :class:`distutils.command.sdist.sdist` and the ``formats``
@@ -825,6 +1031,31 @@
 
 On Windows, added the ``'oem'`` encoding to use ``CP_OEMCP`` and the ``'ansi'``
 alias for the existing ``'mbcs'`` encoding, which uses the ``CP_ACP`` code page.
+(Contributed by Steve Dower in :issue:`27959`.)
+
+
+enum
+----
+
+Two new enumeration base classes have been added to the :mod:`enum` module:
+:class:`~enum.Flag` and :class:`~enum.IntFlags`.  Both are used to define
+constants that can be combined using the bitwise operators.
+(Contributed by Ethan Furman in :issue:`23591`.)
+
+Many standard library modules have been updated to use the
+:class:`~enum.IntFlags` class for their constants.
+
+The new :class:`enum.auto` value can be used to assign values to enum
+members automatically::
+
+    >>> from enum import Enum, auto
+    >>> class Color(Enum):
+    ...     red = auto()
+    ...     blue = auto()
+    ...     green = auto()
+    ...
+    >>> list(Color)
+    [<Color.red: 1>, <Color.blue: 2>, <Color.green: 3>]
 
 
 faulthandler
@@ -835,12 +1066,17 @@
 :issue:`23848`.)
 
 
+fileinput
+---------
+
+:func:`~fileinput.hook_encoded` now supports the *errors* argument.
+(Contributed by Joseph Hackman in :issue:`25788`.)
+
+
 hashlib
 -------
 
-:mod:`hashlib` supports OpenSSL 1.1.0. The minimum recommend version is 1.0.2.
-It has been tested with 0.9.8zc, 0.9.8zh and 1.0.1t as well as LibreSSL 2.3
-and 2.4.
+:mod:`hashlib` supports OpenSSL 1.1.0.  The minimum recommend version is 1.0.2.
 (Contributed by Christian Heimes in :issue:`26470`.)
 
 BLAKE2 hash functions were added to the module. :func:`~hashlib.blake2b`
@@ -872,16 +1108,35 @@
 idlelib and IDLE
 ----------------
 
-The idlelib package is being modernized and refactored to make IDLE look and work better and to make the code easier to understand, test, and improve. Part of making IDLE look better, especially on Linux and Mac, is using ttk widgets, mostly in the dialogs.  As a result, IDLE no longer runs with tcl/tk 8.4.  It now requires tcl/tk 8.5 or 8.6.  We recommend running the latest release of either.
-
-'Modernizing' includes renaming and consolidation of idlelib modules. The renaming of files with partial uppercase names is similar to the renaming of, for instance, Tkinter and TkFont to tkinter and tkinter.font in 3.0.  As a result, imports of idlelib files that worked in 3.5 will usually not work in 3.6.  At least a module name change will be needed (see idlelib/README.txt), sometimes more.  (Name changes contributed by Al Swiegart and Terry Reedy in :issue:`24225`.  Most idlelib patches since have been and will be part of the process.)
-
-In compensation, the eventual result with be that some idlelib classes will be easier to use, with better APIs and docstrings explaining them.  Additional useful information will be added to idlelib when available.
+The idlelib package is being modernized and refactored to make IDLE look and
+work better and to make the code easier to understand, test, and improve. Part
+of making IDLE look better, especially on Linux and Mac, is using ttk widgets,
+mostly in the dialogs.  As a result, IDLE no longer runs with tcl/tk 8.4.  It
+now requires tcl/tk 8.5 or 8.6.  We recommend running the latest release of
+either.
+
+'Modernizing' includes renaming and consolidation of idlelib modules. The
+renaming of files with partial uppercase names is similar to the renaming of,
+for instance, Tkinter and TkFont to tkinter and tkinter.font in 3.0.  As a
+result, imports of idlelib files that worked in 3.5 will usually not work in
+3.6.  At least a module name change will be needed (see idlelib/README.txt),
+sometimes more.  (Name changes contributed by Al Swiegart and Terry Reedy in
+:issue:`24225`.  Most idlelib patches since have been and will be part of the
+process.)
+
+In compensation, the eventual result with be that some idlelib classes will be
+easier to use, with better APIs and docstrings explaining them.  Additional
+useful information will be added to idlelib when available.
 
 
 importlib
 ---------
 
+Import now raises the new exception :exc:`ModuleNotFoundError`
+(subclass of :exc:`ImportError`) when it cannot find a module.  Code
+that current checks for ``ImportError`` (in try-except) will still work.
+(Contributed by Eric Snow in :issue:`15767`.)
+
 :class:`importlib.util.LazyLoader` now calls
 :meth:`~importlib.abc.Loader.create_module` on the wrapped loader, removing the
 restriction that :class:`importlib.machinery.BuiltinImporter` and
@@ -894,6 +1149,15 @@
 :term:`path-like object`.
 
 
+inspect
+-------
+
+The :func:`inspect.signature() <inspect.signature>` function now reports the
+implicit ``.0`` parameters generated by the compiler for comprehension and
+generator expression scopes as if they were positional-only parameters called
+``implicit0``. (Contributed by Jelle Zijlstra in :issue:`19611`.)
+
+
 json
 ----
 
@@ -902,9 +1166,38 @@
 (Contributed by Serhiy Storchaka in :issue:`17909`.)
 
 
+logging
+-------
+
+The new :meth:`WatchedFileHandler.reopenIfNeeded() <logging.handlers.WatchedFileHandler.reopenIfNeeded>`
+method has been added to add the ability to check if the log file needs to
+be reopened.
+(Contributed by Marian Horban in :issue:`24884`.)
+
+
+math
+----
+
+The tau (τ) constant has been added to the :mod:`math` and :mod:`cmath`
+modules.
+(Contributed by Lisa Roach in :issue:`12345`, see :pep:`628` for details.)
+
+
+multiprocessing
+---------------
+
+:ref:`Proxy Objects <multiprocessing-proxy_objects>` returned by
+:func:`multiprocessing.Manager` can now be nested.
+(Contributed by Davin Potts in :issue:`6766`.)
+
+
 os
 --
 
+See the summary for :ref:`PEP 519 <whatsnew36-pep519>` for details on how the
+:mod:`os` and :mod:`os.path` modules now support
+:term:`path-like objects <path-like object>`.
+
 A new :meth:`~os.scandir.close` method allows explicitly closing a
 :func:`~os.scandir` iterator.  The :func:`~os.scandir` iterator now
 supports the :term:`context manager` protocol.  If a :func:`scandir`
@@ -919,9 +1212,21 @@
 :func:`os.getrandom` function.
 (Contributed by Victor Stinner, part of the :pep:`524`)
 
-See the summary for :ref:`PEP 519 <whatsnew36-pep519>` for details on how the
-:mod:`os` and :mod:`os.path` modules now support
-:term:`path-like objects <path-like object>`.
+
+pathlib
+-------
+
+:mod:`pathlib` now supports :term:`path-like objects <path-like object>`.
+(Contributed by Brett Cannon in :issue:`27186`.)
+
+See the summary for :ref:`PEP 519 <whatsnew36-pep519>` for details.
+
+
+pdb
+---
+
+The :class:`~pdb.Pdb` class constructor has a new optional *readrc* argument
+to control whether ``.pdbrc`` files should be read.
 
 
 pickle
@@ -933,6 +1238,34 @@
 Storchaka in :issue:`24164`.)
 
 
+pickletools
+-----------
+
+:func:`pickletools.dis()` now outputs implicit memo index for the
+``MEMOIZE`` opcode.
+(Contributed by Serhiy Storchaka in :issue:`25382`.)
+
+
+pydoc
+-----
+
+The :mod:`pydoc` module has learned to respect the ``MANPAGER``
+environment variable.
+(Contributed by Matthias Klose in :issue:`8637`.)
+
+:func:`help` and :mod:`pydoc` can now list named tuple fields in the
+order they were defined rather than alphabetically.
+(Contributed by Raymond Hettinger in :issue:`24879`.)
+
+
+random
+-------
+
+The new :func:`~random.choices` function returns a list of elements of
+specified size from the given population with optional weights.
+(Contributed by Raymond Hettinger in :issue:`18844`.)
+
+
 re
 --
 
@@ -945,6 +1278,11 @@
 equivalent to ``group()``.  So ``mo['name']`` is now equivalent to
 ``mo.group('name')``.  (Contributed by Eric Smith in :issue:`24454`.)
 
+:class:`~re.Match` objects in the now support
+:meth:`index-like objects <object.__index__>` as group
+indices.
+(Contributed by Jeroen Demeyer and Xiang Zhang in :issue:`27177`.)
+
 
 readline
 --------
@@ -966,6 +1304,16 @@
 an instance were excluded.  (Contributed by Martin Panter in :issue:`25590`.)
 
 
+shlex
+-----
+
+The :class:`~shlex.shlex` has much
+:ref:`improved shell compatibility <improved-shell-compatibility>`
+through the new *punctuation_chars* argument to control which characters
+are treated as punctuation.
+(Contributed by Vinay Sajip in :issue:`1521950`.)
+
+
 site
 ----
 
@@ -984,20 +1332,25 @@
 socket
 ------
 
-The :func:`~socket.socket.ioctl` function now supports the :data:`~socket.SIO_LOOPBACK_FAST_PATH`
-control code.
+The :func:`~socket.socket.ioctl` function now supports the
+:data:`~socket.SIO_LOOPBACK_FAST_PATH` control code.
 (Contributed by Daniel Stokes in :issue:`26536`.)
 
 The :meth:`~socket.socket.getsockopt` constants ``SO_DOMAIN``,
 ``SO_PROTOCOL``, ``SO_PEERSEC``, and ``SO_PASSSEC`` are now supported.
 (Contributed by Christian Heimes in :issue:`26907`.)
 
+The :meth:`~socket.socket.setsockopt` now supports the
+``setsockopt(level, optname, None, optlen: int)`` form.
+(Contributed by Christian Heimes in issue:`27744`.)
+
 The socket module now supports the address family
 :data:`~socket.AF_ALG` to interface with Linux Kernel crypto API. ``ALG_*``,
 ``SOL_ALG`` and :meth:`~socket.socket.sendmsg_afalg` were added.
 (Contributed by Christian Heimes in :issue:`27744` with support from
 Victor Stinner.)
 
+
 socketserver
 ------------
 
@@ -1013,16 +1366,15 @@
 calling :meth:`~io.BufferedIOBase.write` is now guaranteed to send the
 data in full.  (Contributed by Martin Panter in :issue:`26721`.)
 
+
 ssl
 ---
 
-:mod:`ssl` supports OpenSSL 1.1.0. The minimum recommend version is 1.0.2.
-It has been tested with 0.9.8zc, 0.9.8zh and 1.0.1t as well as LibreSSL 2.3
-and 2.4.
+:mod:`ssl` supports OpenSSL 1.1.0.  The minimum recommend version is 1.0.2.
 (Contributed by Christian Heimes in :issue:`26470`.)
 
 3DES has been removed from the default cipher suites and ChaCha20 Poly1305
-cipher suites are now in the right position.
+cipher suites have been added.
 (Contributed by Christian Heimes in :issue:`27850` and :issue:`27766`.)
 
 :class:`~ssl.SSLContext` has better default configuration for options
@@ -1030,11 +1382,14 @@
 (Contributed by Christian Heimes in :issue:`28043`.)
 
 SSL session can be copied from one client-side connection to another
-with :class:`~ssl.SSLSession`. TLS session resumption can speed up
-the initial handshake, reduce latency and improve performance
+with the new :class:`~ssl.SSLSession` class.  TLS session resumption can
+speed up the initial handshake, reduce latency and improve performance
 (Contributed by Christian Heimes in :issue:`19500` based on a draft by
 Alex Warhawk.)
 
+The new :meth:`~ssl.SSLContext.get_ciphers` method can be used to
+get a list of enabled ciphers in order of cipher priority.
+
 All constants and flags have been converted to :class:`~enum.IntEnum` and
 :class:`~enum.IntFlags`.
 (Contributed by Christian Heimes in :issue:`28025`.)
@@ -1047,6 +1402,22 @@
 no longer case a SystemError.
 (Contributed by Christian Heimes in :issue:`27691`.)
 
+
+statistics
+----------
+
+A new :func:`~statistics.harmonic_mean` function has been added.
+(Contributed by Steven D'Aprano in :issue:`27181`.)
+
+
+struct
+------
+
+:mod:`struct` now supports IEEE 754 half-precision floats via the ``'e'``
+format specifier.
+(Contributed by Eli Stevens, Mark Dickinson in :issue:`11734`.)
+
+
 subprocess
 ----------
 
@@ -1059,6 +1430,22 @@
 The :class:`subprocess.Popen` constructor and all functions that pass arguments
 through to it now accept *encoding* and *errors* arguments. Specifying either
 of these will enable text mode for the *stdin*, *stdout* and *stderr* streams.
+(Contributed by Steve Dower in :issue:`6135`.)
+
+
+sys
+---
+
+The new :func:`~sys.getfilesystemencodeerrors` function returns the name of
+the error mode used to convert between Unicode filenames and bytes filenames.
+(Contributed by Steve Dower in :issue:`27781`.)
+
+On Windows the return value of the :func:`~sys.getwindowsversion` function
+now includes the *platform_version* field which contains the accurate major
+version, minor version and build number of the current operating system,
+rather than the version that is being emulated for the process
+(Contributed by Steve Dower in :issue:`27932`.)
+
 
 telnetlib
 ---------
@@ -1067,6 +1454,26 @@
 Stéphane Wirtel in :issue:`25485`).
 
 
+time
+----
+
+The :class:`~time.struct_time` attributes :attr:`tm_gmtoff` and
+:attr:`tm_zone` are now available on all platforms.
+
+
+timeit
+------
+
+The new :meth:`Timer.autorange() <timeit.Timer.autorange>` convenience
+method has been added to call :meth:`Timer.timeit() <timeit.Timer.timeit>`
+repeatedly so that the total run time is greater or equal to 200 milliseconds.
+(Contributed by Steven D'Aprano in :issue:`6422`.)
+
+:mod:`timeit` now warns when there is substantial (4x) variance
+between best and worst times.
+(Contributed by Serhiy Storchaka in :issue:`23552`.)
+
+
 tkinter
 -------
 
@@ -1080,7 +1487,7 @@
 (Contributed by Serhiy Storchaka in :issue:`22115`).
 
 
-.. _py36-traceback:
+.. _whatsnew36-traceback:
 
 traceback
 ---------
@@ -1103,19 +1510,69 @@
 (Contributed by Emanuel Barry in :issue:`26823`.)
 
 
+tracemalloc
+-----------
+
+The :mod:`tracemalloc` module now supports tracing memory allocations in
+multiple different address spaces.
+
+The new :class:`~tracemalloc.DomainFilter` filter class has been added
+to filter block traces by their address space (domain).
+
+(Contributed by Victor Stinner in :issue:`26588`.)
+
+
+.. _whatsnew36-typing:
+
 typing
 ------
 
+Starting with Python 3.6 the :mod:`typing` module is no longer provisional
+and its API is considered stable.
+
+Since the :mod:`typing` module was :term:`provisional <provisional api>`
+in Python 3.5, all changes introduced in Python 3.6 have also been
+backported to Python 3.5.x.
+
 The :class:`typing.ContextManager` class has been added for
 representing :class:`contextlib.AbstractContextManager`.
 (Contributed by Brett Cannon in :issue:`25609`.)
 
+The :class:`typing.Collection` class has been added for
+representing :class:`collections.abc.Collection`.
+(Contributed by Ivan Levkivskyi in :issue:`27598`.)
+
+The :const:`typing.ClassVar` type construct has been added to
+mark class variables.  As introduced in :pep:`526`, a variable annotation
+wrapped in ClassVar indicates that a given attribute is intended to be used as
+a class variable and should not be set on instances of that class.
+(Contributed by Ivan Levkivskyi in `Github #280
+<https://github.com/python/typing/issues/280>`_.)
+
+A new :const:`~typing.TYPE_CHECKING` constant that is assumed to be
+``True`` by the static type chekers, but is ``False`` at runtime.
+(Contributed by Guido van Rossum in `Github #230
+<https://github.com/python/typing/issues/230>`_.)
+
+A new :func:`~typing.NewType` helper function has been added to create
+lightweight distinct types for annotations::
+
+    from typing import NewType
+
+    UserId = NewType('UserId', int)
+    some_id = UserId(524313)
+
+The static type checker will treat the new type as if it were a subclass
+of the original type.  (Contributed by Ivan Levkivskyi in `Github #189
+<https://github.com/python/typing/issues/189>`_.)
+
 
 unicodedata
 -----------
 
-The internal database has been upgraded to use Unicode 9.0.0. (Contributed by
-Benjamin Peterson.)
+The :mod:`unicodedata` module now uses data from `Unicode 9.0.0
+<http://unicode.org/versions/Unicode9.0.0/>`_.
+(Contributed by Benjamin Peterson.)
 
 
 unittest.mock
@@ -1129,12 +1586,17 @@
   was called.
   (Contributed by Amit Saha in :issue:`26323`.)
 
+* The :meth:`Mock.reset_mock() <unittest.mock.Mock.reset_mock>` method
+  now has two optional keyword only arguments: *return_value* and
+  *side_effect*.
+  (Contributed by Kushal Das in :issue:`21271`.)
+
 
 urllib.request
 --------------
 
 If a HTTP request has a file or iterable body (other than a
-bytes object) but no Content-Length header, rather than
+bytes object) but no ``Content-Length`` header, rather than
 throwing an error, :class:`~urllib.request.AbstractHTTPHandler` now
 falls back to use chunked transfer encoding.
 (Contributed by Demian Brecht and Rolf Krahl in :issue:`12319`.)
@@ -1148,6 +1610,14 @@
 (Contributed by Nikolay Bogoychev in :issue:`16099`.)
 
 
+venv
+----
+
+:mod:`venv` accepts a new parameter ``--prompt``. This parameter provides an
+alternative prefix for the virtual environment. (Proposed by Łukasz Balcerzak
+and ported to 3.6 by Stéphane Wirtel in :issue:`22829`.)
+
+
 warnings
 --------
 
@@ -1203,8 +1673,9 @@
 xmlrpc.client
 -------------
 
-The module now supports unmarshalling additional data types used by
-Apache XML-RPC implementation for numerics and ``None``.
+The :mod:`xmlrpc.client` module now supports unmarshalling
+additional data types used by Apache XML-RPC implementation
+for numerics and ``None``.
 (Contributed by Serhiy Storchaka in :issue:`26885`.)
 
 
@@ -1225,20 +1696,27 @@
 zlib
 ----
 
-The :func:`~zlib.compress` function now accepts keyword arguments.
-(Contributed by Aviv Palivoda in :issue:`26243`.)
-
-
-fileinput
----------
-
-:func:`~fileinput.hook_encoded` now supports the *errors* argument.
-(Contributed by Joseph Hackman in :issue:`25788`.)
+The :func:`~zlib.compress` and :func:`~zlib.decompress` functions now accept
+keyword arguments.
+(Contributed by Aviv Palivoda in :issue:`26243` and
+Xiang Zhang in :issue:`16764` respectively.)
 
 
 Optimizations
 =============
 
+* Python interpreter now uses 16-bit wordcode instead of bytecode which
+  made a number of opcode optimizations possible.
+  (Contributed by Demur Rumed with input and reviews from
+  Serhiy Storchaka and Victor Stinner in :issue:`26647` and :issue:`28050`.)
+
+* The :class:`Future <asyncio.futures.Future>` now has an optimized
+  C implementation.
+  (Contributed by Yury Selivanov and INADA Naoki in :issue:`26801`.)
+
+* The :class:`Task <asyncio.tasks.Task>` now has an optimized
+  C implementation. (Contributed by Yury Selivanov in :issue:`28544`.)
+
 * The ASCII decoder is now up to 60 times as fast for error handlers
   ``surrogateescape``, ``ignore`` and ``replace`` (Contributed
   by Victor Stinner in :issue:`24870`).
@@ -1291,12 +1769,23 @@
   it is now about 1.5--4 times faster.
   (Contributed by Serhiy Storchaka in :issue:`26032`).
 
+* :class:`xml.etree.ElementTree` parsing, iteration and deepcopy performance
+  has been significantly improved.
+  (Contributed by Serhiy Storchaka in :issue:`25638`, :issue:`25873`,
+  and :issue:`25869`.)
+
+* Creation of :class:`fractions.Fraction` instances from floats and
+  decimals is now 2 to 3 times faster.
+  (Contributed by Serhiy Storchaka in :issue:`25971`.)
+
 
 Build and C API Changes
 =======================
 
-* Python now requires some C99 support in the toolchain to build. For more
-  information, see :pep:`7`.
+* Python now requires some C99 support in the toolchain to build.
+  Most notably, Python now uses standard integer types and macros in
+  place of custom macros like ``PY_LONG_LONG``.
+  For more information, see :pep:`7` and :issue:`17884`.
 
 * Cross-compiling CPython with the Android NDK and the Android API level set to
   21 (Android 5.0 Lollilop) or greater, runs successfully. While Android is not
@@ -1307,8 +1796,13 @@
   will activate expensive optimizations like PGO.
   (Original patch by Alecsandru Patrascu of Intel in :issue:`26539`.)
 
+* The :term:`GIL <global interpreter lock>` must now be held when allocator
+  functions of :c:data:`PYMEM_DOMAIN_OBJ` (ex: :c:func:`PyObject_Malloc`) and
+  :c:data:`PYMEM_DOMAIN_MEM` (ex: :c:func:`PyMem_Malloc`) domains are called.
+
 * New :c:func:`Py_FinalizeEx` API which indicates if flushing buffered data
-  failed (:issue:`5319`).
+  failed.
+  (Contributed by Martin Panter in :issue:`5319`.)
 
 * :c:func:`PyArg_ParseTupleAndKeywords` now supports :ref:`positional-only
   parameters <positional-only_parameter>`.  Positional-only parameters are
@@ -1319,112 +1813,178 @@
   as ``"[Previous line repeated {count} more times]"``.
   (Contributed by Emanuel Barry in :issue:`26823`.)
 
+* The new :c:func:`PyErr_SetImportErrorSubclass` function allows for
+  specifying a subclass of :exc:`ImportError` to raise.
+  (Contributed by Eric Snow in :issue:`15767`.)
+
+* The new :c:func:`PyErr_ResourceWarning` function can be used to generate
+  the :exc:`ResourceWarning` providing the source of the resource allocation.
+  (Contributed by Victor Stinner in :issue:`26567`.)
+
+* The new :c:func:`PyOS_FSPath` function returns the file system
+  representation of a :term:`path-like object`.
+  (Contributed by Brett Cannon in :issue:`27186`.)
+
+* The :c:func:`PyUnicode_FSConverter` and :c:func:`PyUnicode_FSDecoder`
+  functions will now accept :term:`path-like objects <path-like object>`.
+
+
 
 Deprecated
 ==========
 
+New Keywords
+------------
+
+``async`` and ``await`` are not recommended to be used as variable, class,
+function or module names.  Introduced by :pep:`492` in Python 3.5, they will
+become proper keywords in Python 3.7.  Starting in Python 3.6, the use of
+``async`` or ``await`` as names will generate a :exc:`DeprecationWarning`.
+
+
+Deprecated Python behavior
+--------------------------
+
+Raising the :exc:`StopIteration` exception inside a generator will now
+generate a :exc:`DeprecationWarning`, and will trigger a :exc:`RuntimeError`
+in Python 3.7.  See :ref:`whatsnew-pep-479` for details.
+
+The :meth:`__aiter__` method is now expected to return an asynchronous
+iterator directly instead of returning an awaitable as previously.
+Doing the former will trigger a :exc:`DeprecationWarning`.  Backward
+compatibility will be removed in Python 3.7.
+(Contributed by Yury Selivanov in :issue:`27243`.)
+
+A backslash-character pair that is not a valid escape sequence now generates
+a :exc:`DeprecationWarning`.  Although this will eventually become a
+:exc:`SyntaxError`, that will not be for several Python releases.
+(Contributed by Emanuel Barry in :issue:`27364`.)
+
+When performing a relative import, falling back on ``__name__`` and
+``__path__`` from the calling module when ``__spec__`` or
+``__package__`` are not defined now raises an :exc:`ImportWarning`.
+(Contributed by Rose Ames in :issue:`25791`.)
+
+
+Deprecated Python modules, functions and methods
+------------------------------------------------
+
+asynchat
+~~~~~~~~
+
+The :mod:`asynchat` has been deprecated in favor of :mod:`asyncio`.
+(Contributed by Mariatta in :issue:`25002`.)
+
+
+asyncore
+~~~~~~~~
+
+The :mod:`asyncore` has been deprecated in favor of :mod:`asyncio`.
+(Contributed by Mariatta in :issue:`25002`.)
+
+
+dbm
+~~~
+
+Unlike other :mod:`dbm` implementations, the :mod:`dbm.dumb` module
+creates databases with the ``'rw'`` mode and allows modifying the database
+opened with the ``'r'`` mode.  This behavior is now deprecated and will
+be removed in 3.8.
+(Contributed by Serhiy Storchaka in :issue:`21708`.)
+
+
+distutils
+~~~~~~~~~
+
+The undocumented ``extra_path`` argument to the
+:class:`~distutils.Distribution` constructor is now considered deprecated
+and will raise a warning if set.   Support for this parameter will be
+removed in a future Python release.  See :issue:`27919` for details.
+
+
+grp
+~~~
+
+The support of non-integer arguments in :func:`~grp.getgrgid` has been
+deprecated.
+(Contributed by Serhiy Storchaka in :issue:`26129`.)
+
+
+importlib
+~~~~~~~~~
+
+The :meth:`importlib.machinery.SourceFileLoader.load_module` and
+:meth:`importlib.machinery.SourcelessFileLoader.load_module` methods
+are now deprecated. They were the only remaining implementations of
+:meth:`importlib.abc.Loader.load_module` in :mod:`importlib` that had not
+been deprecated in previous versions of Python in favour of
+:meth:`importlib.abc.Loader.exec_module`.
+
+os
+~~
+
+Undocumented support of general :term:`bytes-like objects <bytes-like object>`
+as paths in :mod:`os` functions, :func:`compile` and similar functions is
+now deprecated.
+(Contributed by Serhiy Storchaka in :issue:`25791` and :issue:`26754`.)
+
+re
+~~
+
+Support for inline flags ``(?letters)`` in the middle of the regular
+expression has been deprecated and will be removed in a future Python
+version.  Flags at the start of a regular expression are still allowed.
+(Contributed by Serhiy Storchaka in :issue:`22493`.)
+
+ssl
+~~~
+
+OpenSSL 0.9.8, 1.0.0 and 1.0.1 are deprecated and no longer supported.
+In the future the :mod:`ssl` module will require at least OpenSSL 1.0.2 or
+1.1.0.
+
+SSL-related arguments like ``certfile``, ``keyfile`` and ``check_hostname``
+in :mod:`ftplib`, :mod:`http.client`, :mod:`imaplib`, :mod:`poplib`,
+and :mod:`smtplib` have been deprecated in favor of ``context``.
+(Contributed by Christian Heimes in :issue:`28022`.)
+
+A couple of protocols and functions of the :mod:`ssl` module are now
+deprecated. Some features will no longer be available in future versions
+of OpenSSL. Other features are deprecated in favor of a different API.
+(Contributed by Christian Heimes in :issue:`28022` and :issue:`26470`.)
+
+tkinter
+~~~~~~~
+
+The :mod:`tkinter.tix` module is now deprecated.  :mod:`tkinter` users
+should use :mod:`tkinter.ttk` instead.
+
+venv
+~~~~
+
+The ``pyvenv`` script has been deprecated in favour of ``python3 -m venv``.
+This prevents confusion as to what Python interpreter ``pyvenv`` is
+connected to and thus what Python interpreter will be used by the virtual
+environment.  (Contributed by Brett Cannon in :issue:`25154`.)
+
+
+Deprecated functions and types of the C API
+-------------------------------------------
+
+Undocumented functions :c:func:`PyUnicode_AsEncodedObject`,
+:c:func:`PyUnicode_AsDecodedObject`, :c:func:`PyUnicode_AsEncodedUnicode`
+and :c:func:`PyUnicode_AsDecodedUnicode` are deprecated now.
+Use :ref:`generic codec based API <codec-registry>` instead.
+
+
 Deprecated Build Options
 ------------------------
 
-The ``--with-system-ffi`` configure flag is now on by default on non-OSX UNIX
-platforms.  It may be disabled by using ``--without-system-ffi``, but using the
-flag is deprecated and will not be accepted in Python 3.7.  OSX is unaffected
-by this change.  Note that many OS distributors already use the
-``--with-system-ffi`` flag when building their system Python.
-
-
-New Keywords
-------------
-
-``async`` and ``await`` are not recommended to be used as variable, class,
-function or module names.  Introduced by :pep:`492` in Python 3.5, they will
-become proper keywords in Python 3.7.
-
-
-Deprecated Python modules, functions and methods
-------------------------------------------------
-
-* :meth:`importlib.machinery.SourceFileLoader.load_module` and
-  :meth:`importlib.machinery.SourcelessFileLoader.load_module` are now
-  deprecated. They were the only remaining implementations of
-  :meth:`importlib.abc.Loader.load_module` in :mod:`importlib` that had not
-  been deprecated in previous versions of Python in favour of
-  :meth:`importlib.abc.Loader.exec_module`.
-
-* The :mod:`tkinter.tix` module is now deprecated.  :mod:`tkinter` users should
-  use :mod:`tkinter.ttk` instead.
-
-
-Deprecated functions and types of the C API
--------------------------------------------
-
-* Undocumented functions :c:func:`PyUnicode_AsEncodedObject`,
-  :c:func:`PyUnicode_AsDecodedObject`, :c:func:`PyUnicode_AsEncodedUnicode`
-  and :c:func:`PyUnicode_AsDecodedUnicode` are deprecated now.
-  Use :ref:`generic codec based API <codec-registry>` instead.
-
-
-Deprecated features
--------------------
-
-* The ``pyvenv`` script has been deprecated in favour of ``python3 -m venv``.
-  This prevents confusion as to what Python interpreter ``pyvenv`` is
-  connected to and thus what Python interpreter will be used by the virtual
-  environment. (Contributed by Brett Cannon in :issue:`25154`.)
-
-* When performing a relative import, falling back on ``__name__`` and
-  ``__path__`` from the calling module when ``__spec__`` or
-  ``__package__`` are not defined now raises an :exc:`ImportWarning`.
-  (Contributed by Rose Ames in :issue:`25791`.)
-
-* Unlike to other :mod:`dbm` implementations, the :mod:`dbm.dumb` module
-  creates database in ``'r'`` and ``'w'`` modes if it doesn't exist and
-  allows modifying database in ``'r'`` mode.  This behavior is now deprecated
-  and will be removed in 3.8.
-  (Contributed by Serhiy Storchaka in :issue:`21708`.)
-
-* Undocumented support of general :term:`bytes-like objects <bytes-like object>`
-  as paths in :mod:`os` functions, :func:`compile` and similar functions is
-  now deprecated.
-  (Contributed by Serhiy Storchaka in :issue:`25791` and :issue:`26754`.)
-
-* The undocumented ``extra_path`` argument to a distutils Distribution
-  is now considered
-  deprecated, will raise a warning during install if set. Support for this
-  parameter will be dropped in a future Python release and likely earlier
-  through third party tools. See :issue:`27919` for details.
-
-* A backslash-character pair that is not a valid escape sequence now generates
-  a DeprecationWarning.  Although this will eventually become a SyntaxError,
-  that will not be for several Python releases.  (Contributed by Emanuel Barry
-  in :issue:`27364`.)
-
-* Inline flags ``(?letters)`` now should be used only at the start of the
-  regular expression.  Inline flags in the middle of the regular expression
-  affects global flags in Python :mod:`re` module.  This is an exception to
-  other regular expression engines that either apply flags to only part of
-  the regular expression or treat them as an error.  To avoid distinguishing
-  inline flags in the middle of the regular expression now emit a deprecation
-  warning.  It will be an error in future Python releases.
-  (Contributed by Serhiy Storchaka in :issue:`22493`.)
-
-* SSL-related arguments like ``certfile``, ``keyfile`` and ``check_hostname``
-  in :mod:`ftplib`, :mod:`http.client`, :mod:`imaplib`, :mod:`poplib`,
-  and :mod:`smtplib` have been deprecated in favor of ``context``.
-  (Contributed by Christian Heimes in :issue:`28022`.)
-
-* A couple of protocols and functions of the :mod:`ssl` module are now
-  deprecated. Some features will no longer be available in future versions
-  of OpenSSL. Other features are deprecated in favor of a different API.
-  (Contributed by Christian Heimes in :issue:`28022` and :issue:`26470`.)
-
-
-Deprecated Python behavior
---------------------------
-
-* Raising the :exc:`StopIteration` exception inside a generator will now generate a
-  :exc:`DeprecationWarning`, and will trigger a :exc:`RuntimeError` in Python 3.7.
-  See :ref:`whatsnew-pep-479` for details.
+The ``--with-system-ffi`` configure flag is now on by default on non-macOS
+UNIX platforms.  It may be disabled by using ``--without-system-ffi``, but
+using the flag is deprecated and will not be accepted in Python 3.7.
+macOS is unaffected by this change.  Note that many OS distributors already
+use the ``--with-system-ffi`` flag when building their system Python.
 
 
 Removed
@@ -1433,9 +1993,14 @@
 API and Feature Removals
 ------------------------
 
+* Unknown escapes consisting of ``'\'`` and an ASCII letter in
+  regular expressions will now cause an error.  The :const:`re.LOCALE`
+  flag can now only be used with binary patterns.
+
 * ``inspect.getmoduleinfo()`` was removed (was deprecated since CPython 3.3).
   :func:`inspect.getmodulename` should be used for obtaining the module
   name for a given path.
+  (Contributed by Yury Selivanov in :issue:`13248`.)
 
 * ``traceback.Ignore`` class and ``traceback.usage``, ``traceback.modname``,
   ``traceback.fullmodname``, ``traceback.find_lines_from_code``,
@@ -1460,6 +2025,8 @@
   script that created these modules is still available in the source
   distribution at :source:`Tools/scripts/h2py.py`.
 
+* The deprecated ``asynchat.fifo`` class has been removed.
+
 
 Porting to Python 3.6
 =====================
@@ -1480,6 +2047,10 @@
 Changes in the Python API
 -------------------------
 
+* :func:`open() <open>` will no longer allow combining the ``'U'`` mode flag
+  with ``'+'``.
+  (Contributed by Jeff Balogh and John O'Connor in :issue:`2091`.)
+
 * :mod:`sqlite3` no longer implicitly commit an open transaction before DDL
   statements.
 
@@ -1523,7 +2094,8 @@
   :mod:`mimetypes`, :mod:`optparse`, :mod:`plistlib`, :mod:`smtpd`,
   :mod:`subprocess`, :mod:`tarfile`, :mod:`threading` and
   :mod:`wave`.  This means they will export new symbols when ``import *``
-  is used.  See :issue:`23883`.
+  is used.
+  (Contributed by Joel Taddei and Jacek Kołodziej in :issue:`23883`.)
 
 * When performing a relative import, if ``__package__`` does not compare equal
   to ``__spec__.parent`` then :exc:`ImportWarning` is raised.
@@ -1546,8 +2118,8 @@
   :exc:`KeyError` if the user doesn't have privileges.
 
 * The :meth:`socket.socket.close` method now raises an exception if
-  an error (e.g. EBADF) was reported by the underlying system call.
-  See :issue:`26685`.
+  an error (e.g. ``EBADF``) was reported by the underlying system call.
+  (Contributed by Martin Panter in :issue:`26685`.)
 
 * The *decode_data* argument for :class:`smtpd.SMTPChannel` and
   :class:`smtpd.SMTPServer` constructors is now ``False`` by default.
@@ -1557,13 +2129,16 @@
   Code that has already been updated in accordance with the deprecation
   warning generated by 3.5 will not be affected.
 
-* All optional parameters of the :func:`~json.dump`, :func:`~json.dumps`,
+* All optional arguments of the :func:`~json.dump`, :func:`~json.dumps`,
   :func:`~json.load` and :func:`~json.loads` functions and
   :class:`~json.JSONEncoder` and :class:`~json.JSONDecoder` class
   constructors in the :mod:`json` module are now :ref:`keyword-only
   <keyword-only_parameter>`.
   (Contributed by Serhiy Storchaka in :issue:`18726`.)
 
+* Subclasses of :class:`type` which don't override ``type.__new__`` may no
+  longer use the one-argument form to get the type of an object.
+
 * As part of :pep:`487`, the handling of keyword arguments passed to
   :class:`type` (other than the metaclass hint, ``metaclass``) is now
   consistently delegated to :meth:`object.__init_subclass__`. This means that
@@ -1592,7 +2167,63 @@
   header field has been specified and the request body is a file object,
   it is now sent with HTTP 1.1 chunked encoding. If a file object has to
   be sent to a HTTP 1.0 server, the Content-Length value now has to be
-  specified by the caller. See :issue:`12319`.
+  specified by the caller.
+  (Contributed by Demian Brecht and Rolf Krahl with tweaks from
+  Martin Panter in :issue:`12319`.)
+
+* The :class:`~csv.DictReader` now returns rows of type
+  :class:`~collections.OrderedDict`.
+  (Contributed by Steve Holden in :issue:`27842`.)
+
+* The :const:`crypt.METHOD_CRYPT` will no longer be added to ``crypt.methods``
+  if unsupported by the platform.
+  (Contributed by Victor Stinner in :issue:`25287`.)
+
+* The *verbose* and *rename* arguments for
+  :func:`~collections.namedtuple` are now keyword-only.
+  (Contributed by Raymond Hettinger in :issue:`25628`.)
+
+* The :meth:`~cgi.FieldStorage.read_multi` method now ignores the
+  ``Content-Length`` header in part headers.
+  (Contributed by Peter Landry in :issue:`24764`.)
+
+* On Linux, :func:`ctypes.util.find_library` now looks in
+  ``LD_LIBRARY_PATH`` for shared libraries.
+  (Contributed by Vinay Sajip in :issue:`9998`.)
+
+* The :meth:`datetime.fromtimestamp() <datetime.datetime.fromtimestamp>` and
+  :meth:`datetime.utcfromtimestamp() <datetime.datetime.utcfromtimestamp>`
+  methods now round microseconds to nearest with ties going to
+  nearest even integer (``ROUND_HALF_EVEN``), instead of
+  rounding towards negative infinity (``ROUND_FLOOR``).
+  (Contributed by Victor Stinner in :issue:`23517`.)
+
+* The :class:`imaplib.IMAP4` class now handles flags containing the
+  ``']'`` character in messages sent from the server to improve
+  real-world compatibility.
+  (Contributed by Lita Cho in :issue:`21815`.)
+
+* The :func:`mmap.write() <mmap.write>` function now returns the number
+  of bytes written like other write methods.
+  (Contributed by Jakub Stasiak in :issue:`26335`.)
+
+* The :func:`pkgutil.iter_modules` and :func:`pkgutil.walk_packages`
+  functions now return :class:`~pkgutil.ModuleInfo` named tuples.
+  (Contributed by Ramchandra Apte in :issue:`17211`.)
+
+* :func:`re.sub` now raises an error for invalid numerical group
+  reference in replacement template even if the pattern is not
+  found in the string.  Error message for invalid group reference
+  now includes the group index and the position of the reference.
+  (Contributed by SilentGhost, Serhiy Storchaka in :issue:`25953`.)
+
+* :class:`zipfile.ZipFile` will now raise :exc:`NotImplementedError` for
+  unrecognized compression values.  Previously a plain :exc:`RuntimeError`
+  was raised.  Additionally, calling :class:`~zipfile.ZipFile` methods or
+  on a closed ZipFile or calling :meth:`~zipfile.ZipFile.write` methods
+  on a ZipFile created with mode ``'r'`` will raise a :exc:`ValueError`.
+  Previously, a :exc:`RuntimeError` was raised in those scenarios.
+
 
 Changes in the C API
 --------------------

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list