summaryrefslogtreecommitdiffstats
path: root/Doc
diff options
context:
space:
mode:
authorElvis Pranskevichus <elvis@magic.io>2018-05-20 03:15:06 (GMT)
committerYury Selivanov <yury@magic.io>2018-05-20 03:15:06 (GMT)
commit63536bd286097e770909052052a21804a5e09b66 (patch)
treefe233adb6cb63bac4c0bdc9811fd52cab12fc9f4 /Doc
parent6b0d09b8f06e6967fa3d41425cecf6499a353a6d (diff)
downloadcpython-63536bd286097e770909052052a21804a5e09b66.zip
cpython-63536bd286097e770909052052a21804a5e09b66.tar.gz
cpython-63536bd286097e770909052052a21804a5e09b66.tar.bz2
bpo-32996: The bulk of What's New in Python 3.7 (GH-6978)
Diffstat (limited to 'Doc')
-rw-r--r--Doc/library/asyncio-task.rst2
-rw-r--r--Doc/library/ensurepip.rst3
-rw-r--r--Doc/reference/compound_stmts.rst2
-rw-r--r--Doc/whatsnew/3.7.rst2136
4 files changed, 1549 insertions, 594 deletions
diff --git a/Doc/library/asyncio-task.rst b/Doc/library/asyncio-task.rst
index db0e04a..2488a90 100644
--- a/Doc/library/asyncio-task.rst
+++ b/Doc/library/asyncio-task.rst
@@ -92,7 +92,7 @@ Coroutines (and tasks) can only run when the event loop is running.
used in a callback-style code, wrap its result with :func:`ensure_future`.
-.. function:: asyncio.run(coro, \*, debug=False)
+.. function:: run(coro, \*, debug=False)
This function runs the passed coroutine, taking care of
managing the asyncio event loop and finalizing asynchronous
diff --git a/Doc/library/ensurepip.rst b/Doc/library/ensurepip.rst
index ed22180..c797f63 100644
--- a/Doc/library/ensurepip.rst
+++ b/Doc/library/ensurepip.rst
@@ -78,9 +78,6 @@ options:
Providing both of the script selection options will trigger an exception.
-.. versionchanged:: 3.7.0
- The exit status is non-zero if the command fails.
-
Module API
----------
diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst
index 153e85b..5076e5d 100644
--- a/Doc/reference/compound_stmts.rst
+++ b/Doc/reference/compound_stmts.rst
@@ -684,6 +684,8 @@ can be used to create instance variables with different implementation details.
:pep:`3129` - Class Decorators
+.. _async:
+
Coroutines
==========
diff --git a/Doc/whatsnew/3.7.rst b/Doc/whatsnew/3.7.rst
index 24a5b3d..09a6eac 100644
--- a/Doc/whatsnew/3.7.rst
+++ b/Doc/whatsnew/3.7.rst
@@ -2,6 +2,8 @@
What's New In Python 3.7
****************************
+:Editor: Elvis Pranskevichus <elvis@magic.io>
+
.. Rules for maintenance:
* Anyone can add text to this document. Do not spend very much time
@@ -39,34 +41,141 @@
module.
(Contributed by P.Y. Developer in :issue:`12345`.)
- This saves the maintainer the effort of going through the Mercurial log
+ This saves the maintainer the effort of going through the Git log
when researching a change.
This article explains the new features in Python 3.7, compared to 3.6.
For full details, see the :ref:`changelog <changelog>`.
-.. note::
-
- Prerelease users should be aware that this document is currently in draft
- form. It will be updated substantially as Python 3.7 moves towards release,
- so it's worth checking back even after reading earlier versions.
-
-Summary -- Release highlights
+Summary -- Release Highlights
=============================
.. This section singles out the most important changes in Python 3.7.
Brevity is key.
+New syntax features:
+
+* :ref:`PEP 563 <whatsnew37-pep563>`, postponed evaluation of type annotations.
+
+Backwards incompatible syntax changes:
+
+* :keyword:`async` and :keyword:`await` are now reserved keywords.
+
+New library modules:
+
+* :mod:`contextvars`: :ref:`PEP 567 -- Context Variables <whatsnew37-pep567>`
+* :mod:`dataclasses`: :ref:`PEP 557 -- Data Classes <whatsnew37-pep557>`
+* :ref:`whatsnew37_importlib_resources`
+
+New built-in features:
+
+* :ref:`PEP 553 <whatsnew37-pep553>`, the new :func:`breakpoint` function.
+
+Python data model improvements:
+
+* :ref:`PEP 562 <whatsnew37-pep562>`, customization of access to
+ module attributes.
+
+* :ref:`PEP 560 <whatsnew37-pep560>`, core support for typing module and
+ generic types.
+
+* the insertion-order preservation nature of :ref:`dict <typesmapping>`
+ objects `has been declared`_ to be an official
+ part of the Python language spec.
+
+.. _has been declared: https://mail.python.org/pipermail/python-dev/2017-December/151283.html
+
+Significant improvements in the standard library:
+
+* The :mod:`asyncio` module has received new features, significant
+ :ref:`usability and performance improvements <whatsnew37_asyncio>`.
-.. PEP-sized items next.
+* The :mod:`time` module gained support for
+ :ref:`functions with nanosecond resolution <whatsnew37-pep564>`.
+CPython implementation improvements:
+
+* :ref:`PEP 552 <whatsnew37-pep552>`, deterministic .pycs
+* :ref:`PEP 538 <whatsnew37-pep538>`, legacy C locale coercion
+* :ref:`PEP 540 <whatsnew37-pep540>`, forced UTF-8 runtime mode
+* :ref:`the new development runtime mode <whatsnew37-devmode>`
+* :ref:`PEP 565 <whatsnew37-pep565>`, improved :exc:`DeprecationWarning`
+ handling
+
+C API improvements:
+
+* :ref:`PEP 539 <whatsnew37-pep539>`, new C API for thread-local storage
+
+Documentation improvements:
+
+* :ref:`PEP 545 <whatsnew37-pep545>`, Python documentation translations
+* New documentation translations: `Japanese <https://docs.python.org/ja/>`_,
+ `French <https://docs.python.org/fr/>`_, and
+ `Korean <https://docs.python.org/ko/>`_.
+
+This release features notable performance improvements in many areas.
+The :ref:`whatsnew37-perf` section lists them in detail.
+
+For a list of changes that may affect compatibility with previous Python
+releases please refer to the :ref:`porting-to-python-37` section.
New Features
============
+.. _whatsnew37-pep563:
+
+PEP 563: Postponed Evaluation of Annotations
+--------------------------------------------
+
+The advent of type hints in Python uncovered two glaring usability issues
+with the functionality of annotations added in :pep:`3107` and refined
+further in :pep:`526`:
+
+* annotations could only use names which were already available in the
+ current scope, in other words they didn't support forward references
+ of any kind; and
+
+* annotating source code had adverse effects on startup time of Python
+ programs.
+
+Both of these issues are fixed by postponing the evaluation of
+annotations. Instead of compiling code which executes expressions in
+annotations at their definition time, the compiler stores the annotation
+in a string form equivalent to the AST of the expression in question.
+If needed, annotations can be resolved at runtime using
+:func:`typing.get_type_hints`. In the common case where this is not
+required, the annotations are cheaper to store (since short strings
+are interned by the interpreter) and make startup time faster.
+
+Usability-wise, annotations now support forward references, making the
+following syntax valid::
+
+ class C:
+ @classmethod
+ def from_string(cls, source: str) -> C:
+ ...
+
+ def validate_b(self, obj: B) -> bool:
+ ...
+
+ class B:
+ ...
+
+Since this change breaks compatibility, the new behavior needs to be enabled
+on a per-module basis in Python 3.7 using a :mod:`__future__` import::
+
+ from __future__ import annotations
+
+It will become the default in Python 4.0.
+
+.. seealso::
+
+ :pep:`563` -- Postponed evaluation of annotations
+ PEP written and implemented by Łukasz Langa.
+
.. _whatsnew37-pep538:
@@ -106,19 +215,46 @@ legacy C locale remains active when the core interpreter is initialized.
PEP written and implemented by Nick Coghlan.
+.. _whatsnew37-pep540:
+
+PEP 540: Forced UTF-8 Runtime Mode
+-----------------------------------
+
+The new :option:`-X` ``utf8`` command line option and :envvar:`PYTHONUTF8`
+environment variable can be used to enable the CPython *UTF-8 mode*.
+
+When in UTF-8 mode, CPython ignores the locale settings, and uses the
+UTF-8 encoding by default. The error handlers for :data:`sys.stdin` and
+:data:`sys.stdout` streams are set to ``surrogateescape``.
+
+The forced UTF-8 mode can be used to change the text handling behavior in
+an embedded Python interpreter without changing the locale settings of
+an embedding application.
+
+The UTF-8 mode is enabled by default when the locale is "C". See
+:ref:`whatsnew37-pep538` for details.
+
+.. seealso::
+
+ :pep:`540` -- Add a new UTF-8 mode
+ PEP written and implemented by Victor Stinner
+
+
.. _whatsnew37-pep553:
-PEP 553: Built-in breakpoint()
-------------------------------
+PEP 553: Built-in ``breakpoint()``
+----------------------------------
+
+Python 3.7 includes the new built-in :func:`breakpoint` function as
+an easy and consistent way to enter the Python debugger.
-:pep:`553` describes a new built-in called :func:`breakpoint` which makes it
-easy and consistent to enter the Python debugger. Built-in ``breakpoint()``
-calls :func:`sys.breakpointhook`. By default, this latter imports :mod:`pdb` and
-then calls ``pdb.set_trace()``, but by binding ``sys.breakpointhook()`` to the
-function of your choosing, ``breakpoint()`` can enter any debugger. Or, the
-environment variable :envvar:`PYTHONBREAKPOINT` can be set to the callable of
-your debugger of choice. Set ``PYTHONBREAKPOINT=0`` to completely disable
-built-in ``breakpoint()``.
+Built-in ``breakpoint()`` calls :func:`sys.breakpointhook`. By default, the
+latter imports :mod:`pdb` and then calls ``pdb.set_trace()``, but by binding
+``sys.breakpointhook()`` to the function of your choosing, ``breakpoint()`` can
+enter any debugger. Additionally, the environment variable
+:envvar:`PYTHONBREAKPOINT` can be set to the callable of your debugger of
+choice. Set ``PYTHONBREAKPOINT=0`` to completely disable built-in
+``breakpoint()``.
.. seealso::
@@ -128,8 +264,8 @@ built-in ``breakpoint()``.
.. _whatsnew37-pep539:
-PEP 539: A New C-API for Thread-Local Storage in CPython
---------------------------------------------------------
+PEP 539: New C API for Thread-Local Storage
+-------------------------------------------
While Python provides a C API for thread-local storage support; the existing
:ref:`Thread Local Storage (TLS) API <thread-local-storage-api>` has used
@@ -158,17 +294,16 @@ effort will be made to add such support.
PEP written by Erik M. Bray; implementation by Masayuki Yamamoto.
-PEP 562: Customization of access to module attributes
+.. _whatsnew37-pep562:
+
+PEP 562: Customization of Access to Module Attributes
-----------------------------------------------------
-It is sometimes convenient to customize or otherwise have control over access
-to module attributes. A typical example is managing deprecation warnings.
-Typical workarounds are assigning :attr:`~instance.__class__` of a module
-object to a custom subclass of :class:`types.ModuleType` or replacing the
-:data:`sys.modules` item with a custom wrapper instance. This procedure is
-now simplified by recognizing ``__getattr__`` defined directly in a module
-that would act like a normal :meth:`__getattr__` method, except that it will
-be defined on module *instances*.
+Python 3.7 allows defining :meth:`__getattr__` on modules and will call
+it whenever a module attribute is otherwise not found.
+
+A typical example of where this may be useful is module attribute deprecation
+and lazy loading.
.. seealso::
@@ -176,62 +311,13 @@ be defined on module *instances*.
PEP written and implemented by Ivan Levkivskyi
-PEP 563: Postponed evaluation of annotations
---------------------------------------------
-
-The advent of type hints in Python uncovered two glaring usability issues
-with the functionality of annotations added in :pep:`3107` and refined
-further in :pep:`526`:
-
-* annotations could only use names which were already available in the
- current scope, in other words they didn't support forward references
- of any kind; and
-
-* annotating source code had adverse effects on startup time of Python
- programs.
-
-Both of these issues are fixed by postponing the evaluation of
-annotations. Instead of compiling code which executes expressions in
-annotations at their definition time, the compiler stores the annotation
-in a string form equivalent to the AST of the expression in question.
-If needed, annotations can be resolved at runtime using
-``typing.get_type_hints()``. In the common case where this is not
-required, the annotations are cheaper to store (since short strings
-are interned by the interpreter) and make startup time faster.
-
-Usability-wise, annotations now support forward references, making the
-following syntax valid::
-
- class C:
- @classmethod
- def from_string(cls, source: str) -> C:
- ...
-
- def validate_b(self, obj: B) -> bool:
- ...
-
- class B:
- ...
+.. _whatsnew37-pep564:
-Since this change breaks compatibility, the new behavior can be enabled
-on a per-module basis in Python 3.7 using a :mod:`__future__` import, like
-this::
+PEP 564: New Time Functions With Nanosecond Resolution
+------------------------------------------------------
- from __future__ import annotations
-
-It will become the default in Python 4.0.
-
-.. seealso::
-
- :pep:`563` -- Postponed evaluation of annotations
- PEP written and implemented by Łukasz Langa.
-
-
-PEP 564: Add new time functions with nanosecond resolution
-----------------------------------------------------------
-
-Add six new "nanosecond" variants of existing functions to the :mod:`time`
-module:
+:pep:`564` adds six new "nanosecond" variants of existing functions
+to the :mod:`time` module:
* :func:`time.clock_gettime_ns`
* :func:`time.clock_settime_ns`
@@ -240,12 +326,12 @@ module:
* :func:`time.process_time_ns`
* :func:`time.time_ns`
-While similar to the existing functions without the ``_ns`` suffix, they
-provide nanosecond resolution: they return a number of nanoseconds as a Python
-``int``.
+The new functions are similar in function to the existing functions
+without the ``_ns`` suffix. They differ by returning nanoseconds as
+integers instead of fractional seconds.
-The ``time.time_ns()`` resolution is 3 times better than the ``time.time()``
-resolution on Linux and Windows.
+On Linux and Windows the resolution of :func:`time.time_ns` is 3 times
+better than that of :func:`time.time`.
.. seealso::
@@ -291,73 +377,10 @@ by breaking changes in the APIs they used.
PEP written and implemented by Nick Coghlan
-PEP 540: Add a new UTF-8 mode
------------------------------
-
-Add a new UTF-8 mode to ignore the locale, use the UTF-8 encoding, and change
-:data:`sys.stdin` and :data:`sys.stdout` error handlers to ``surrogateescape``.
-This mode is enabled by default in the POSIX locale, but otherwise disabled by
-default.
-
-The new :option:`-X` ``utf8`` command line option and :envvar:`PYTHONUTF8`
-environment variable are added to control the UTF-8 mode.
-
-.. seealso::
+.. _whatsnew37-pep560:
- :pep:`540` -- Add a new UTF-8 mode
- PEP written and implemented by Victor Stinner
-
-
-.. _whatsnew37-pep557:
-
-PEP 557: Data Classes
----------------------
-
-Adds a new module :mod:`dataclasses`. It provides a class decorator
-:func:`~dataclasses.dataclass` which inspects the class's variable annotations (see
-:pep:`526`) and using them, adds methods such as ``__init__``,
-``__repr__``, and ``__eq__`` to the class. It is similar to
-:class:`typing.NamedTuple`, but also works on classes with mutable
-instances, among other features.
-
-For example::
-
- @dataclass
- class Point:
- x: float
- y: float
- z: float = 0.0
-
- p = Point(1.5, 2.5)
- print(p) # produces "Point(x=1.5, y=2.5, z=0.0)"
-
-.. seealso::
-
- :pep:`557` -- Data Classes
- PEP written and implemented by Eric V. Smith
-
-
-PEP 567: Context Variables
---------------------------
-
-Adds a new module :mod:`contextvars`, that provides APIs to manage,
-store, and access non-local state.
-
-Context variables are natively supported in :mod:`asyncio` and are
-ready to be used without any extra configuration.
-
-The :mod:`decimal` module was updated to use *contextvars* to store
-the current decimal context. This allows decimal operations to work
-with the correct context in async/await code.
-
-.. seealso::
-
- :pep:`567` -- Context Variables
- PEP written and implemented by Yury Selivanov
-
-
-PEP 560: Core support for typing module and generic types
----------------------------------------------------------
+PEP 560: Core Support for ``typing`` module and Generic Types
+-------------------------------------------------------------
Initially :pep:`484` was designed in such way that it would not introduce *any*
changes to the core CPython interpreter. Now type hints and the :mod:`typing`
@@ -375,17 +398,23 @@ fixed.
PEP written and implemented by Ivan Levkivskyi
-New Development Mode: -X dev
-----------------------------
+.. _whatsnew37-devmode:
-Add a new "development mode": :option:`-X` ``dev`` command line option and
-:envvar:`PYTHONDEVMODE` environment variable to enable CPython's "development
-mode", introducing additional runtime checks which are too expensive to be
-enabled by default. See :option:`-X` ``dev`` documentation for the effects of
-the development mode.
+Development Runtime Mode: -X dev
+--------------------------------
+
+The new :option:`-X` ``dev`` command line option or the new
+:envvar:`PYTHONDEVMODE` environment variable can be used to enable
+CPython's *development mode*. When in development mode, CPython performs
+additional runtime checks which are too expensive to be enabled by default.
+See :option:`-X` ``dev`` documentation for the full description of the effects
+of this mode.
-Hash-based pycs
----------------
+
+.. _whatsnew37-pep552:
+
+PEP 552: Hash-based .pyc Files
+------------------------------
Python has traditionally checked the up-to-dateness of bytecode cache files
(i.e., ``.pyc`` files) by comparing the source metadata (last-modified timestamp
@@ -412,6 +441,27 @@ keeping ``.pyc`` files up-to-date.
See :ref:`pyc-invalidation` for more information.
+.. _whatsnew37-pep545:
+
+PEP 545: Python Documentation Translations
+------------------------------------------
+
+:pep:`545` describes the process of creating and maintaining Python
+documentation translations.
+
+Three new translations have been added:
+
+- Japanese: https://docs.python.org/ja/
+- French: https://docs.python.org/fr/
+- Korean: https://docs.python.org/ko/
+
+.. seealso::
+
+ :pep:`545` -- Python Documentation Translations
+ PEP written and implemented by Julien Palard, Inada Naoki, and
+ Victor Stinner.
+
+
Other Language Changes
======================
@@ -422,6 +472,11 @@ Other Language Changes
* :meth:`bytes.fromhex` and :meth:`bytearray.fromhex` now ignore all ASCII
whitespace, not only spaces. (Contributed by Robert Xiao in :issue:`28927`.)
+* :class:`str`, :class:`bytes`, and :class:`bytearray` gained support for
+ the new :meth:`isascii() <str.isascii>` method, which can be used to
+ test if a string or bytes contain only the ASCII characters.
+ (Contributed by INADA Naoki in :issue:`32677`.)
+
* :exc:`ImportError` now displays module name and module ``__file__`` path when
``from ... import ...`` fails. (Contributed by Matthias Bussonnier in
:issue:`29546`.)
@@ -446,22 +501,83 @@ Other Language Changes
time when an import occurs)
(Contributed by Nick Coghlan in :issue:`33053`.)
+* The new :option:`-X` ``importtime`` option or the
+ :envvar:`PYTHONPROFILEIMPORTTIME` environment variable can be used to show
+ the timing of each module import.
+ (Contributed by Victor Stinner in :issue:`31415`.)
+
New Modules
===========
+.. _whatsnew37-pep567:
+
+contextvars
+-----------
+
+The new :mod:`contextvars` module and a set of new C APIs introduce
+support for *context variables*. Context variables are conceptually
+similar to thread-local variables. Unlike TLS, context variables
+support asynchronous code correctly.
+
+The :mod:`asyncio` and :mod:`decimal` modules have been updated to use
+and support context variables out of the box. Particularly the active
+decimal context is now stored in a context variable, which allows
+decimal operations to work with the correct context in asynchronous code.
+
+.. seealso::
+
+ :pep:`567` -- Context Variables
+ PEP written and implemented by Yury Selivanov
+
+
+.. _whatsnew37-pep557:
+
+dataclasses
+-----------
+
+The new :func:`~dataclasses.dataclass` decorator provides a way to declare
+*data classes*. A data class describes its attributes using class variable
+annotations. Its constructor and other magic methods, such as
+:meth:`~object.__repr__`, :meth:`~object.__eq__`, and
+:meth:`~object.__hash__` are generated automatically.
+
+Example::
+
+ @dataclass
+ class Point:
+ x: float
+ y: float
+ z: float = 0.0
+
+ p = Point(1.5, 2.5)
+ print(p) # produces "Point(x=1.5, y=2.5, z=0.0)"
+
+.. seealso::
+
+ :pep:`557` -- Data Classes
+ PEP written and implemented by Eric V. Smith
+
+
+.. _whatsnew37_importlib_resources:
+
importlib.resources
-------------------
-This module provides several new APIs and one new ABC for access to, opening,
-and reading *resources* inside packages. Resources are roughly akin to files
-inside of packages, but they needn't be actual files on the physical file
-system. Module loaders can provide a :meth:`get_resource_reader()` function
-which returns a :class:`importlib.abc.ResourceReader` instance to support this
+The new :mod:`importlib.resources` module provides several new APIs and one
+new ABC for access to, opening, and reading *resources* inside packages.
+Resources are roughly similar to files inside packages, but they needn't
+be actual files on the physical file system. Module loaders can provide a
+:meth:`get_resource_reader()` function which returns
+a :class:`importlib.abc.ResourceReader` instance to support this
new API. Built-in file path loaders and zip file loaders both support this.
-(see the PyPI package
-`importlib_resources <http://importlib-resources.readthedocs.io/en/latest/>`_
-as a compatible back port for older Python versions).
+
+Contributed by Barry Warsaw and Brett Cannon in :issue:`32248`.
+
+.. seealso::
+
+ `importlib_resources <http://importlib-resources.readthedocs.io/en/latest/>`_
+ -- a PyPI backport for earlier Python versions.
Improved Modules
@@ -471,10 +587,143 @@ Improved Modules
argparse
--------
-The :meth:`~argparse.ArgumentParser.parse_intermixed_args` supports letting
-the user intermix options and positional arguments on the command line,
-as is possible in many unix commands. It supports most but not all
-argparse features. (Contributed by paul.j3 in :issue:`14191`.)
+The new :meth:`ArgumentParser.parse_intermixed_args()
+<argparse.ArgumentParser.parse_intermixed_args>`
+method allows intermixing options and positional arguments.
+(Contributed by paul.j3 in :issue:`14191`.)
+
+
+.. _whatsnew37_asyncio:
+
+asyncio
+-------
+
+The :mod:`asyncio` module has received many new features, usability and
+:ref:`performance improvements <whatsnew37-asyncio-perf>`. Notable changes
+include:
+
+* The new :term:`provisional <provisional api>` :func:`asyncio.run` function can
+ be used to run a coroutine from synchronous code by automatically creating and
+ destroying the event loop.
+ (Contributed by Yury Selivanov in :issue:`32314`.)
+
+* The new :func:`asyncio.create_task` function has been added as a shortcut
+ to ``asyncio.get_event_loop().create_task()``.
+ (Contributed by Andrew Svetlov in :issue:`32311`.)
+
+* The new :meth:`loop.start_tls() <asyncio.AbstractEventLoop.start_tls>`
+ method can be used to upgrade an existing connection to TLS.
+ (Contributed by Yury Selivanov in :issue:`23749`.)
+
+* The new :meth:`loop.sock_recv_into() <asyncio.AbstractEventLoop.sock_recv_into>`
+ method allows reading data from a socket directly into a provided buffer making
+ it possible to reduce data copies.
+ (Contributed by Antoine Pitrou in :issue:`31819`.)
+
+* The new :func:`asyncio.current_task` function returns the currently running
+ :class:`~asyncio.Task` instance, and the new :func:`asyncio.all_tasks`
+ function returns a set of all existing ``Task`` instances in a given loop.
+ The :meth:`Task.current_task() <asyncio.Task.current_task>` and
+ :meth:`Task.all_tasks() <asyncio.Task.all_tasks>` methods have been deprecated.
+ (Contributed by Andrew Svetlov in :issue:`32250`.)
+
+* The new *provisional* :class:`~asyncio.BufferedProtocol` class allows
+ implementing streaming protocols with manual control over the receive buffer.
+ (Contributed by Yury Selivanov in :issue:`32251`.)
+
+* The new :func:`asyncio.get_running_loop` function returns the currently
+ running loop, and raises a :exc:`RuntimeError` if no loop is running.
+ This is in contrast with :func:`asyncio.get_event_loop`, which will *create*
+ a new event loop if none is running.
+ (Contributed by Yury Selivanov in :issue:`32269`.)
+
+* The new :meth:`StreamWriter.wait_closed() <asyncio.StreamWriter.wait_closed>`
+ coroutine method allows waiting until the stream writer is closed. The new
+ :meth:`StreamWriter.is_closing() <asyncio.StreamWriter.is_closing>` method
+ can be used to determine if the writer is closing.
+ (Contributed by Andrew Svetlov in :issue:`32391`.)
+
+* The new :meth:`loop.sock_sendfile() <asyncio.AbstractEventLoop.sock_sendfile>`
+ coroutine method allows sending files using :mod:`os.sendfile` when possible.
+ (Contributed by Andrew Svetlov in :issue:`32410`.)
+
+* The new :meth:`Task.get_loop() <asyncio.Task.get_loop>` and
+ :meth:`Future.get_loop() <asyncio.Future.get_loop>` methods
+ return the instance of the loop on which a task or a future were created.
+ :meth:`Server.get_loop() <asyncio.Server.get_loop>` allows doing the same for
+ :class:`asyncio.Server` objects.
+ (Contributed by Yury Selivanov in :issue:`32415` and
+ Srinivas Reddy Thatiparthy in :issue:`32418`.)
+
+* It is now possible to control how instances of :class:`asyncio.Server` begin
+ serving. Previously, the server would start serving immediately when created.
+ The new *start_serving* keyword argument to
+ :meth:`loop.create_server() <asyncio.AbstractEventLoop.create_server>` and
+ :meth:`loop.create_unix_server() <asyncio.AbstractEventLoop.create_unix_server>`,
+ as well as :meth:`Server.start_serving() <asyncio.Server.start_serving>`, and
+ :meth:`Server.serve_forever() <asyncio.Server.serve_forever>`
+ can be used to decouple server instantiation and serving. The new
+ :meth:`Server.is_serving() <asyncio.Server.is_serving>` method returns ``True``
+ if the server is serving. :class:`~asyncio.Server` objects are now
+ asynchronous context managers::
+
+ srv = await loop.create_server(...)
+
+ async with srv:
+ # some code
+
+ # At this point, srv is closed and no longer accepts new connections.
+
+ (Contributed by Yury Selivanov in :issue:`32662`.)
+
+* Callback objects returned by
+ :func:`loop.call_later() <asyncio.AbstractEventLoop.call_later>`
+ gained the new :meth:`when() <asyncio.TimerHandle.when>` method which
+ returns an absolute scheduled callback timestamp.
+ (Contributed by Andrew Svetlov in :issue:`32741`.)
+
+* The :meth:`loop.create_datagram_endpoint() \
+ <asyncio.AbstractEventLoop.create_datagram_endpoint>` method
+ gained support for Unix sockets.
+ (Contributed by Quentin Dawans in :issue:`31245`.)
+
+* The :meth:`loop.create_connection() <asyncio.AbstractEventLoop.create_connection>`,
+ :meth:`loop.create_server() <asyncio.AbstractEventLoop.create_server>`,
+ :meth:`loop.create_unix_server() <asyncio.AbstractEventLoop.create_unix_server>`, and
+ :meth:`loop.create_accepted_socket() <asyncio.BaseEventLoop.connect_accepted_socket>`
+ now accept the *ssl_handshake_timeout* keyword argument.
+ (Contributed by Neil Aspinall in :issue:`29970`.)
+
+* The new :meth:`Handle.cancelled() <asyncio.Handle.cancelled>` method returns
+ ``True`` if the callback was cancelled.
+ (Contributed by Marat Sharafutdinov in :issue:`31943`.)
+
+* The asyncio source has been converted to use the
+ :keyword:`async`/:keyword:`await` syntax.
+ (Contributed by Andrew Svetlov in :issue:`32193`.)
+
+* The new :meth:`ReadTransport.is_reading() <asyncio.ReadTransport.is_reading>`
+ method can be used to determine the reading state of the transport.
+ Additionally, calls to
+ :meth:`ReadTransport.resume_reading() <asyncio.ReadTransport.resume_reading>`
+ and :meth:`ReadTransport.pause_reading() <asyncio.ReadTransport.pause_reading>`
+ are now idempotent.
+ (Contributed by Yury Selivanov in :issue:`32356`.)
+
+* Loop methods which accept socket paths now support passing
+ :term:`path-like objects <path-like object>`.
+ (Contributed by Yury Selivanov in :issue:`32066`.)
+
+* In :mod:`asyncio` TCP sockets on Linux are now created with ``TCP_NODELAY``
+ flag set by default.
+ (Contributed by Yury Selivanov and Victor Stinner in :issue:`27456`.)
+
+* Exceptions occurring in cancelled tasks are no longer logged.
+ (Contributed by Yury Selivanov in :issue:`30508`.)
+
+Several ``asyncio`` APIs have been
+:ref:`deprecated <whatsnew37-asyncio-deprecated>`.
+
binascii
--------
@@ -483,54 +732,116 @@ The :func:`~binascii.b2a_uu` function now accepts an optional *backtick*
keyword argument. When it's true, zeros are represented by ``'`'``
instead of spaces. (Contributed by Xiang Zhang in :issue:`30103`.)
+
calendar
--------
-The class :class:`~calendar.HTMLCalendar` has new class attributes which ease
-the customisation of the CSS classes in the produced HTML calendar.
+The :class:`~calendar.HTMLCalendar` class has new class attributes which ease
+the customization of CSS classes in the produced HTML calendar.
(Contributed by Oz Tiram in :issue:`30095`.)
+
+collections
+-----------
+
+``collections.namedtuple()`` now supports default values.
+(Contributed by Raymond Hettinger in :issue:`32320`.)
+
+
+compileall
+----------
+
+:func:`compileall.compile_dir` learned the new *invalidation_mode* parameter,
+which can be used to enable
+:ref:`hash-based .pyc invalidation <whatsnew37-pep552>`. The invalidation
+mode can also be specified on the command line using the new
+``--invalidation-mode`` argument.
+(Contributed by Benjamin Peterson in :issue:`31650`.)
+
+
+concurrent.futures
+------------------
+
+:class:`ProcessPoolExecutor <concurrent.futures.ProcessPoolExecutor>` and
+:class:`ThreadPoolExecutor <concurrent.futures.ThreadPoolExecutor>` now
+support the new *initializer* and *initargs* constructor arguments.
+(Contributed by Antoine Pitrou in :issue:`21423`.)
+
+The :class:`ProcessPoolExecutor <concurrent.futures.ProcessPoolExecutor>`
+can now take the multiprocessing context via the new *mp_context* argument.
+(Contributed by Thomas Moreau in :issue:`31540`.)
+
+
contextlib
----------
-:func:`~contextlib.asynccontextmanager` and
-:class:`~contextlib.AbstractAsyncContextManager` have been added. (Contributed
-by Jelle Zijlstra in :issue:`29679` and :issue:`30241`.)
+The new :func:`~contextlib.nullcontext` is a simpler and faster no-op
+context manager than :class:`~contextlib.ExitStack`.
+(Contributed by Jesse-Bakker in :issue:`10049`.)
+
+The new :func:`~contextlib.asynccontextmanager`,
+:class:`~contextlib.AbstractAsyncContextManager`, and
+:class:`~contextlib.AsyncExitStack` have been added to
+complement their synchronous counterparts. (Contributed
+by Jelle Zijlstra in :issue:`29679` and :issue:`30241`,
+and by Alexander Mohr and Ilya Kulakov in :issue:`29302`.)
-:class:`contextlib.AsyncExitStack` has been added. (Contributed by
-Alexander Mohr and Ilya Kulakov in :issue:`29302`.)
cProfile
--------
-:mod:`cProfile` command line now accepts ``-m module_name`` as an alternative
-to script path. (Contributed by Sanyam Khurana in :issue:`21862`.)
+The :mod:`cProfile` command line now accepts ``-m module_name`` as an
+alternative to script path. (Contributed by Sanyam Khurana in :issue:`21862`.)
+
crypt
-----
-Added support for the Blowfish method.
+The :mod:`crypt` module now supports the Blowfish hashing method.
(Contributed by Serhiy Storchaka in :issue:`31664`.)
-The :func:`~crypt.mksalt` function now allows to specify the number of rounds
+The :func:`~crypt.mksalt` function now allows specifying the number of rounds
for hashing. (Contributed by Serhiy Storchaka in :issue:`31702`.)
+
datetime
--------
-Added the :meth:`datetime.fromisoformat <datetime.datetime.fromisoformat>`
-method, which constructs a :class:`~datetime.datetime` object from a string
+The new :meth:`datetime.fromisoformat() <datetime.datetime.fromisoformat>`
+method constructs a :class:`~datetime.datetime` object from a string
in one of the formats output by
-:meth:`datetime.isoformat <datetime.datetime.isoformat>`.
+:meth:`datetime.isoformat() <datetime.datetime.isoformat>`.
(Contributed by Paul Ganssle in :issue:`15873`.)
+The :class:`tzinfo <datetime.tzinfo>` class now supports sub-minute offsets.
+(Contributed by Alexander Belopolsky in :issue:`5288`.)
+
+
+dbm
+---
+
+:mod:`dbm.dumb` now supports reading read-only files and no longer writes the
+index file when it is not changed.
+
+
+decimal
+-------
+
+The :mod:`decimal` module now uses :ref:`context variables <whatsnew37-pep567>`
+to store the decimal context.
+(Contributed by Yury Selivanov in :issue:`32630`.)
+
+
dis
---
-The :func:`~dis.dis` function now is able to
+The :func:`~dis.dis` function is now able to
disassemble nested code objects (the code of comprehensions, generator
expressions and nested functions, and the code used for building nested
-classes). (Contributed by Serhiy Storchaka in :issue:`11822`.)
+classes). The maximum depth of disassembly recursion is controlled by
+the new *depth* parameter.
+(Contributed by Serhiy Storchaka in :issue:`11822`.)
+
distutils
---------
@@ -539,97 +850,244 @@ distutils
therefore included in source distributions.
(Contributed by Ryan Gonzalez in :issue:`11913`.)
-:class:`distutils.core.setup` now warns if the ``classifiers``, ``keywords``
-and ``platforms`` fields are not specified as a list or a string.
-(Contributed by Berker Peksag in :issue:`19610`.)
-The ``upload`` command no longer tries to change CR end-of-line characters
-to CRLF. This fixes a corruption issue with sdists that ended with a byte
-equivalent to CR.
-(Contributed by Bo Bayles in :issue:`32304`.)
+enum
+----
+
+The :class:`Enum <enum.Enum>` learned the new ``_ignore_`` class property,
+which allows listing the names of properties which should not become
+enum members.
+(Contributed by Ethan Furman in :issue:`31801`.)
+
+In Python 3.8, attempting to check for non-Enum objects in :class:`Enum`
+classes will raise a :exc:`TypeError` (e.g. ``1 in Color``); similarly,
+attempting to check for non-Flag objects in a :class:`Flag` member will
+raise :exc:`TypeError` (e.g. ``1 in Perm.RW``); currently, both operations
+return :const:`False` instead and are deprecated.
+(Contributed by Ethan Furman in :issue:`33217`.)
+
+
+functools
+---------
+
+:func:`functools.singledispatch` now supports registering implementations
+using type annotations.
+(Contributed by Łukasz Langa in :issue:`32227`.)
+
+
+gc
+--
+
+The new :func:`gc.freeze` function allows freezing all objects tracked
+by the garbage collector and excluding them from future collections.
+This can be used before a POSIX ``fork()`` call to make the GC copy-on-write
+friendly or to speed up collection. The new :func:`gc.unfreeze` functions
+reverses this operation. Additionally, :func:`gc.get_freeze_count` can
+be used to obtain the number of frozen objects.
+(Contributed by Li Zekun in :issue:`31558`.)
+
+
+hmac
+----
+
+The :mod:`hmac` module now has an optimized one-shot :func:`~hmac.digest`
+function, which is up to three times faster than :func:`~hmac.HMAC`.
+(Contributed by Christian Heimes in :issue:`32433`.)
+
http.client
-----------
-Add configurable *blocksize* to :class:`~http.client.HTTPConnection` and
-:class:`~http.client.HTTPSConnection` for improved upload throughput.
+:class:`~http.client.HTTPConnection` and :class:`~http.client.HTTPSConnection`
+now support the new *blocksize* argument for improved upload throughput.
(Contributed by Nir Soffer in :issue:`31945`.)
+
http.server
-----------
-:class:`~http.server.SimpleHTTPRequestHandler` supports the HTTP
-``If-Modified-Since`` header. The server returns the 304 response status if the
-target file was not modified after the time specified in the header.
+:class:`~http.server.SimpleHTTPRequestHandler` now supports the HTTP
+``If-Modified-Since`` header. The server returns the 304 response status if
+the target file was not modified after the time specified in the header.
(Contributed by Pierre Quentel in :issue:`29654`.)
-Add the parameter *directory* to the :class:`~http.server.SimpleHTTPRequestHandler`
-and the ``--directory`` to the command line of the module :mod:`http.server`.
+:class:`~http.server.SimpleHTTPRequestHandler` accepts the new *directory*
+argument, in addition to the new ``--directory`` command line argument.
With this parameter, the server serves the specified directory, by default it
uses the current working directory.
(Contributed by Stéphane Wirtel and Julien Palard in :issue:`28707`.)
-hmac
-----
+The new :class:`ThreadedHTTPServer <http.server.ThreadedHTTPServer>` class
+uses threads to handle requests using :class:`~socketserver.ThreadingMixin`.
+It is used when ``http.server`` is run with ``-m``.
+(Contributed by Julien Palard in :issue:`31639`.)
-The :mod:`hmac` module now has an optimized one-shot :func:`~hmac.digest`
-function, which is up to three times faster than :func:`~hmac.HMAC`.
-(Contributed by Christian Heimes in :issue:`32433`.)
importlib
---------
The :class:`importlib.abc.ResourceReader` ABC was introduced to
-support the loading of resource from packages.
+support the loading of resources from packages. See also
+:ref:`whatsnew37_importlib_resources`.
+(Contributed by Barry Warsaw, Brett Cannon in :issue:`32248`.)
+
+:func:`importlib.reload` now raises :exc:`ModuleNotFoundError` if the module
+lacks a spec.
+(Contributed by Garvit Khatri in :issue:`29851`.)
+
+:func:`importlib.find_spec` now raises ``ModuleNotFoundError`` instead of
+:exc:`AttributeError` if the specified parent module is not a package (i.e.
+lacks a ``__path__`` attribute).
+(Contributed by Milan Oberkirch in :issue:`30436`.)
+
+The new :func:`importlib.source_hash` can be used to compute the hash of
+the passed source. A :ref:`hash-based .pyc file <whatsnew37-pep552>`
+embeds the value returned by this function.
+
+
+io
+--
+
+The new :meth:`TextIOWrapper.reconfigure() <io.TextIOWrapper.reconfigure>`
+method can be used to reconfigure the text stream with the new settings.
+(Contributed by Antoine Pitrou in :issue:`30526` and
+INADA Naoki in :issue:`15216`.)
+
+
+ipaddress
+---------
+
+The new ``subnet_of()`` and ``supernet_of()`` methods of
+:class:`ipaddress.IPv6Network` and :class:`ipaddress.IPv4Network` can
+be used for network containment tests.
+(Contributed by Michel Albert and Cheryl Sabella in :issue:`20825`.)
+
+
+itertools
+---------
+
+:func:`itertools.islice` now accepts
+:meth:`integer-like objects <object.__index__>` as start, stop,
+and slice arguments.
+(Contributed by Will Roberts in :issue:`30537`.)
+
locale
------
-Added another argument *monetary* in :func:`~locale.format_string` of :mod:`locale`.
-If *monetary* is true, the conversion uses monetary thousands separator and
-grouping strings. (Contributed by Garvit in :issue:`10379`.)
+The new *monetary* argument to :func:`locale.format_string` can be used
+to make the conversion use monetary thousands separators and
+grouping strings. (Contributed by Garvit in :issue:`10379`.)
+
+The :func:`locale.getpreferredencoding` function now always returns ``'UTF-8'``
+on Android or when in the :ref:`forced UTF-8 mode <whatsnew37-pep540>`.
+
+
+logging
+-------
+
+:class:`~logging.Logger` instances can now be pickled.
+(Contributed by Vinay Sajip in :issue:`30520`.)
+
+The new :meth:`StreamHandler.setStream() <logging.StreamHandler.setStream>`
+method can be used to replace the logger stream after handler creation.
+(Contributed by Vinay Sajip in :issue:`30522`.)
+
+It is now possible to specify keyword arguments to handler constructors in
+configuration passed to :func:`logging.config.fileConfig`.
+(Contributed by Preston Landers in :issue:`31080`.)
-The :func:`~locale.getpreferredencoding` function now always returns ``'UTF-8'``
-on Android or in the UTF-8 mode (:option:`-X` ``utf8`` option), the locale and
-the *do_setlocale* argument are ignored.
math
----
-New :func:`~math.remainder` function, implementing the IEEE 754-style remainder
-operation. (Contributed by Mark Dickinson in :issue:`29962`.)
+The new :func:`math.remainder` function implements the IEEE 754-style remainder
+operation. (Contributed by Mark Dickinson in :issue:`29962`.)
+
+
+mimetypes
+---------
+
+The MIME type of .bmp has been changed from ``'image/x-ms-bmp'`` to
+``'image/bmp'``.
+(Contributed by Nitish Chandra in :issue:`22589`.)
+
+
+msilib
+------
+
+The new :meth:`Database.Close() <msilib.Database.Close>` method can be used
+to close the :abbr:`MSI` database.
+(Contributed by Berker Peksag in :issue:`20486`.)
+
+
+multiprocessing
+---------------
+
+The new :meth:`Process.close() <multiprocessing.Process.close>` method
+explicitly closes the process object and releases all resources associated
+with it. :exc:`ValueError` is raised if the underlying process is still
+running.
+(Contributed by Antoine Pitrou in :issue:`30596`.)
+
+The new :meth:`Process.kill() <multiprocessing.Process.kill>` method can
+be used to terminate the process using the :data:`SIGKILL` signal on Unix.
+(Contributed by Vitor Pereira in :issue:`30794`.)
+
+Non-daemonic threads created by :class:`~multiprocessing.Process` are now
+joined on process exit.
+(Contributed by Antoine Pitrou in :issue:`18966`.)
+
os
--
-Added support for :class:`bytes` paths in :func:`~os.fwalk`. (Contributed by
-Serhiy Storchaka in :issue:`28682`.)
+:func:`os.fwalk` now accepts the *path* argument as :class:`bytes`.
+(Contributed by Serhiy Storchaka in :issue:`28682`.)
-Added support for :ref:`file descriptors <path_fd>` in :func:`~os.scandir`
-on Unix. (Contributed by Serhiy Storchaka in :issue:`25996`.)
+:func:`os.scandir` gained support for :ref:`file descriptors <path_fd>`.
+(Contributed by Serhiy Storchaka in :issue:`25996`.)
-New function :func:`~os.register_at_fork` allows registering Python callbacks
-to be executed on a process fork. (Contributed by Antoine Pitrou in
-:issue:`16500`.)
+The new :func:`~os.register_at_fork` function allows registering Python
+callbacks to be executed at process fork.
+(Contributed by Antoine Pitrou in :issue:`16500`.)
-Exposed the system calls *preadv*, *preadv2*, *pwritev* and *pwritev2* through
-the new functions :func:`~os.preadv` and :func:`~os.pwritev`. (Contributed by
-Pablo Galindo in :issue:`31368`.)
+Exposed the *preadv*, *preadv2*, *pwritev* and *pwritev2* system calls through
+the new :func:`~os.preadv` and :func:`~os.pwritev` functions.
+(Contributed by Pablo Galindo in :issue:`31368`.)
+
+The mode argument of :func:`os.makedirs` no longer affects the file
+permission bits of newly-created intermediate-level directories.
+(Contributed by Serhiy Storchaka in :issue:`19930`.)
+
+:func:`os.dup2` now returns the new file descriptor. Previously, ``None``
+was always returned.
+(Contributed by Benjamin Peterson in :issue:`32441`.)
+
+The structure returned by :func:`os.stat` now contains the
+:attr:`~os.stat_result.st_fstype` attribute on Solaris and its derivatives.
+(Contributed by Jesús Cea Avión in :issue:`32659`.)
+
+
+pathlib
+-------
+
+The new :meth:`Path.is_mount() <pathlib.Path.is_mount>` method is now available
+on POSIX systems and can be used to determine whether a path is a mount point.
+(Contributed by Cooper Ry Lees in :issue:`30897`.)
-Exposed the system call *posix_spawn* through the new function
-:func:`~os.posix_spawn`. (Contributed by Pablo Galindo, Serhiy Storchaka and
-Gregory P. Smith in :issue:`20104`.)
pdb
---
-:func:`~pdb.set_trace` now takes an optional *header* keyword-only
-argument. If given, this is printed to the console just before debugging
+:func:`pdb.set_trace` now takes an optional *header* keyword-only
+argument. If given, it is printed to the console just before debugging
begins. (Contributed by Barry Warsaw in :issue:`31389`.)
:mod:`pdb` command line now accepts ``-m module_name`` as an alternative to
script file. (Contributed by Mario Corchero in :issue:`32206`.)
+
py_compile
----------
@@ -641,6 +1099,22 @@ This allows for guaranteeing
files when they are created eagerly. (Contributed by Bernhard M. Wiedemann
in :issue:`29708`.)
+
+pydoc
+-----
+
+The pydoc server can now bind to an arbitrary hostname specified by the
+new ``-n`` command-line argument.
+(Contributed by Feanil Patel in :issue:`31128`.)
+
+
+queue
+-----
+
+The new :class:`~queue.SimpleQueue` class is an unbounded :abbr:`FIFO` queue.
+(Contributed by Antoine Pitrou in :issue:`14976`.)
+
+
re
--
@@ -652,70 +1126,128 @@ can be set within the scope of a group.
``'^$'`` or ``(?=-)`` that matches an empty string.
(Contributed by Serhiy Storchaka in :issue:`25054`.)
+Regular expressions compiled with the :const:`re.LOCALE` flag no longer
+depend on the locale at compile time. Locale settings are applied only
+when the compiled regular expression is used.
+(Contributed by Serhiy Storchaka in :issue:`30215`.)
+
+:exc:`FutureWarning` is now emitted if a regular expression contains
+character set constructs that will change semantically in the future,
+such as nested sets and set operations.
+(Contributed by Serhiy Storchaka in :issue:`30349`.)
+
+Compiled regular expression and match objects can now be copied
+using :func:`copy.copy` and :func:`copy.deepcopy`.
+(Contributed by Serhiy Storchaka in :issue:`10076`.)
+
+
+signal
+------
+
+The new *warn_on_full_buffer* argument to the :func:`signal.set_wakeup_fd`
+function makes it possible to specify whether Python prints a warning on
+stderr when the wakeup buffer overflows.
+(Contributed by Nathaniel J. Smith in :issue:`30050`.)
+
+
+socket
+------
+
+The new :func:`socket.getblocking() <socket.socket.getblocking>` method
+returns ``True`` if the socket is in blocking mode and ``False`` otherwise.
+(Contributed by Yury Selivanov in :issue:`32373`.)
+
+The new :func:`socket.close` function closes the passed socket file descriptor.
+This function should be used instead of :func:`os.close` for better
+compatibility across platforms.
+(Contributed by Christian Heimes in :issue:`32454`.)
+
+The :mod:`socket` module now exposes the :data:`socket.TCP_CONGESTION`
+(Linux 2.6.13), :data:`socket.TCP_USER_TIMEOUT` (Linux 2.6.37), and
+:data:`socket.TCP_NOTSENT_LOWAT` (Linux 3.12) constants.
+(Contributed by Omar Sandoval in :issue:`26273` and
+Nathaniel J. Smith in :issue:`29728`.)
+
+Support for :data:`socket.AF_VSOCK` sockets has been added to allow
+communication between virtual machines and their hosts.
+(Contributed by Cathy Avery in :issue:`27584`.)
+
+Sockets now auto-detect family, type and protocol from file descriptor
+by default.
+(Contributed by Christian Heimes in :issue:`28134`.)
+
sqlite3
-------
-:class:`sqlite3.Connection` now exposes a :class:`~sqlite3.Connection.backup`
-method, if the underlying SQLite library is at version 3.6.11 or higher.
+:class:`sqlite3.Connection` now exposes the :meth:`~sqlite3.Connection.backup`
+method when the underlying SQLite library is at version 3.6.11 or higher.
(Contributed by Lele Gaifax in :issue:`27645`.)
+The *database* argument of :func:`sqlite3.connect` now accepts any
+:term:`path-like object`, instead of just a string.
+(Contributed by Anders Lorentsen in :issue:`31843`.)
+
ssl
---
The :mod:`ssl` module now uses OpenSSL's builtin API instead of
-:func:`~ssl.match_hostname` to check host name or IP address. Values
-are validated during TLS handshake. Any cert validation error including
-a failing host name match now raises :exc:`~ssl.SSLCertVerificationError` and
-aborts the handshake with a proper TLS Alert message. The new exception
-contains additional information. Host name validation can be customized
-with :attr:`~ssl.SSLContext.host_flags`.
+:func:`~ssl.match_hostname` to check a host name or an IP address. Values
+are validated during TLS handshake. Any certificate validation error
+including failing the host name check now raises
+:exc:`~ssl.SSLCertVerificationError` and aborts the handshake with a proper
+TLS Alert message. The new exception contains additional information.
+Host name validation can be customized with
+:attr:`SSLContext.host_flags <ssl.SSLContext.host_flags>`.
(Contributed by Christian Heimes in :issue:`31399`.)
.. note::
- The improved host name check requires an OpenSSL 1.0.2 or 1.1 compatible
- libssl. OpenSSL 0.9.8 and 1.0.1 are no longer supported. LibreSSL is
- temporarily not supported until it gains the necessary OpenSSL 1.0.2 APIs.
+ The improved host name check requires a *libssl* implementation compatible
+ with OpenSSL 1.0.2 or 1.1. Consequently, OpenSSL 0.9.8 and 1.0.1 are no
+ longer supported and LibreSSL is temporarily not supported until it gains
+ the necessary OpenSSL 1.0.2 APIs.
-The ssl module no longer sends IP addresses in SNI TLS extension.
+The ``ssl`` module no longer sends IP addresses in SNI TLS extension.
(Contributed by Christian Heimes in :issue:`32185`.)
:func:`~ssl.match_hostname` no longer supports partial wildcards like
-``www*.example.org``. :attr:`~ssl.SSLContext.host_flags` has partial
-wildcard matching disabled by default.
+``www*.example.org``. :attr:`SSLContext.host_flags <ssl.SSLContext.host_flags>`
+has partial wildcard matching disabled by default.
(Contributed by Mandeep Singh in :issue:`23033` and Christian Heimes in
:issue:`31399`.)
-The default cipher suite selection of the ssl module now uses a blacklist
-approach rather than a hard-coded whitelist. Python no longer re-enables
-ciphers that have been blocked by OpenSSL security update. Default cipher
-suite selection can be configured on compile time.
+The default cipher suite selection of the ``ssl`` module now uses a blacklist
+approach rather than a hard-coded whitelist. Python no longer re-enables
+ciphers that have been blocked by OpenSSL security updates. Default cipher
+suite selection can be configured at compile time.
(Contributed by Christian Heimes in :issue:`31429`.)
-Added support for validating server certificates containing
-internationalized domain names (IDNs). As part of this change, the
-:attr:`ssl.SSLSocket.server_hostname` attribute now stores the
-expected hostname in A-label form (``"xn--pythn-mua.org"``), rather
-than the U-label form (``"pythön.org"``). (Contributed by
+Validation of server certificates containing internationalized domain names
+(IDNs) is now supported. As part of this change, the
+:attr:`SSLSocket.server_hostname <ssl.SSLSocket.server_hostname>` attribute
+now stores the expected hostname in A-label form (``"xn--pythn-mua.org"``),
+rather than the U-label form (``"pythön.org"``). (Contributed by
Nathaniel J. Smith and Christian Heimes in :issue:`28414`.)
-The ssl module has preliminary and experimental support for TLS 1.3 and
-OpenSSL 1.1.1. (Contributed by Christian Heimes in :issue:`32947`,
+The ``ssl`` module has preliminary and experimental support for TLS 1.3 and
+OpenSSL 1.1.1. (Contributed by Christian Heimes in :issue:`32947`,
:issue:`20995`, :issue:`29136`, and :issue:`30622`)
:class:`~ssl.SSLSocket` and :class:`~ssl.SSLObject` no longer have a public
-constructor. Direct instantiation was never a documented and supported
-feature. Instances must be created with :class:`~ssl.SSLContext` methods
+constructor. Direct instantiation was never a documented and supported
+feature. Instances must be created with :class:`~ssl.SSLContext` methods
:meth:`~ssl.SSLContext.wrap_socket` and :meth:`~ssl.SSLContext.wrap_bio`.
(Contributed by Christian Heimes in :issue:`32951`)
OpenSSL 1.1 APIs for setting the minimum and maximum TLS protocol version are
-available as :attr:`~ssl.SSLContext.minimum_version` and
-:attr:`~ssl.SSLContext.maximum_version`. Supported protocols are indicated
-by new flags like :data:`~ssl.HAS_TLSv1_1`.
+available as :attr:`SSLContext.minimum_version <ssl.SSLContext.minimum_version>`
+and :attr:`SSLContext.maximum_version <ssl.SSLContext.maximum_version>`.
+Supported protocols are indicated by serveral new flags, such as
+:data:`~ssl.HAS_TLSv1_1`.
(Contributed by Christian Heimes in :issue:`32609`.)
+
string
------
@@ -723,32 +1255,61 @@ string
expression pattern for braced placeholders and non-braced placeholders
separately. (Contributed by Barry Warsaw in :issue:`1198569`.)
+
subprocess
----------
+The :func:`subprocess.run` function accepts the new *capture_output*
+keyword argument. When true, stdout and stderr will be captured.
+This is equivalent to passing :data:`subprocess.PIPE` as *stdout* and
+*stderr* arguments.
+(Contributed by Bo Bayles in :issue:`32102`.)
+
+The ``subprocess.run`` function and the :class:`subprocess.Popen` constructor
+now accept the *text* keyword argument as an alias
+to *universal_newlines*.
+(Contributed by Andrew Clegg in :issue:`31756`.)
+
On Windows the default for *close_fds* was changed from ``False`` to
``True`` when redirecting the standard handles. It's now possible to set
-*close_fds* to ``True`` when redirecting the standard handles. See
-:class:`subprocess.Popen`.
+*close_fds* to true when redirecting the standard handles. See
+:class:`subprocess.Popen`. This means that *close_fds* now defaults to
+``True`` on all supported platforms.
+(Contributed by Segev Finer in :issue:`19764`.)
+
+The subprocess module is now more graceful when handling
+:exc:`KeyboardInterrupt` during :func:`subprocess.call`,
+:func:`subprocess.run`, or in a :class:`~subprocess.Popen`
+context manager. It now waits a short amount of time for the child
+to exit, before continuing the handling of the ``KeyboardInterrupt``
+exception.
+(Contributed by Gregory P. Smith in :issue:`25942`.)
-This means that *close_fds* now defaults to ``True`` on all supported
-platforms. (Contributed by Segev Finer in :issue:`19764`.)
sys
---
-Added :attr:`sys.flags.dev_mode` flag for the new development mode.
+The new :func:`sys.breakpointhook` hook function is called by the
+built-in :func:`breakpoint`.
+(Contributed by Barry Warsaw in :issue:`31353`.)
-tkinter
--------
+On Android, the new :func:`sys.getandroidapilevel` returns the build-time
+Android API version.
+(Contributed by Victor Stinner in :issue:`28740`.)
+
+The new :func:`sys.get_coroutine_origin_tracking_depth` function returns
+the current coroutine origin tracking depth, as set by
+the new :func:`sys.set_coroutine_origin_tracking_depth`. :mod:`asyncio`
+has been converted to use this new API instead of
+the deprecated :func:`sys.set_coroutine_wrapper`.
+(Contributed by Nathaniel J. Smith in :issue:`32591`.)
-Added :class:`tkinter.ttk.Spinbox`.
-(Contributed by Alan Moore in :issue:`32585`.)
time
----
-The :pep:`564` added six new functions with nanosecond resolution:
+:pep:`564` adds six new functions with nanosecond resolution to the
+:mod:`time` module:
* :func:`time.clock_gettime_ns`
* :func:`time.clock_settime_ns`
@@ -757,21 +1318,58 @@ The :pep:`564` added six new functions with nanosecond resolution:
* :func:`time.process_time_ns`
* :func:`time.time_ns`
-Add new clock identifiers:
+New clock identifiers have been added:
* :data:`time.CLOCK_BOOTTIME` (Linux): Identical to
:data:`time.CLOCK_MONOTONIC`, except it also includes any time that the
system is suspended.
* :data:`time.CLOCK_PROF` (FreeBSD, NetBSD and OpenBSD): High-resolution
- per-process timer from the CPU.
+ per-process CPU timer.
* :data:`time.CLOCK_UPTIME` (FreeBSD, OpenBSD): Time whose absolute value is
the time the system has been running and not suspended, providing accurate
- uptime measurement, both absolute and interval.
+ uptime measurement.
-Added functions :func:`time.thread_time` and :func:`time.thread_time_ns`
-to get per-thread CPU time measurements.
+The new :func:`time.thread_time` and :func:`time.thread_time_ns` functions
+can be used to get per-thread CPU time measurements.
(Contributed by Antoine Pitrou in :issue:`32025`.)
+The new :func:`time.pthread_getcpuclockid` function returns the clock ID
+of the thread-specific CPU-time clock.
+
+
+tkinter
+-------
+
+The new :class:`tkinter.ttk.Spinbox` class is now available.
+(Contributed by Alan Moore in :issue:`32585`.)
+
+
+tracemalloc
+-----------
+
+:class:`tracemalloc.Traceback` behaves more like regular tracebacks,
+sorting the frames from oldest to most recent.
+:meth:`Traceback.format() <tracemalloc.Traceback.format>`
+now accepts negative *limit*, truncating the result to the
+``abs(limit)`` oldest frames. To get the old behaviour, use
+the new *most_recent_first* argument to ``Traceback.format()``.
+(Contributed by Jesse Bakker in :issue:`32121`.)
+
+
+types
+-----
+
+The new :class:`~types.WrapperDescriptorType`,
+:class:`~types.MethodWrapperType`, :class:`~types.MethodDescriptorType`,
+and :class:`~types.ClassMethodDescriptorType` classes are now available.
+(Contributed by Manuel Krebber and Guido van Rossum in :issue:`29377`,
+and Serhiy Storchaka in :issue:`32265`.)
+
+The new :func:`types.resolve_bases` function resolves MRO entries
+dynamically as specified by :pep:`560`.
+(Contributed by Ivan Levkivskyi in :issue:`32717`.)
+
+
unicodedata
-----------
@@ -779,15 +1377,18 @@ The internal :mod:`unicodedata` database has been upgraded to use `Unicode 10
<http://www.unicode.org/versions/Unicode10.0.0/>`_. (Contributed by Benjamin
Peterson.)
+
unittest
--------
-Added new command-line option ``-k`` to filter tests to run with a substring or
-Unix shell-like pattern. For example, ``python -m unittest -k foo`` runs the
-tests ``foo_tests.SomeTest.test_something``, ``bar_tests.SomeTest.test_foo``,
+The new ``-k`` command-line option allows filtering tests by a name
+substring or a Unix shell-like pattern.
+For example, ``python -m unittest -k foo`` runs
+``foo_tests.SomeTest.test_something``, ``bar_tests.SomeTest.test_foo``,
but not ``bar_tests.FooTest.test_something``.
(Contributed by Jonas Haag in :issue:`32071`.)
+
unittest.mock
-------------
@@ -795,47 +1396,75 @@ The :const:`~unittest.mock.sentinel` attributes now preserve their identity
when they are :mod:`copied <copy>` or :mod:`pickled <pickle>`. (Contributed by
Serhiy Storchaka in :issue:`20804`.)
-New function :func:`~unittest.mock.seal` will disable the creation of mock
-children by preventing to get or set any new attribute on the sealed mock.
-The sealing process is performed recursively. (Contributed by Mario Corchero
-in :issue:`30541`.)
+The new :func:`~unittest.mock.seal` function allows sealing
+:class:`~unittest.mock.Mock` instances, which will disallow further creation
+of attribute mocks. The seal is applied recursively to all attributes that
+are themselves mocks.
+(Contributed by Mario Corchero in :issue:`30541`.)
+
urllib.parse
------------
:func:`urllib.parse.quote` has been updated from :rfc:`2396` to :rfc:`3986`,
-adding ``~`` to the set of characters that is never quoted by default.
+adding ``~`` to the set of characters that are never quoted by default.
(Contributed by Christian Theune and Ratnadeep Debnath in :issue:`16285`.)
+
uu
--
-Function :func:`~uu.encode` now accepts an optional *backtick*
+The :func:`uu.encode` function now accepts an optional *backtick*
keyword argument. When it's true, zeros are represented by ``'`'``
instead of spaces. (Contributed by Xiang Zhang in :issue:`30103`.)
+
+uuid
+----
+
+The new :attr:`UUID.is_safe <uuid.UUID.is_safe>` attribute relays information
+from the platform about whether generated UUIDs are generated with a
+multiprocessing-safe method.
+(Contributed by Barry Warsaw in :issue:`22807`.)
+
+:func:`uuid.getnode` now prefers universally administered
+MAC addresses over locally administered MAC addresses.
+This makes a better guarantee for global uniqueness of UUIDs returned
+from :func:`uuid.uuid1`. If only locally administered MAC addresses are
+available, the first such one found is returned.
+(Contributed by Barry Warsaw in :issue:`32107`.)
+
+
warnings
--------
The initialization of the default warnings filters has changed as follows:
* warnings enabled via command line options (including those for :option:`-b`
- and the new CPython-specific ``-X dev`` option) are always passed to the
- warnings machinery via the ``sys.warnoptions`` attribute.
+ and the new CPython-specific :option:`-X` ``dev`` option) are always passed
+ to the warnings machinery via the :data:`sys.warnoptions` attribute.
+
* warnings filters enabled via the command line or the environment now have the
- following precedence order:
+ following order of precedence:
* the ``BytesWarning`` filter for :option:`-b` (or ``-bb``)
- * any filters specified with :option:`-W`
- * any filters specified with :envvar:`PYTHONWARNINGS`
+ * any filters specified with the :option:`-W` option
+ * any filters specified with the :envvar:`PYTHONWARNINGS` environment
+ variable
* any other CPython specific filters (e.g. the ``default`` filter added
for the new ``-X dev`` mode)
* any implicit filters defined directly by the warnings machinery
+
* in CPython debug builds, all warnings are now displayed by default (the
implicit filter list is empty)
(Contributed by Nick Coghlan and Victor Stinner in :issue:`20361`,
-:issue:`32043`, and :issue:`32230`)
+:issue:`32043`, and :issue:`32230`.)
+
+Deprecation warnings are once again shown by default in single-file scripts and
+at the interactive prompt. See :ref:`whatsnew37-pep565` for details.
+(Contributed by Nick Coghlan in :issue:`31975`.)
+
xml.etree
---------
@@ -845,13 +1474,15 @@ methods can now compare text of the current node with ``[. = "text"]``,
not only text in children. Predicates also allow adding spaces for
better readability. (Contributed by Stefan Behnel in :issue:`31648`.)
+
xmlrpc.server
-------------
-:meth:`register_function` of :class:`~xmlrpc.server.SimpleXMLRPCDispatcher` and
-its subclasses can be used as a decorator. (Contributed by Xiang Zhang in
+:meth:`SimpleXMLRPCDispatcher.register_function <xmlrpc.server.SimpleXMLRPCDispatcher>`
+can now be used as a decorator. (Contributed by Xiang Zhang in
:issue:`7769`.)
+
zipapp
------
@@ -865,144 +1496,267 @@ argument to generate a compressed archive. A command line option
(Contributed by Zhiming Wang in :issue:`31638`.)
+zipfile
+-------
+
+:class:`~zipfile.ZipFile` now accepts the new *compresslevel* parameter to
+control the compression level.
+(Contributed by Bo Bayles in :issue:`21417`.)
+
+Subdirectories in archives created by ``ZipFile`` are now stored in
+alphabetical order.
+(Contributed by Bernhard M. Wiedemann in :issue:`30693`.)
+
+
+C API Changes
+=============
+
+A new API for thread-local storage has been implemented. See
+:ref:`whatsnew37-pep539` for an overview and
+:ref:`thread-specific-storage-api` for a complete reference.
+(Contributed by Masayuki Yamamoto in :issue:`25658`.)
+
+The new :c:func:`PyImport_GetModule` function returns the previously
+imported module with the given name.
+(Contributed by Eric Snow in :issue:`28411`.)
+
+The new :c:macro:`Py_RETURN_RICHCOMPARE` macro eases writing rich
+comparison functions.
+(Contributed by Petr Victorin in :issue:`23699`.)
+
+The new :c:macro:`Py_UNREACHABLE` macro can be used to mark unreachable
+code paths.
+(Contributed by Barry Warsaw in :issue:`31338`.)
+
+The :mod:`tracemalloc` now exposes a C API through the new
+:c:func:`PyTraceMalloc_Track` and :c:func:`PyTraceMalloc_Untrack`
+functions.
+(Contributed by Victor Stinner in :issue:`30054`.)
+
+The new :c:func:`import__find__load__start` and
+:c:func:`import__find__load__done` static markers can be used to trace
+module imports.
+(Contributed by Christian Heimes in :issue:`31574`.)
+
+The fields :c:member:`name` and :c:member:`doc` of structures
+:c:type:`PyMemberDef`, :c:type:`PyGetSetDef`,
+:c:type:`PyStructSequence_Field`, :c:type:`PyStructSequence_Desc`,
+and :c:type:`wrapperbase` are now of type ``const char *`` rather of
+``char *``. (Contributed by Serhiy Storchaka in :issue:`28761`.)
+
+The result of :c:func:`PyUnicode_AsUTF8AndSize` and :c:func:`PyUnicode_AsUTF8`
+is now of type ``const char *`` rather of ``char *``. (Contributed by Serhiy
+Storchaka in :issue:`28769`.)
+
+The result of :c:func:`PyMapping_Keys`, :c:func:`PyMapping_Values` and
+:c:func:`PyMapping_Items` is now always a list, rather than a list or a
+tuple. (Contributed by Oren Milman in :issue:`28280`.)
+
+Added functions :c:func:`PySlice_Unpack` and :c:func:`PySlice_AdjustIndices`.
+(Contributed by Serhiy Storchaka in :issue:`27867`.)
+
+:c:func:`PyOS_AfterFork` is deprecated in favour of the new functions
+:c:func:`PyOS_BeforeFork`, :c:func:`PyOS_AfterFork_Parent` and
+:c:func:`PyOS_AfterFork_Child`. (Contributed by Antoine Pitrou in
+:issue:`16500`.)
+
+The ``PyExc_RecursionErrorInst`` singleton that was part of the public API
+has been removed as its members being never cleared may cause a segfault
+during finalization of the interpreter. Contributed by Xavier de Gaye in
+:issue:`22898` and :issue:`30697`.
+
+Added C API support for timezones with timezone constructors
+:c:func:`PyTimeZone_FromOffset` and :c:func:`PyTimeZone_FromOffsetAndName`,
+and access to the UTC singleton with :c:data:`PyDateTime_TimeZone_UTC`.
+Contributed by Paul Ganssle in :issue:`10381`.
+
+The type of results of :c:func:`PyThread_start_new_thread` and
+:c:func:`PyThread_get_thread_ident`, and the *id* parameter of
+:c:func:`PyThreadState_SetAsyncExc` changed from :c:type:`long` to
+:c:type:`unsigned long`.
+(Contributed by Serhiy Storchaka in :issue:`6532`.)
+
+:c:func:`PyUnicode_AsWideCharString` now raises a :exc:`ValueError` if the
+second argument is *NULL* and the :c:type:`wchar_t*` string contains null
+characters. (Contributed by Serhiy Storchaka in :issue:`30708`.)
+
+Changes to the startup sequence and the management of dynamic memory
+allocators mean that the long documented requirement to call
+:c:func:`Py_Initialize` before calling most C API functions is now
+relied on more heavily, and failing to abide by it may lead to segfaults in
+embedding applications. See the :ref:`porting-to-python-37` section in this
+document and the :ref:`pre-init-safe` section in the C API documentation
+for more details.
+
+The new :c:func:`PyInterpreterState_GetID` returns the unique ID for a
+given interpreter.
+(Contributed by Eric Snow in :issue:`29102`.)
+
+:c:func:`Py_DecodeLocale`, :c:func:`Py_EncodeLocale` now use the UTF-8
+encoding when the :ref:`UTF-8 mode <whatsnew37-pep540>` is enabled.
+(Contributed by Victor Stinner in :issue:`29240`.)
+
+:c:func:`PyUnicode_DecodeLocaleAndSize` and :c:func:`PyUnicode_EncodeLocale`
+now use the current locale encoding for ``surrogateescape`` error handler.
+(Contributed by Victor Stinner in :issue:`29240`.)
+
+The *start* and *end* parameters of :c:func:`PyUnicode_FindChar` are
+now adjusted to behave like string slices.
+(Contributed by Xiang Zhang in :issue:`28822`.)
+
+
+Build Changes
+=============
+
+Support for building ``--without-threads`` has been removed. The
+:mod:`threading` module is now always available.
+(Contributed by Antoine Pitrou in :issue:`31370`.).
+
+A full copy of libffi is no longer bundled for use when building the
+:mod:`_ctypes <ctypes>` module on non-OSX UNIX platforms. An installed copy
+of libffi is now required when building ``_ctypes`` on such platforms.
+(Contributed by Zachary Ware in :issue:`27979`.)
+
+The Windows build process no longer depends on Subversion to pull in external
+sources, a Python script is used to download zipfiles from GitHub instead.
+If Python 3.6 is not found on the system (via ``py -3.6``), NuGet is used to
+download a copy of 32-bit Python for this purpose. (Contributed by Zachary
+Ware in :issue:`30450`.)
+
+The :mod:`ssl` module requires OpenSSL 1.0.2 or 1.1 compatible libssl.
+OpenSSL 1.0.1 has reached end of lifetime on 2016-12-31 and is no longer
+supported. LibreSSL is temporarily not supported as well. LibreSSL releases
+up to version 2.6.4 are missing required OpenSSL 1.0.2 APIs.
+
+
+.. _whatsnew37-perf:
+
Optimizations
=============
-* Added two new opcodes: :opcode:`LOAD_METHOD` and :opcode:`CALL_METHOD` to avoid
- instantiation of bound method objects for method calls, which results
- in method calls being faster up to 20%. (Contributed by Yury Selivanov and
- INADA Naoki in :issue:`26110`.)
-
-* Searching some unlucky Unicode characters (like Ukrainian capital "Є")
- in a string was up to 25 times slower than searching other characters.
- Now it is slower only by 3 times in the worst case.
- (Contributed by Serhiy Storchaka in :issue:`24821`.)
-
-* Fast implementation from standard C library is now used for functions
- :func:`~math.erf` and :func:`~math.erfc` in the :mod:`math` module.
- (Contributed by Serhiy Storchaka in :issue:`26121`.)
-
-* The :func:`os.fwalk` function has been sped up by 2 times. This was done
- using the :func:`os.scandir` function.
- (Contributed by Serhiy Storchaka in :issue:`25996`.)
-
-* The :func:`shutil.rmtree` function has been sped up to 20--40%.
- This was done using the :func:`os.scandir` function.
- (Contributed by Serhiy Storchaka in :issue:`28564`.)
-
-* Optimized case-insensitive matching and searching of :mod:`regular
- expressions <re>`. Searching some patterns can now be up to 20 times faster.
- (Contributed by Serhiy Storchaka in :issue:`30285`.)
-
-* :func:`re.compile` now converts ``flags`` parameter to int object if
- it is ``RegexFlag``. It is now as fast as Python 3.5, and faster than
- Python 3.6 by about 10% depending on the pattern.
- (Contributed by INADA Naoki in :issue:`31671`.)
-
-* :meth:`~selectors.BaseSelector.modify` methods of classes
- :class:`selectors.EpollSelector`, :class:`selectors.PollSelector`
- and :class:`selectors.DevpollSelector` may be around 10% faster under
- heavy loads. (Contributed by Giampaolo Rodola' in :issue:`30014`)
-
-* Constant folding is moved from peephole optimizer to new AST optimizer.
- (Contributed by Eugene Toder and INADA Naoki in :issue:`29469`)
-
-* Most functions and methods in :mod:`abc` have been rewritten in C.
- This makes creation of abstract base classes, and calling :func:`isinstance`
- and :func:`issubclass` on them 1.5x faster. This also reduces Python
- start-up time by up to 10%. (Contributed by Ivan Levkivskyi and INADA Naoki
- in :issue:`31333`)
-
-* Significant speed improvements to alternate constructors for
- :class:`datetime.date` and :class:`datetime.datetime` by using fast-path
- constructors when not constructing subclasses. (Contributed by Paul Ganssle
- in :issue:`32403`)
-
-
-Build and C API Changes
-=======================
-
-* :mod:`py_compile` and :mod:`compileall` now support the
- :envvar:`SOURCE_DATE_EPOCH` environment variable by unconditionally
- building ``.pyc`` files for hash verification instead of potentially
- timestamp-based ``.pyc`` files. See the notes for the `py_compile`_
- improvement notes for more details.
-
-* A full copy of libffi is no longer bundled for use when building the
- :mod:`_ctypes <ctypes>` module on non-OSX UNIX platforms. An installed copy
- of libffi is now required when building ``_ctypes`` on such platforms.
- (Contributed by Zachary Ware in :issue:`27979`.)
-
-* The fields :c:member:`name` and :c:member:`doc` of structures
- :c:type:`PyMemberDef`, :c:type:`PyGetSetDef`,
- :c:type:`PyStructSequence_Field`, :c:type:`PyStructSequence_Desc`,
- and :c:type:`wrapperbase` are now of type ``const char *`` rather of
- ``char *``. (Contributed by Serhiy Storchaka in :issue:`28761`.)
-
-* The result of :c:func:`PyUnicode_AsUTF8AndSize` and :c:func:`PyUnicode_AsUTF8`
- is now of type ``const char *`` rather of ``char *``. (Contributed by Serhiy
- Storchaka in :issue:`28769`.)
-
-* The result of :c:func:`PyMapping_Keys`, :c:func:`PyMapping_Values` and
- :c:func:`PyMapping_Items` is now always a list, rather than a list or a
- tuple. (Contributed by Oren Milman in :issue:`28280`.)
-
-* Added functions :c:func:`PySlice_Unpack` and :c:func:`PySlice_AdjustIndices`.
- (Contributed by Serhiy Storchaka in :issue:`27867`.)
-
-* :c:func:`PyOS_AfterFork` is deprecated in favour of the new functions
- :c:func:`PyOS_BeforeFork`, :c:func:`PyOS_AfterFork_Parent` and
- :c:func:`PyOS_AfterFork_Child`. (Contributed by Antoine Pitrou in
- :issue:`16500`.)
-
-* The Windows build process no longer depends on Subversion to pull in external
- sources, a Python script is used to download zipfiles from GitHub instead.
- If Python 3.6 is not found on the system (via ``py -3.6``), NuGet is used to
- download a copy of 32-bit Python for this purpose. (Contributed by Zachary
- Ware in :issue:`30450`.)
-
-* The ``PyExc_RecursionErrorInst`` singleton that was part of the public API
- has been removed as its members being never cleared may cause a segfault
- during finalization of the interpreter. Contributed by Xavier de Gaye in
- :issue:`22898` and :issue:`30697`.
-
-* Support for building ``--without-threads`` is removed.
- (Contributed by Antoine Pitrou in :issue:`31370`.).
-
-* Added C API support for timezones with timezone constructors
- :c:func:`PyTimeZone_FromOffset` and :c:func:`PyTimeZone_FromOffsetAndName`,
- and access to the UTC singleton with :c:data:`PyDateTime_TimeZone_UTC`.
- Contributed by Paul Ganssle in :issue:`10381`.
-
-- The type of results of :c:func:`PyThread_start_new_thread` and
- :c:func:`PyThread_get_thread_ident`, and the *id* parameter of
- :c:func:`PyThreadState_SetAsyncExc` changed from :c:type:`long` to
- :c:type:`unsigned long`.
- (Contributed by Serhiy Storchaka in :issue:`6532`.)
-
-- :c:func:`PyUnicode_AsWideCharString` now raises a :exc:`ValueError` if the
- second argument is *NULL* and the :c:type:`wchar_t*` string contains null
- characters. (Contributed by Serhiy Storchaka in :issue:`30708`.)
-
-- Changes to the startup sequence and the management of dynamic memory
- allocators mean that the long documented requirement to call
- :c:func:`Py_Initialize` before calling most C API functions is now
- relied on more heavily, and failing to abide by it may lead to segfaults in
- embedding applications. See the :ref:`porting-to-python-37` section in this
- document and the :ref:`pre-init-safe` section in the C API documentation
- for more details.
+The overhead of calling many methods of various standard library classes
+implemented in C has been significantly reduced by porting more code
+to use the ``METH_FASTCALL`` convention.
+(Contributed by Victor Stinner in :issue:`29300`, :issue:`29507`,
+:issue:`29452`, and :issue:`29286`.)
+
+Various optimizations have reduced Python startup time by 10% on Linux and
+up to 30% on macOS.
+(Contributed by Victor Stinner, INADA Naoki in :issue:`29585`, and
+Ivan Levkivskyi in :issue:`31333`.)
+
+Method calls are now up to 20% faster due to the bytecode changes which
+avoid creating bound method instances.
+(Contributed by Yury Selivanov and INADA Naoki in :issue:`26110`.)
+
+.. _whatsnew37-asyncio-perf:
+
+The :mod:`asyncio` module received a number of notable optimizations for
+commonly used functions:
+
+* The :func:`asyncio.get_event_loop` function has been reimplemented in C to
+ make it up to 15 times faster.
+ (Contributed by Yury Selivanov in :issue:`32296`.)
+
+* :class:`asyncio.Future` callback management has been optimized.
+ (Contributed by Yury Selivanov in :issue:`32348`.)
+
+* :func:`asyncio.gather` is now up to 15% faster.
+ (Contributed by Yury Selivanov in :issue:`32355`.)
+
+* :func:`asyncio.sleep` is now up to 2 times faster when the *delay*
+ argument is zero or negative.
+ (Contributed by Andrew Svetlov in :issue:`32351`.)
+
+* The performance overhead of asyncio debug mode has been reduced.
+ (Contributed by Antoine Pitrou in :issue:`31970`.)
+
+As a result of :ref:`PEP 560 work <whatsnew37-pep560>`, the import time
+of :mod:`typing` has been reduced by a factor of 7, and many typing operations
+are now faster.
+(Contributed by Ivan Levkivskyi in :issue:`32226`.)
+
+:func:`sorted` and :meth:`list.sort` have been optimized for common cases
+to be up to 40-75% faster.
+(Contributed by Elliot Gorokhovsky in :issue:`28685`.)
+
+:meth:`dict.copy` is now up to 5.5 times faster.
+(Contributed by Yury Selivanov in :issue:`31179`.)
+
+:func:`hasattr` and :func:`getattr` are now about 4 times faster when
+*name* is not found and *obj* does not override :meth:`object.__getattr__`
+or :meth:`object.__getattribute__`.
+(Contributed by INADA Naoki in :issue:`32544`.)
+
+Searching for certain Unicode characters (like Ukrainian capital "Є")
+in a string was up to 25 times slower than searching for other characters.
+It is now only 3 times slower in the worst case.
+(Contributed by Serhiy Storchaka in :issue:`24821`.)
+
+The :func:`collections.namedtuple` factory has been reimplemented to
+make the creation of named tuples 4 to 6 times faster.
+(Contributed by Jelle Zijlstra with further improvements by INADA Naoki,
+Serhiy Storchaka, and Raymond Hettinger in :issue:`28638`.)
+
+:meth:`date.fromordinal` and :meth:`date.fromtimestamp` are now up to
+30% faster in the common case.
+(Contributed by Paul Ganssle in :issue:`32403`.)
+
+The :func:`os.fwalk` function is now up to 2 times faster thanks to
+the use of :func:`os.scandir`.
+(Contributed by Serhiy Storchaka in :issue:`25996`.)
+
+The speed of the :func:`shutil.rmtree` function has been improved by
+20--40% thanks to the use of the :func:`os.scandir` function.
+(Contributed by Serhiy Storchaka in :issue:`28564`.)
+
+Optimized case-insensitive matching and searching of :mod:`regular
+expressions <re>`. Searching some patterns can now be up to 20 times faster.
+(Contributed by Serhiy Storchaka in :issue:`30285`.)
+
+:func:`re.compile` now converts ``flags`` parameter to int object if
+it is ``RegexFlag``. It is now as fast as Python 3.5, and faster than
+Python 3.6 by about 10% depending on the pattern.
+(Contributed by INADA Naoki in :issue:`31671`.)
+
+The :meth:`~selectors.BaseSelector.modify` methods of classes
+:class:`selectors.EpollSelector`, :class:`selectors.PollSelector`
+and :class:`selectors.DevpollSelector` may be around 10% faster under
+heavy loads. (Contributed by Giampaolo Rodola' in :issue:`30014`)
+
+Constant folding has been moved from the peephole optimizer to the new AST
+optimizer, which is able perform optimizations more consistently.
+(Contributed by Eugene Toder and INADA Naoki in :issue:`29469` and
+:issue:`11549`.)
+
+Most functions and methods in :mod:`abc` have been rewritten in C.
+This makes creation of abstract base classes, and calling :func:`isinstance`
+and :func:`issubclass` on them 1.5x faster. This also reduces Python
+start-up time by up to 10%. (Contributed by Ivan Levkivskyi and INADA Naoki
+in :issue:`31333`)
+
+Significant speed improvements to alternate constructors for
+:class:`datetime.date` and :class:`datetime.datetime` by using fast-path
+constructors when not constructing subclasses. (Contributed by Paul Ganssle
+in :issue:`32403`)
+
+The speed of comparison of :class:`array.array` instances has been
+improved considerably in certain cases. It is now from 10x to 70x faster
+when comparing arrays holding values of the same integer type.
+(Contributed by Adrian Wielgosik in :issue:`24700`.)
+
+The :func:`math.erf` and :func:`math.erfc` functions now use the (faster)
+C library implementation on most platforms.
+(Contributed by Serhiy Storchaka in :issue:`26121`.)
Other CPython Implementation Changes
====================================
-* Trace hooks may now opt out of receiving ``line`` events from the interpreter
- by setting the new ``f_trace_lines`` attribute to :const:`False` on the frame
- being traced. (Contributed by Nick Coghlan in :issue:`31344`.)
-
-* Trace hooks may now opt in to receiving ``opcode`` events from the interpreter
- by setting the new ``f_trace_opcodes`` attribute to :const:`True` on the frame
- being traced. (Contributed by Nick Coghlan in :issue:`31344`.)
+* Trace hooks may now opt out of receiving the ``line`` and opt into receiving
+ the ``opcode`` events from the interpreter by setting the corresponding new
+ ``f_trace_lines`` and ``f_trace_opcodes`` attributes on the
+ frame being traced. (Contributed by Nick Coghlan in :issue:`31344`.)
* Fixed some consistency problems with namespace package module attributes.
Namespace module objects now have an ``__file__`` that is set to ``None``
@@ -1012,90 +1766,213 @@ Other CPython Implementation Changes
``__loader__`` (previously, the former was set to ``None``). See
:issue:`32303`.
+* The :func:`locals` dictionary now displays in the lexical order that
+ variables were defined. Previously, the order was undefined.
+ (Contributed by Raymond Hettinger in :issue:`32690`.)
-Deprecated
-==========
+* The :mod:`distutils` ``upload`` command no longer tries to change CR
+ end-of-line characters to CRLF. This fixes a corruption issue with sdists
+ that ended with a byte equivalent to CR.
+ (Contributed by Bo Bayles in :issue:`32304`.)
-* In Python 3.8, the abstract base classes in :mod:`collections.abc` will no
- longer be exposed in the regular :mod:`collections` module. This will help
- create a clearer distinction between the concrete classes and the abstract
- base classes.
-* Yield expressions (both ``yield`` and ``yield from`` clauses) are now deprecated
- in comprehensions and generator expressions (aside from the iterable expression
- in the leftmost :keyword:`for` clause). This ensures that comprehensions
- always immediately return a container of the appropriate type (rather than
- potentially returning a :term:`generator iterator` object), while generator
- expressions won't attempt to interleave their implicit output with the output
- from any explicit yield expressions.
+Deprecated Python Behavior
+==========================
- In Python 3.7, such expressions emit :exc:`DeprecationWarning` when compiled,
- in Python 3.8+ they will emit :exc:`SyntaxError`. (Contributed by Serhiy
- Storchaka in :issue:`10544`.)
+Yield expressions (both ``yield`` and ``yield from`` clauses) are now deprecated
+in comprehensions and generator expressions (aside from the iterable expression
+in the leftmost :keyword:`for` clause). This ensures that comprehensions
+always immediately return a container of the appropriate type (rather than
+potentially returning a :term:`generator iterator` object), while generator
+expressions won't attempt to interleave their implicit output with the output
+from any explicit yield expressions. In Python 3.7, such expressions emit
+:exc:`DeprecationWarning` when compiled, in Python 3.8 this will be a
+:exc:`SyntaxError`.
+(Contributed by Serhiy Storchaka in :issue:`10544`.)
-- Function :c:func:`PySlice_GetIndicesEx` is deprecated and replaced with
- a macro if ``Py_LIMITED_API`` is not set or set to the value between
- ``0x03050400`` and ``0x03060000`` (not including) or ``0x03060100`` or
- higher. (Contributed by Serhiy Storchaka in :issue:`27867`.)
+Returning a subclass of :class:`complex` from :meth:`object.__complex__` is
+deprecated and will be an error in future Python versions. This makes
+``__complex__()`` consistent with :meth:`object.__int__` and
+:meth:`object.__float__`.
+(Contributed by Serhiy Storchaka in :issue:`28894`.)
-- Deprecated :meth:`format` from :mod:`locale`, use the :meth:`format_string`
- instead. (Contributed by Garvit in :issue:`10379`.)
-- Methods
- :meth:`MetaPathFinder.find_module() <importlib.abc.MetaPathFinder.find_module>`
- (replaced by
- :meth:`MetaPathFinder.find_spec() <importlib.abc.MetaPathFinder.find_spec>`)
- and
- :meth:`PathEntryFinder.find_loader() <importlib.abc.PathEntryFinder.find_loader>`
- (replaced by
- :meth:`PathEntryFinder.find_spec() <importlib.abc.PathEntryFinder.find_spec>`)
- both deprecated in Python 3.4 now emit :exc:`DeprecationWarning`.
- (Contributed by Matthias Bussonnier in :issue:`29576`)
-- Using non-integer value for selecting a plural form in :mod:`gettext` is
- now deprecated. It never correctly worked. (Contributed by Serhiy Storchaka
- in :issue:`28692`.)
+Deprecated Python modules, functions and methods
+================================================
-- The :mod:`macpath` is now deprecated and will be removed in Python 3.8.
+aifc
+----
-- The :class:`importlib.abc.ResourceLoader` ABC has been deprecated in
- favour of :class:`importlib.abc.ResourceReader`.
+:func:`aifc.openfp` has been deprecated and will be removed in Python 3.9.
+Use :func:`aifc.open` instead.
+(Contributed by Brian Curtin in :issue:`31985`.)
-- Deprecated :func:`sys.set_coroutine_wrapper` and
- :func:`sys.get_coroutine_wrapper`.
-- :func:`ssl.wrap_socket` is deprecated. Use
- :meth:`ssl.SSLContext.wrap_socket` instead.
- (Contributed by Christian Heimes in :issue:`28124`.)
+.. _whatsnew37-asyncio-deprecated:
+asyncio
+-------
+
+Support for directly ``await``-ing instances of :class:`asyncio.Lock` and
+other asyncio synchronization primitives has been deprecated. An
+asynchronous context manager must be used in order to acquire and release
+the synchronization resource. See :ref:`async-with-locks` for more
+information.
+(Contributed by Andrew Svetlov in :issue:`32253`.)
+
+The :meth:`asyncio.Task.current_task` and :meth:`asyncio.Task.all_tasks`
+methods have been deprecated.
+(Contributed by Andrew Svetlov in :issue:`32250`.)
+
+
+collections
+-----------
+
+In Python 3.8, the abstract base classes in :mod:`collections.abc` will no
+longer be exposed in the regular :mod:`collections` module. This will help
+create a clearer distinction between the concrete classes and the abstract
+base classes.
+(Contributed by Serhiy Storchaka in :issue:`25988`.)
-Windows Only
-------------
-- The python launcher, (py.exe), can accept 32 & 64 bit specifiers **without**
- having to specify a minor version as well. So ``py -3-32`` and ``py -3-64``
- become valid as well as ``py -3.7-32``, also the -*m*-64 and -*m.n*-64 forms
- are now accepted to force 64 bit python even if 32 bit would have otherwise
- been used. If the specified version is not available py.exe will error exit.
- (Contributed by Steve Barnes in :issue:`30291`.)
+dbm
+---
+
+:mod:`dbm.dumb` now supports reading read-only files and no longer writes the
+index file when it is not changed. A deprecation warning is now emitted
+if the index file is missing and recreated in the ``'r'`` and ``'w'``
+modes (this will be an error in future Python releases).
+(Contributed by Serhiy Storchaka in :issue:`28847`.)
+
+
+enum
+----
+
+In Python 3.8, attempting to check for non-Enum objects in :class:`Enum`
+classes will raise a :exc:`TypeError` (e.g. ``1 in Color``); similarly,
+attempting to check for non-Flag objects in a :class:`Flag` member will
+raise :exc:`TypeError` (e.g. ``1 in Perm.RW``); currently, both operations
+return :const:`False` instead.
+(Contributed by Ethan Furman in :issue:`33217`.)
+
+
+gettext
+-------
-- The launcher can be run as ``py -0`` to produce a list of the installed pythons,
- *with default marked with an asterisk*. Running ``py -0p`` will include the paths.
- If py is run with a version specifier that cannot be matched it will also print
- the *short form* list of available specifiers.
- (Contributed by Steve Barnes in :issue:`30362`.)
+Using non-integer value for selecting a plural form in :mod:`gettext` is
+now deprecated. It never correctly worked. (Contributed by Serhiy Storchaka
+in :issue:`28692`.)
-Removed
-=======
+importlib
+---------
+
+Methods
+:meth:`MetaPathFinder.find_module() <importlib.abc.MetaPathFinder.find_module>`
+(replaced by
+:meth:`MetaPathFinder.find_spec() <importlib.abc.MetaPathFinder.find_spec>`)
+and
+:meth:`PathEntryFinder.find_loader() <importlib.abc.PathEntryFinder.find_loader>`
+(replaced by
+:meth:`PathEntryFinder.find_spec() <importlib.abc.PathEntryFinder.find_spec>`)
+both deprecated in Python 3.4 now emit :exc:`DeprecationWarning`.
+(Contributed by Matthias Bussonnier in :issue:`29576`)
+
+The :class:`importlib.abc.ResourceLoader` ABC has been deprecated in
+favour of :class:`importlib.abc.ResourceReader`.
+
+
+locale
+------
+
+:func:`locale.format` has been deprecated, use :meth:`locale.format_string`
+instead. (Contributed by Garvit in :issue:`10379`.)
+
+
+macpath
+-------
+
+The :mod:`macpath` is now deprecated and will be removed in Python 3.8.
+(Contributed by Chi Hsuan Yen in :issue:`9850`.)
+
+
+threading
+---------
+
+:mod:`dummy_threading` and :mod:`_dummy_thread` have been deprecated. It is
+no longer possible to build Python with threading disabled.
+Use :mod:`threading` instead.
+(Contributed by Antoine Pitrou in :issue:`31370`.)
+
+
+socket
+------
+
+The silent argument value trunctation in :func:`socket.htons` and
+:func:`socket.ntohs` has been deprecated. In future versions of Python,
+if the passed argument is larger than 16 bits, an exception will be raised.
+(Contributed by Oren Milman in :issue:`28332`.)
+
+
+ssl
+---
+
+:func:`ssl.wrap_socket` is deprecated. Use
+:meth:`ssl.SSLContext.wrap_socket` instead.
+(Contributed by Christian Heimes in :issue:`28124`.)
+
+
+sunau
+-----
+
+:func:`sunau.openfp` has been deprecated and will be removed in Python 3.9.
+Use :func:`sunau.open` instead.
+(Contributed by Brian Curtin in :issue:`31985`.)
+
+
+sys
+---
+
+Deprecated :func:`sys.set_coroutine_wrapper` and
+:func:`sys.get_coroutine_wrapper`.
+
+The undocumented ``sys.callstats()`` function has been deprecated and
+will be removed in a future Python version.
+(Contributed by Victor Stinner in :issue:`28799`.)
+
+
+wave
+----
+
+:func:`wave.openfp` has been deprecated and will be removed in Python 3.9.
+Use :func:`wave.open` instead.
+(Contributed by Brian Curtin in :issue:`31985`.)
+
+
+Deprecated functions and types of the C API
+===========================================
+
+Function :c:func:`PySlice_GetIndicesEx` is deprecated and replaced with
+a macro if ``Py_LIMITED_API`` is not set or set to a value in the range
+between ``0x03050400`` and ``0x03060000`` (not inclusive), or is ``0x03060100``
+or higher. (Contributed by Serhiy Storchaka in :issue:`27867`.)
+
+:c:func:`PyOS_AfterFork` has been deprecated. Use :c:func:`PyOS_BeforeFork`,
+:c:func:`PyOS_AfterFork_Parent` or :c:func:`PyOS_AfterFork_Child()` instead.
+(Contributed by Antoine Pitrou in :issue:`16500`.)
+
Platform Support Removals
--------------------------
+=========================
+
+FreeBSD 9 and older are no longer officially supported.
-* FreeBSD 9 and older are no longer supported.
API and Feature Removals
-------------------------
+========================
+
+The following features and APIs have been removed from Python 3.7:
* The ``os.stat_float_times()`` function has been removed. It was introduced in
Python 2.3 for backward compatibility with Python 2.2, and was deprecated
@@ -1129,15 +2006,51 @@ API and Feature Removals
can use attribute access to access items of these dictionaries.
* The ``asyncio.windows_utils.socketpair()`` function has been
- removed: use directly :func:`socket.socketpair` which is available on all
- platforms since Python 3.5 (before, it wasn't available on Windows).
+ removed. Use the :func:`socket.socketpair` function instead,
+ it is available on all platforms since Python 3.5.
``asyncio.windows_utils.socketpair`` was just an alias to
``socket.socketpair`` on Python 3.5 and newer.
-* :mod:`asyncio`: The module doesn't export :mod:`selectors` and
+* :mod:`asyncio` no longer exports the :mod:`selectors` and
:mod:`_overlapped` modules as ``asyncio.selectors`` and
``asyncio._overlapped``. Replace ``from asyncio import selectors`` with
- ``import selectors`` for example.
+ ``import selectors``.
+
+* Direct instantiation of :class:`ssl.SSLSocket` and :class:`ssl.SSLObject`
+ objects is now prohibited. The constructors were never documented, tested,
+ or designed as public constructors. Users were supposed to use
+ :func:`ssl.wrap_socket` or :class:`ssl.SSLContext`.
+ (Contributed by Christian Heimes in :issue:`32951`.)
+
+* The unused :mod:`distutils` ``install_misc`` command has been removed.
+ (Contributed by Eric N. Vander Weele in :issue:`29218`.)
+
+
+Module Removals
+===============
+
+The ``fpectl`` module has been removed. It was never enabled by
+default, never worked correctly on x86-64, and it changed the Python
+ABI in ways that caused unexpected breakage of C extensions.
+(Contributed by Nathaniel J. Smith in :issue:`29137`.)
+
+
+Windows-only Changes
+====================
+
+The python launcher, (py.exe), can accept 32 & 64 bit specifiers **without**
+having to specify a minor version as well. So ``py -3-32`` and ``py -3-64``
+become valid as well as ``py -3.7-32``, also the -*m*-64 and -*m.n*-64 forms
+are now accepted to force 64 bit python even if 32 bit would have otherwise
+been used. If the specified version is not available py.exe will error exit.
+(Contributed by Steve Barnes in :issue:`30291`.)
+
+The launcher can be run as ``py -0`` to produce a list of the installed pythons,
+*with default marked with an asterisk*. Running ``py -0p`` will include the paths.
+If py is run with a version specifier that cannot be matched it will also print
+the *short form* list of available specifiers.
+(Contributed by Steve Barnes in :issue:`30362`.)
+
.. _porting-to-python-37:
@@ -1148,15 +2061,22 @@ This section lists previously described changes and other bugfixes
that may require changes to your code.
-Changes in Python behavior
+Changes in Python Behavior
--------------------------
+* :keyword:`async` and :keyword:`await` names are now reserved keywords.
+ Code using these names as identifiers will now raise a :exc:`SyntaxError`.
+ (Contributed by Jelle Zijlstra in :issue:`30406`.)
+
* :pep:`479` is enabled for all code in Python 3.7, meaning that
:exc:`StopIteration` exceptions raised directly or indirectly in
coroutines and generators are transformed into :exc:`RuntimeError`
exceptions.
(Contributed by Yury Selivanov in :issue:`32670`.)
+* :meth:`object.__aiter__` methods can no longer be declared as
+ asynchronous. (Contributed by Yury Selivanov in :issue:`31709`.)
+
* Due to an oversight, earlier Python versions erroneously accepted the
following syntax::
@@ -1183,22 +2103,25 @@ Changes in Python behavior
Changes in the Python API
-------------------------
-* :meth:`socketserver.ThreadingMixIn.server_close` now waits until all
- non-daemon threads complete. Use daemonic threads by setting
- :data:`socketserver.ThreadingMixIn.daemon_threads` to ``True`` to not
- wait until threads complete.
- (Contributed by Victor Stinner in :issue:`31233`.)
+* ``Module``, ``FunctionDef``, ``AsyncFunctionDef``, and
+ ``ClassDef`` AST nodes now have the new ``docstring`` attribute.
+ The first statement in their body is not considered as a docstring
+ anymore. ``co_firstlineno`` and ``co_lnotab`` of code object for class
+ and module are affected by this change. (Contributed by INADA Naoki and
+ Eugene Toder in :issue:`29463`.)
-* :meth:`socketserver.ForkingMixIn.server_close` now waits until all
- child processes complete. (Contributed by Victor Stinner in :issue:`31151`.)
+* :meth:`~socketserver.BaseServer.server_close` in
+ :class:`socketserver.ThreadingMixIn` and :class:`socketserver.ForkingMixIn`
+ now waits until all non-daemon threads complete.
+ (Contributed by Victor Stinner in :issue:`31233` and :issue:`31151`.)
-* The :func:`locale.localeconv` function now sets temporarily the ``LC_CTYPE``
- locale to the ``LC_NUMERIC`` locale in some cases.
+* The :func:`locale.localeconv` function now temporarily sets the ``LC_CTYPE``
+ locale to the value of ``LC_NUMERIC`` in some cases.
(Contributed by Victor Stinner in :issue:`31900`.)
-* :meth:`pkgutil.walk_packages` now raises :exc:`ValueError` if *path* is a string.
- Previously an empty list was returned. (Contributed by Sanyam Khurana in
- :issue:`24744`.)
+* :meth:`pkgutil.walk_packages` now raises a :exc:`ValueError` if *path* is
+ a string. Previously an empty list was returned.
+ (Contributed by Sanyam Khurana in :issue:`24744`.)
* A format string argument for :meth:`string.Formatter.format`
is now :ref:`positional-only <positional-only_parameter>`.
@@ -1213,13 +2136,6 @@ Changes in the Python API
Use the :meth:`~http.cookies.Morsel.set` method for setting them.
(Contributed by Serhiy Storchaka in :issue:`29192`.)
-* ``Module``, ``FunctionDef``, ``AsyncFunctionDef``, and
- ``ClassDef`` AST nodes now have a new ``docstring`` field.
- The first statement in their body is not considered as a docstring
- anymore. ``co_firstlineno`` and ``co_lnotab`` of code object for class
- and module are affected by this change. (Contributed by INADA Naoki and
- Eugene Toder in :issue:`29463`.)
-
* The *mode* argument of :func:`os.makedirs` no longer affects the file
permission bits of newly-created intermediate-level directories.
To set their file permission bits you can set the umask before invoking
@@ -1229,34 +2145,35 @@ Changes in the Python API
* The :attr:`struct.Struct.format` type is now :class:`str` instead of
:class:`bytes`. (Contributed by Victor Stinner in :issue:`21071`.)
-* :func:`~cgi.parse_multipart` returns now the same results as
+* :func:`~cgi.parse_multipart` now accepts the *encoding* and *errors*
+ arguments and returns the same results as
:class:`~FieldStorage`: for non-file fields, the value associated to a key
is a list of strings, not bytes.
(Contributed by Pierre Quentel in :issue:`29979`.)
-* Due to internal changes in :mod:`socket` you won't be able to
- :func:`socket.fromshare` a socket :func:`~socket.socket.share`-ed in older
- Python versions.
+* Due to internal changes in :mod:`socket`, calling :func:`socket.fromshare`
+ on a socket created by :func:`socket.share <socket.socket.share>` in older
+ Python versions is not supported.
-* ``repr`` for :exc:`BaseException` has changed not to include trailing comma
- in the output. Mind that most exceptions are affected by this change.
+* ``repr`` for :exc:`BaseException` has changed to not include the trailing
+ comma. Most exceptions are affected by this change.
(Contributed by Serhiy Storchaka in :issue:`30399`.)
-* ``repr`` for :class:`datetime.timedelta` has changed to include keyword arguments
- in the output. (Contributed by Utkarsh Upadhyay in :issue:`30302`.)
+* ``repr`` for :class:`datetime.timedelta` has changed to include the keyword
+ arguments in the output. (Contributed by Utkarsh Upadhyay in :issue:`30302`.)
* Because :func:`shutil.rmtree` is now implemented using the :func:`os.scandir`
function, the user specified handler *onerror* is now called with the first
argument ``os.scandir`` instead of ``os.listdir`` when listing the direcory
is failed.
-* Support of nested sets and set operations in regular expressions as in
+* Support for nested sets and set operations in regular expressions as in
`Unicode Technical Standard #18`_ might be added in the future. This would
- change the syntax, so to facilitate this change a :exc:`FutureWarning` will
- be raised in ambiguous cases for the time being.
+ change the syntax. To facilitate this future change a :exc:`FutureWarning`
+ will be raised in ambiguous cases for the time being.
That include sets starting with a literal ``'['`` or containing literal
character sequences ``'--'``, ``'&&'``, ``'~~'``, and ``'||'``. To
- avoid a warning escape them with a backslash.
+ avoid a warning, escape them with a backslash.
(Contributed by Serhiy Storchaka in :issue:`30349`.)
.. _Unicode Technical Standard #18: https://unicode.org/reports/tr18/
@@ -1308,85 +2225,124 @@ Changes in the Python API
previous behaviour, or use
:attr:`STARTUPINFO.lpAttributeList <subprocess.STARTUPINFO.lpAttributeList>`.
+* :meth:`importlib.machinery.PathFinder.invalidate_caches` -- which implicitly
+ affects :func:`importlib.invalidate_caches` -- now deletes entries
+ in :data:`sys.path_importer_cache` which are set to ``None``.
+ (Contributed by Brett Cannon in :issue:`33169`.)
+
+* In :mod:`asyncio`,
+ :meth:`loop.sock_recv() <asyncio.AbstractEventLoop.sock_recv>`,
+ :meth:`loop.sock_sendall() <asyncio.AbstractEventLoop.sock_sendall>`,
+ :meth:`loop.sock_accept() <asyncio.AbstractEventLoop.sock_accept>`,
+ :meth:`loop.getaddrinfo() <asyncio.AbstractEventLoop.getaddrinfo>`,
+ :meth:`loop.getnameinfo() <asyncio.AbstractEventLoop.getnameinfo>`
+ have been changed to be proper coroutine methods to match their
+ documentation. Previously, these methods returned :class:`asyncio.Future`
+ instances.
+ (Contributed by Yury Selivanov in :issue:`32327`.)
+
+* :attr:`asyncio.Server.sockets` now returns a copy of the internal list
+ of server sockets, instead of returning it directly.
+ (Contributed by Yury Selivanov in :issue:`32662`.)
+
+* :attr:`Struct.format <struct.Struct.format>` is now a :class:`str` instance
+ instead of a :class:`bytes` instance.
+ (Contributed by Victor Stinner in :issue:`21071`.)
+
+* :mod:`argparse` subparsers are now required by default. This matches the
+ behaviour in Python 2. To add an optional subparser, pass
+ ``required=False`` to
+ :meth:`ArgumentParser.add_subparsers() <argparse.ArgumentParser.add_subparsers>`.
+ (Contributed by Anthony Sottile in :issue:`26510`.)
+
+* :meth:`ast.literal_eval()` is now stricter. Addition and subtraction of
+ arbitrary numbers are no longer allowed.
+ (Contributed by Serhiy Storchaka in :issue:`31778`.)
+
+* :meth:`Calendar.itermonthdates <calendar.Calendar.itermonthdates>`
+ will now consistently raise an exception when a date falls outside of the
+ ``0001-01-01`` through ``9999-12-31`` range. To support applications that
+ cannot tolerate such exceptions, the new
+ :meth:`Calendar.itermonthdays3 <calendar.Calendar.itermonthdays3>` and
+ :meth:`Calendar.itermonthdays4 <calendar.Calendar.itermonthdays4>` can be used.
+ The new methods return tuples and are not restricted by the range supported by
+ :class:`datetime.date`.
+ (Contributed by Alexander Belopolsky in :issue:`28292`.)
+
+* :class:`collections.ChainMap` now preserves the order of the underlying
+ mappings. (Contributed by Raymond Hettinger in :issue:`32792`.)
+
+* The ``submit()`` method of :class:`concurrent.futures.ThreadPoolExecutor`
+ and :class:`concurrent.futures.ProcessPoolExecutor` now raises
+ a :exc:`RuntimeError` if called during interpreter shutdown.
+ (Contributed by Mark Nemec in :issue:`33097`.)
+
+* The :class:`configparser.ConfigParser` constructor now uses ``read_dict()``
+ to process the default values, making its behavior consistent with the
+ rest of the parser. Non-string keys and values in the defaults
+ dictionary are now being implicitly converted to strings.
+ (Contributed by James Tocknell in :issue:`23835`.)
+
Changes in the C API
--------------------
-* The function :c:func:`PySlice_GetIndicesEx` is considered not safe for
- resizable sequences. If the slice indices are not instances of :class:`int`,
- but objects that implement the :meth:`!__index__` method, the sequence can be
- resized after passing its length to :c:func:`!PySlice_GetIndicesEx`. This
- can lead to returning indices out of the length of the sequence. For
- avoiding possible problems use new functions :c:func:`PySlice_Unpack` and
- :c:func:`PySlice_AdjustIndices`.
- (Contributed by Serhiy Storchaka in :issue:`27867`.)
+The function :c:func:`PySlice_GetIndicesEx` is considered unsafe for
+resizable sequences. If the slice indices are not instances of :class:`int`,
+but objects that implement the :meth:`!__index__` method, the sequence can be
+resized after passing its length to :c:func:`!PySlice_GetIndicesEx`. This
+can lead to returning indices out of the length of the sequence. For
+avoiding possible problems use new functions :c:func:`PySlice_Unpack` and
+:c:func:`PySlice_AdjustIndices`.
+(Contributed by Serhiy Storchaka in :issue:`27867`.)
CPython bytecode changes
------------------------
-* Added two new opcodes: :opcode:`LOAD_METHOD` and :opcode:`CALL_METHOD`.
- (Contributed by Yury Selivanov and INADA Naoki in :issue:`26110`.)
-
-* Removed the :opcode:`STORE_ANNOTATION` opcode.
- (Contributed by Mark Shannon in :issue:`32550`.)
+There are two new opcodes: :opcode:`LOAD_METHOD` and :opcode:`CALL_METHOD`.
+(Contributed by Yury Selivanov and INADA Naoki in :issue:`26110`.)
+The :opcode:`STORE_ANNOTATION` opcode has been removed.
+(Contributed by Mark Shannon in :issue:`32550`.)
-Other CPython implementation changes
-------------------------------------
-
-* In preparation for potential future changes to the public CPython runtime
- initialization API (see :pep:`432` for an initial, but somewhat outdated,
- draft), CPython's internal startup
- and configuration management logic has been significantly refactored. While
- these updates are intended to be entirely transparent to both embedding
- applications and users of the regular CPython CLI, they're being mentioned
- here as the refactoring changes the internal order of various operations
- during interpreter startup, and hence may uncover previously latent defects,
- either in embedding applications, or in CPython itself.
- (Initially contributed by Nick Coghlan and Eric Snow as part of
- :issue:`22257`, and further updated by Nick, Eric, and Victor Stinner in a
- number of other issues). Some known details affected:
-
- * :c:func:`PySys_AddWarnOptionUnicode` is not currently usable by embedding
- applications due to the requirement to create a Unicode object prior to
- calling `Py_Initialize`. Use :c:func:`PySys_AddWarnOption` instead.
- * warnings filters added by an embedding application with
- :c:func:`PySys_AddWarnOption` should now more consistently take precedence
- over the default filters set by the interpreter
-
-* Due to changes in the way the default warnings filters are configured,
- setting :c:data:`Py_BytesWarningFlag` to a value greater than one is no longer
- sufficient to both emit :exc:`BytesWarning` messages and have them converted
- to exceptions. Instead, the flag must be set (to cause the warnings to be
- emitted in the first place), and an explicit ``error::BytesWarning``
- warnings filter added to convert them to exceptions.
-
-* CPython' :mod:`ssl` module requires OpenSSL 1.0.2 or 1.1 compatible libssl.
- OpenSSL 1.0.1 has reached end of lifetime on 2016-12-31 and is no longer
- supported. LibreSSL is temporarily not supported as well. LibreSSL releases
- up to version 2.6.4 are missing required OpenSSL 1.0.2 APIs.
-
-
-Documentation
-=============
-.. _whatsnew37-pep545:
-
-PEP 545: Python Documentation Translations
-------------------------------------------
-
-:pep:`545` describes the process to translate Python documentation,
-and three translations have been added:
+Windows-only Changes
+--------------------
-- Japanese: https://docs.python.org/ja/ and associated GitHub
- repository: https://github.com/python/python-docs-ja
+The file used to override :data:`sys.path` is now called
+``<python-executable>._pth`` instead of ``'sys.path'``.
+See :ref:`finding_modules` for more information.
+(Contributed by Steve Dower in :issue:`28137`.)
-- French: https://docs.python.org/fr/ and associated GitHub
- repository: https://github.com/python/python-docs-fr
-- Korean: https://docs.python.org/ko/ and associated GitHub
- repository: https://github.com/python/python-docs-ko
+Other CPython implementation changes
+------------------------------------
-(Contributed by Julien Palard, Inada Naoki, and Victor Stinner in
-:issue:`26546`.)
+In preparation for potential future changes to the public CPython runtime
+initialization API (see :pep:`432` for an initial, but somewhat outdated,
+draft), CPython's internal startup
+and configuration management logic has been significantly refactored. While
+these updates are intended to be entirely transparent to both embedding
+applications and users of the regular CPython CLI, they're being mentioned
+here as the refactoring changes the internal order of various operations
+during interpreter startup, and hence may uncover previously latent defects,
+either in embedding applications, or in CPython itself.
+(Initially contributed by Nick Coghlan and Eric Snow as part of
+:issue:`22257`, and further updated by Nick, Eric, and Victor Stinner in a
+number of other issues). Some known details affected:
+
+* :c:func:`PySys_AddWarnOptionUnicode` is not currently usable by embedding
+ applications due to the requirement to create a Unicode object prior to
+ calling `Py_Initialize`. Use :c:func:`PySys_AddWarnOption` instead.
+
+* warnings filters added by an embedding application with
+ :c:func:`PySys_AddWarnOption` should now more consistently take precedence
+ over the default filters set by the interpreter
+
+Due to changes in the way the default warnings filters are configured,
+setting :c:data:`Py_BytesWarningFlag` to a value greater than one is no longer
+sufficient to both emit :exc:`BytesWarning` messages and have them converted
+to exceptions. Instead, the flag must be set (to cause the warnings to be
+emitted in the first place), and an explicit ``error::BytesWarning``
+warnings filter added to convert them to exceptions.