summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYury Selivanov <yselivanov@sprymix.com>2015-09-10 21:35:38 (GMT)
committerYury Selivanov <yselivanov@sprymix.com>2015-09-10 21:35:38 (GMT)
commitce917c731d4fe2290fb5f3d66df55f6592a242e5 (patch)
tree94badf1ce3768af4120b5ea4ac4e60895a7b6965
parent31ce9ac86748fbbb4a64ea3910af97150a594751 (diff)
downloadcpython-ce917c731d4fe2290fb5f3d66df55f6592a242e5.zip
cpython-ce917c731d4fe2290fb5f3d66df55f6592a242e5.tar.gz
cpython-ce917c731d4fe2290fb5f3d66df55f6592a242e5.tar.bz2
whatsnew/3.5: Editorialization pass on library section
Patch by Elvis Pranskevichus
-rw-r--r--Doc/whatsnew/3.5.rst950
1 files changed, 551 insertions, 399 deletions
diff --git a/Doc/whatsnew/3.5.rst b/Doc/whatsnew/3.5.rst
index a38bbab..06a74eb 100644
--- a/Doc/whatsnew/3.5.rst
+++ b/Doc/whatsnew/3.5.rst
@@ -69,8 +69,8 @@ Summary -- Release highlights
New syntax features:
-* :pep:`465`, a new matrix multiplication operator: ``a @ b``.
* :pep:`492`, coroutines with async and await syntax.
+* :pep:`465`, a new matrix multiplication operator: ``a @ b``.
* :pep:`448`, additional unpacking generalizations.
New library modules:
@@ -94,22 +94,24 @@ New built-in features:
* New :exc:`RecursionError` exception. (Contributed by Georg Brandl
in :issue:`19235`.)
-Implementation improvements:
+CPython implementation improvements:
* When the ``LC_TYPE`` locale is the POSIX locale (``C`` locale),
:py:data:`sys.stdin` and :py:data:`sys.stdout` are now using the
``surrogateescape`` error handler, instead of the ``strict`` error handler
(:issue:`19977`).
-* :pep:`488`, the elimination of ``.pyo`` files.
+* ``.pyo`` files are no longer used and have been replaced by a more flexible
+ scheme that inclides the optimization level explicitly in ``.pyc`` name.
+ (:pep:`488`)
-* :pep:`489`, multi-phase initialization of extension modules.
+* Builtin and extension modules are now initialized in a multi-phase process,
+ which is similar to how Python modules are loaded. (:pep:`489`).
Significantly Improved Library Modules:
-* :class:`collections.OrderedDict` is now implemented in C, which improves
- its performance between 4x to 100x times. Contributed by Eric Snow in
- :issue:`16991`.
+* :class:`collections.OrderedDict` is now implemented in C, which makes it
+ 4 to 100 times faster. Contributed by Eric Snow in :issue:`16991`.
* You may now pass bytes to the :mod:`tempfile` module's APIs and it will
return the temporary pathname as :class:`bytes` instead of :class:`str`.
@@ -146,8 +148,8 @@ Security improvements:
Windows improvements:
-* A new installer for Windows has replaced the old MSI. See :ref:`using-on-windows`
- for more information.
+* A new installer for Windows has replaced the old MSI.
+ See :ref:`using-on-windows` for more information.
* Windows builds now use Microsoft Visual C++ 14.0, and extension modules
should use the same.
@@ -252,6 +254,8 @@ such as :class:`asyncio.Loop`.
PEP written and implemented by Yury Selivanov.
+.. _whatsnew-pep-465:
+
PEP 465 - A dedicated infix operator for matrix multiplication
--------------------------------------------------------------
@@ -297,6 +301,8 @@ An upcoming release of NumPy 1.10 will add support for the new operator::
PEP written by Nathaniel J. Smith; implemented by Benjamin Peterson.
+.. _whatsnew-pep-448:
+
PEP 448 - Additional Unpacking Generalizations
----------------------------------------------
@@ -333,6 +339,8 @@ unpackings::
Thomas Wouters, and Joshua Landau.
+.. _whatsnew-pep-461:
+
PEP 461 - % formatting support for bytes and bytearray
------------------------------------------------------
@@ -364,6 +372,8 @@ Unicode is not allowed for ``%s``, but it is accepted by ``%a`` (equivalent of
Ethan Furman.
+.. _whatsnew-pep-484:
+
PEP 484 - Type Hints
--------------------
@@ -389,11 +399,13 @@ types.
implemented by Guido van Rossum.
+.. _whatsnew-pep-471:
+
PEP 471 - os.scandir() function -- a better and faster directory iterator
-------------------------------------------------------------------------
:pep:`471` adds a new directory iteration function, :func:`os.scandir`,
-to the standard library. Additionally, :func:`os.walk` is now
+to the standard library. Additionally, :func:`os.walk` is now
implemented using :func:`os.scandir`, which speeds it up by 3-5 times
on POSIX systems and by 7-20 times on Windows systems.
@@ -403,6 +415,8 @@ on POSIX systems and by 7-20 times on Windows systems.
PEP written and implemented by Ben Hoyt with the help of Victor Stinner.
+.. _whatsnew-pep-475:
+
PEP 475: Retry system calls failing with EINTR
----------------------------------------------
@@ -455,6 +469,8 @@ not raise an exception:
Victor Stinner, with the help of Antoine Pitrou (the french connection).
+.. _whatsnew-pep-479:
+
PEP 479: Change StopIteration handling inside generators
--------------------------------------------------------
@@ -475,6 +491,8 @@ raised.
Chris Angelico, Yury Selivanov and Nick Coghlan.
+.. _whatsnew-pep-486:
+
PEP 486: Make the Python Launcher aware of virtual environments
---------------------------------------------------------------
@@ -489,6 +507,8 @@ environment will be used.
PEP written and implemented by Paul Moore.
+.. _whatsnew-pep-488:
+
PEP 488: Elimination of PYO files
---------------------------------
@@ -497,9 +517,10 @@ PEP 488: Elimination of PYO files
need to constantly regenerate bytecode files, ``.pyc`` files now have an
optional ``opt-`` tag in their name when the bytecode is optimized. This has the
side-effect of no more bytecode file name clashes when running under either
-``-O`` or ``-OO``. Consequently, bytecode files generated from ``-O``, and
-``-OO`` may now exist simultaneously. :func:`importlib.util.cache_from_source`
-has an updated API to help with this change.
+:option:`-O` or :option:`-OO`. Consequently, bytecode files generated from
+:option:`-O`, and :option:`-OO` may now exist simultaneously.
+:func:`importlib.util.cache_from_source` has an updated API to help with
+this change.
.. seealso::
@@ -507,6 +528,8 @@ has an updated API to help with this change.
PEP written and implemented by Brett Cannon.
+.. _whatsnew-pep-489:
+
PEP 489: Multi-phase extension module initialization
----------------------------------------------------
@@ -525,6 +548,8 @@ rather than being restricted to ASCII.
implemented by Petr Viktorin.
+.. _whatsnew-pep-485:
+
PEP 485: A function for testing approximate equality
----------------------------------------------------
@@ -576,8 +601,8 @@ zipapp
The new :mod:`zipapp` module (specified in :pep:`441`) provides an API and
command line tool for creating executable Python Zip Applications, which
-were introduced in Python 2.6 in :issue:`1739468` but which were not well
-publicised, either at the time or since.
+were introduced in Python 2.6 in :issue:`1739468`, but which were not well
+publicized, either at the time or since.
With the new module, bundling your application is as simple as putting all
the files, including a ``__main__.py`` file, into a directory ``myapp``
@@ -586,6 +611,13 @@ and running::
$ python -m zipapp myapp
$ python myapp.pyz
+The module implementation has been contributed by Paul Moore in
+:issue:`23491`.
+
+.. seealso::
+
+ :pep:`441` -- Improving Python ZIP Application Support
+
Improved Modules
================
@@ -593,191 +625,209 @@ Improved Modules
argparse
--------
-* :class:`~argparse.ArgumentParser` now allows to disable
- :ref:`abbreviated usage <prefix-matching>` of long options by setting
- :ref:`allow_abbrev` to ``False``.
- (Contributed by Jonathan Paugh, Steven Bethard, paul j3 and Daniel Eriksson
- in :issue:`14910`.)
+:class:`~argparse.ArgumentParser` now allows to disable
+:ref:`abbreviated usage <prefix-matching>` of long options by setting
+:ref:`allow_abbrev` to ``False``. (Contributed by Jonathan Paugh,
+Steven Bethard, paul j3 and Daniel Eriksson in :issue:`14910`.)
+
bz2
---
-* New option *max_length* for :meth:`~bz2.BZ2Decompressor.decompress`
- to limit the maximum size of decompressed data.
- (Contributed by Nikolaus Rath in :issue:`15955`.)
+:meth:`~bz2.BZ2Decompressor.decompress` now accepts an optional *max_length*
+argument to limit the maximum size of decompressed data. (Contributed by
+Nikolaus Rath in :issue:`15955`.)
+
cgi
---
-* :class:`~cgi.FieldStorage` now supports the context management protocol.
- (Contributed by Berker Peksag in :issue:`20289`.)
+:class:`~cgi.FieldStorage` now supports the context management protocol.
+(Contributed by Berker Peksag in :issue:`20289`.)
+
cmath
-----
-* :func:`cmath.isclose` function added.
- (Contributed by Chris Barker and Tal Einat in :issue:`24270`.)
+A new function :func:`cmath.isclose` provides a way to test for approximate
+equality. (Contributed by Chris Barker and Tal Einat in :issue:`24270`.)
code
----
-* The :func:`code.InteractiveInterpreter.showtraceback` method now prints
- the full chained traceback, just like the interactive interpreter.
- (Contributed by Claudiu Popa in :issue:`17442`.)
+The :func:`code.InteractiveInterpreter.showtraceback` method now prints
+the full chained traceback, just like the interactive interpreter.
+(Contributed by Claudiu Popa in :issue:`17442`.)
+
collections
-----------
-* You can now update docstrings produced by :func:`collections.namedtuple`::
+Docstrings produced by :func:`collections.namedtuple` can now be updated::
Point = namedtuple('Point', ['x', 'y'])
Point.__doc__ = 'ordered pair'
Point.x.__doc__ = 'abscissa'
Point.y.__doc__ = 'ordinate'
- (Contributed by Berker Peksag in :issue:`24064`.)
+(Contributed by Berker Peksag in :issue:`24064`.)
+
+The :class:`~collections.deque` now defines
+:meth:`~collections.deque.index`, :meth:`~collections.deque.insert`, and
+:meth:`~collections.deque.copy`. This allows deques to be recognized as a
+:class:`~collections.abc.MutableSequence` and improves their substitutablity
+for lists. (Contributed by Raymond Hettinger :issue:`23704`.)
-* :class:`~collections.deque` has new methods:
- :meth:`~collections.deque.index`, :meth:`~collections.deque.insert`, and
- :meth:`~collections.deque.copy`. This allows deques to be registered as a
- :class:`~collections.abc.MutableSequence` and improves their
- substitutablity for lists.
- (Contributed by Raymond Hettinger :issue:`23704`.)
+:class:`~collections.UserString` now implements :meth:`__getnewargs__`,
+:meth:`__rmod__`, :meth:`casefold`, :meth:`format_map`, :meth:`isprintable`, and
+:meth:`maketrans` methods to match corresponding methods of :class:`str`.
+(Contributed by Joe Jevnik in :issue:`22189`.)
-* :class:`~collections.UserString` now supports ``__getnewargs__``,
- ``__rmod__``, ``casefold``, ``format_map``, ``isprintable``, and
- ``maketrans`` methods.
- (Contributed by Joe Jevnik in :issue:`22189`.)
+:class:`collections.OrderedDict` is now implemented in C, which makes it 4x to
+100x faster. (Contributed by Eric Snow in :issue:`16991`.)
-* :class:`collections.OrderedDict` is now implemented in C, which improves
- its performance between 4x to 100x times.
- (Contributed by Eric Snow in :issue:`16991`.)
collections.abc
---------------
-* New :class:`~collections.abc.Generator` abstract base class.
- (Contributed by Stefan Behnel in :issue:`24018`.)
+New :class:`~collections.abc.Generator` abstract base class. (Contributed
+by Stefan Behnel in :issue:`24018`.)
+
+New :class:`~collections.abc.Coroutine`,
+:class:`~collections.abc.AsyncIterator`, and
+:class:`~collections.abc.AsyncIterable` abstract base classes.
+(Contributed by Yury Selivanov in :issue:`24184`.)
-* New :class:`~collections.abc.Coroutine`,
- :class:`~collections.abc.AsyncIterator`, and
- :class:`~collections.abc.AsyncIterable` abstract base classes.
- (Contributed by Yury Selivanov in :issue:`24184`.)
compileall
----------
-* :func:`compileall.compile_dir` and :mod:`compileall`'s command-line interface
- can now do parallel bytecode compilation.
- (Contributed by Claudiu Popa in :issue:`16104`.)
+A new :mod:`compileall` option, :option:`-j N`, allows to run ``N`` workers
+sumultaneously to perform parallel bytecode compilation. :func:`compileall.compile_dir` has a corresponding ``workers`` parameter. (Contributed by
+Claudiu Popa in :issue:`16104`.)
+
+The :option:`-q` command line option can now be specified more than once, in
+which case all output, including errors, will be suppressed. The corresponding
+``quiet`` parameter in :func:`compileall.compile_dir`, :func:`compileall.
+compile_file`, and :func:`compileall.compile_path` can now accept
+an integer value indicating the level of output suppression.
+(Contributed by Thomas Kluyver in :issue:`21338`.)
-* *quiet* parameter of :func:`compileall.compile_dir`,
- :func:`compileall.compile_file`, and :func:`compileall.compile_path`
- functions now has a multilevel value. New ``-qq`` command line option
- is available for suppressing the output.
- (Contributed by Thomas Kluyver in :issue:`21338`.)
concurrent.futures
------------------
-* :meth:`~concurrent.futures.Executor.map` now takes a *chunksize*
- argument to allow batching of tasks in child processes and improve
- performance of ProcessPoolExecutor.
- (Contributed by Dan O'Reilly in :issue:`11271`.)
+:meth:`~concurrent.futures.Executor.map` now accepts a *chunksize*
+argument to allow batching of tasks in child processes and improve performance
+of ProcessPoolExecutor. (Contributed by Dan O'Reilly in :issue:`11271`.)
+
contextlib
----------
-* The new :func:`contextlib.redirect_stderr` context manager(similar to
- :func:`contextlib.redirect_stdout`) makes it easier for utility scripts to
- handle inflexible APIs that write their output to :data:`sys.stderr` and
- don't provide any options to redirect it.
- (Contributed by Berker Peksag in :issue:`22389`.)
+The new :func:`contextlib.redirect_stderr` context manager (similar to
+:func:`contextlib.redirect_stdout`) makes it easier for utility scripts to
+handle inflexible APIs that write their output to :data:`sys.stderr` and
+don't provide any options to redirect it. (Contributed by Berker Peksag in
+:issue:`22389`.)
+
curses
------
-* The new :func:`curses.update_lines_cols` function updates the variables
- :envvar:`curses.LINES` and :envvar:`curses.COLS`.
+
+The new :func:`curses.update_lines_cols` function updates the variables
+:envvar:`curses.LINES` and :envvar:`curses.COLS`.
+
difflib
-------
-* The charset of the HTML document generated by :meth:`difflib.HtmlDiff.make_file`
- can now be customized by using *charset* keyword-only parameter. The default
- charset of HTML document changed from ``'ISO-8859-1'`` to ``'utf-8'``.
- (Contributed by Berker Peksag in :issue:`2052`.)
+The charset of the HTML document generated by :meth:`difflib.HtmlDiff.make_file`
+can now be customized by using *charset* keyword-only parameter. The default
+charset of HTML document changed from ``'ISO-8859-1'`` to ``'utf-8'``.
+(Contributed by Berker Peksag in :issue:`2052`.)
+
+It is now possible to compare lists of byte strings with
+:func:`difflib.diff_bytes`. This fixes a regression from Python 2.
+(Contributed by Terry J. Reedy and Greg Ward in :issue:`17445`.)
-* It's now possible to compare lists of byte strings with
- :func:`difflib.diff_bytes`. This fixes a regression from Python 2.
- (Contributed by Terry J. Reedy and Greg Ward in :issue:`17445`.)
distutils
---------
-* The ``build`` and ``build_ext`` commands now accept a ``-j``
- option to enable parallel building of extension modules.
- (Contributed by Antoine Pitrou in :issue:`5309`.)
+The ``build`` and ``build_ext`` commands now accept a :option:`-j` option to
+enable parallel building of extension modules.
+(Contributed by Antoine Pitrou in :issue:`5309`.)
+
+:mod:`distutils` now supports ``xz`` compression, and can be enabled by
+passing ``xztar`` as an argument to ``bdist --format``.
+(Contributed by Serhiy Storchaka in :issue:`16314`.)
-* Added support for the LZMA compression.
- (Contributed by Serhiy Storchaka in :issue:`16314`.)
doctest
-------
-* :func:`doctest.DocTestSuite` returns an empty :class:`unittest.TestSuite` if
- *module* contains no docstrings instead of raising :exc:`ValueError`.
- (Contributed by Glenn Jones in :issue:`15916`.)
+:func:`doctest.DocTestSuite` returns an empty :class:`unittest.TestSuite` if
+*module* contains no docstrings instead of raising :exc:`ValueError`.
+(Contributed by Glenn Jones in :issue:`15916`.)
+
email
-----
-* A new policy option :attr:`~email.policy.Policy.mangle_from_` controls
- whether or not lines that start with "From " in email bodies are prefixed with
- a '>' character by generators. The default is ``True`` for
- :attr:`~email.policy.compat32` and ``False`` for all other policies.
- (Contributed by Milan Oberkirch in :issue:`20098`.)
+A new policy option :attr:`~email.policy.Policy.mangle_from_` controls
+whether or not lines that start with ``"From "`` in email bodies are prefixed
+with a ``'>'`` character by generators. The default is ``True`` for
+:attr:`~email.policy.compat32` and ``False`` for all other policies.
+(Contributed by Milan Oberkirch in :issue:`20098`.)
+
+A new method :meth:`~email.message.Message.get_content_disposition` provides
+easy access to a canonical value for the :mailheader:`Content-Disposition`
+header (``None`` if there is no such header). (Contributed by Abhilash Raj
+in :issue:`21083`.)
-* A new method :meth:`~email.message.Message.get_content_disposition` provides
- easy access to a canonical value for the :mailheader:`Content-Disposition`
- header (``None`` if there is no such header). (Contributed by Abhilash Raj
- in :issue:`21083`.)
+A new policy option :attr:`~email.policy.EmailPolicy.utf8` can be set
+to ``True`` to encode email headers using the UTF-8 charset instead of using
+encoded words. This allows ``Messages`` to be formatted according to
+:rfc:`6532` and used with an SMTP server that supports the :rfc:`6531`
+``SMTPUTF8`` extension. (Contributed by R. David Murray in :issue:`24211`.)
-* A new policy option :attr:`~email.policy.EmailPolicy.utf8` can be set
- ``True`` to encode email headers using the utf8 charset instead of using
- encoded words. This allows ``Messages`` to be formatted according to
- :rfc:`6532` and used with an SMTP server that supports the :rfc:`6531`
- ``SMTPUTF8`` extension. (Contributed by R. David Murray in :issue:`24211`.)
faulthandler
------------
-* :func:`~faulthandler.enable`, :func:`~faulthandler.register`,
- :func:`~faulthandler.dump_traceback` and
- :func:`~faulthandler.dump_traceback_later` functions now accept file
- descriptors. (Contributed by Wei Wu in :issue:`23566`.)
+:func:`~faulthandler.enable`, :func:`~faulthandler.register`,
+:func:`~faulthandler.dump_traceback` and
+:func:`~faulthandler.dump_traceback_later` functions now accept file
+descriptors in addition to file-like objects.
+(Contributed by Wei Wu in :issue:`23566`.)
+
functools
---------
-* Most of :func:`~functools.lru_cache` machinery is now implemented in C.
- (Contributed by Matt Joiner, Alexey Kachayev, and Serhiy Storchaka
- in :issue:`14373`.)
+Most of :func:`~functools.lru_cache` machinery is now implemented in C, making
+it significantly faster. (Contributed by Matt Joiner, Alexey Kachayev, and
+Serhiy Storchaka in :issue:`14373`.)
+
glob
----
-00002-5938667
+:func:`~glob.iglob` and :func:`~glob.glob` now support recursive search in
+subdirectories using the "``**``" pattern. (Contributed by Serhiy Storchaka
+in :issue:`13968`.)
-* :func:`~glob.iglob` and :func:`~glob.glob` now support recursive search in
- subdirectories using the "``**``" pattern.
- (Contributed by Serhiy Storchaka in :issue:`13968`.)
heapq
-----
-* :func:`~heapq.merge` has two new optional parameters ``reverse`` and
- ``key``. (Contributed by Raymond Hettinger in :issue:`13742`.)
+Element comparison in :func:`~heapq.merge` can now be customized by
+passing a :term:`key function` in a new optional ``key`` keyword argument.
+A new optional ``reverse`` keyword argument can be used to reverse element
+comparison. (Contributed by Raymond Hettinger in :issue:`13742`.)
+
idlelib and IDLE
----------------
@@ -788,512 +838,613 @@ import by other programs, it gets improvements with every release. See
as well as changes made in future 3.5.x releases. This file is also available
from the IDLE Help -> About Idle dialog.
+
imaplib
-------
-* :class:`IMAP4` now supports the context management protocol. When used in a
- :keyword:`with` statement, the IMAP4 ``LOGOUT`` command will be called
- automatically at the end of the block. (Contributed by Tarek Ziadé and
- Serhiy Storchaka in :issue:`4972`.)
+:class:`~imaplib.IMAP4` now supports context manager protocol.
+When used in a :keyword:`with` statement, the IMAP4 ``LOGOUT``
+command will be called automatically at the end of the block.
+(Contributed by Tarek Ziadé and Serhiy Storchaka in :issue:`4972`.)
-* :mod:`imaplib` now supports :rfc:`5161`: the :meth:`~imaplib.IMAP4.enable`
- extension), and :rfc:`6855`: utf-8 support (internationalized email, via the
- ``UTF8=ACCEPT`` argument to :meth:`~imaplib.IMAP4.enable`). A new attribute,
- :attr:`~imaplib.IMAP4.utf8_enabled`, tracks whether or not :rfc:`6855`
- support is enabled. Milan Oberkirch, R. David Murray, and Maciej Szulik in
- :issue:`21800`.)
+:mod:`imaplib` now supports :rfc:`5161` (``ENABLE`` extension) via
+:meth:`~imaplib.IMAP4.enable`, and :rfc:`6855` (UTF-8 support) via the
+``UTF8=ACCEPT`` argument to :meth:`~imaplib.IMAP4.enable`. A new attribute,
+:attr:`~imaplib.IMAP4.utf8_enabled`, tracks whether or not :rfc:`6855`
+support is enabled. (Contributed by Milan Oberkirch, R. David Murray,
+and Maciej Szulik in :issue:`21800`.)
+
+:mod:`imaplib` now automatically encodes non-ASCII string usernames and
+passwords using UTF-8, as recommended by the RFCs. (Contributed by Milan
+Oberkirch in :issue:`21800`.)
-* :mod:`imaplib` now automatically encodes non-ASCII string usernames and
- passwords using ``UTF8``, as recommended by the RFCs. (Contributed by Milan
- Oberkirch in :issue:`21800`.)
imghdr
------
-* :func:`~imghdr.what` now recognizes the `OpenEXR <http://www.openexr.com>`_
- format (contributed by Martin Vignali and Claudiu Popa in :issue:`20295`),
- and the `WebP <https://en.wikipedia.org/wiki/WebP>`_ format (contributed
- by Fabrice Aneche and Claudiu Popa in :issue:`20197`.)
+:func:`~imghdr.what` now recognizes the `OpenEXR <http://www.openexr.com>`_
+format (contributed by Martin Vignali and Claudiu Popa in :issue:`20295`),
+and the `WebP <https://en.wikipedia.org/wiki/WebP>`_ format (contributed
+by Fabrice Aneche and Claudiu Popa in :issue:`20197`.)
+
importlib
---------
-* :class:`importlib.util.LazyLoader` allows for the lazy loading of modules in
- applications where startup time is paramount.
- (Contributed by Brett Cannon in :issue:`17621`.)
+:class:`importlib.util.LazyLoader` allows for lazy loading of modules in
+applications where startup time is important. (Contributed by Brett Cannon
+in :issue:`17621`.)
+
+:func:`importlib.abc.InspectLoader.source_to_code` is now a
+static method. This makes it easier to initialize a module object with
+code compiled from a string by runnning ``exec(code, module.__dict__)``.
+(Contributed by Brett Cannon in :issue:`21156`.)
-* :func:`importlib.abc.InspectLoader.source_to_code` is now a
- static method to make it easier to work with source code in a string.
- With a module object that you want to initialize you can then use
- ``exec(code, module.__dict__)`` to execute the code in the module.
+:func:`importlib.util.module_from_spec` is now the preferred way to create a
+new module. Compared to :class:`types.ModuleType`, this new function will set
+the various import-controlled attributes based on the passed-in spec object.
+(Contributed by Brett Cannon in :issue:`20383`.)
-* :func:`importlib.util.module_from_spec` is now the preferred way to create a
- new module. Compared to :class:`types.ModuleType`, this new function will set
- the various import-controlled attributes based on the passed-in spec object.
- (Contributed by Brett Cannon in :issue:`20383`.)
inspect
-------
-* :class:`inspect.Signature` and :class:`inspect.Parameter` are now
- picklable and hashable. (Contributed by Yury Selivanov in :issue:`20726`
- and :issue:`20334`.)
+:class:`inspect.Signature` and :class:`inspect.Parameter` are now
+picklable and hashable. (Contributed by Yury Selivanov in :issue:`20726`
+and :issue:`20334`.)
-* New method :meth:`inspect.BoundArguments.apply_defaults`. (Contributed
- by Yury Selivanov in :issue:`24190`.)
+A new method :meth:`inspect.BoundArguments.apply_defaults` provides a way
+to set default values for missing arguments. (Contributed by Yury Selivanov
+in :issue:`24190`.)
-* New class method :meth:`inspect.Signature.from_callable`, which makes
- subclassing of :class:`~inspect.Signature` easier. (Contributed
- by Yury Selivanov and Eric Snow in :issue:`17373`.)
+A new class method :meth:`inspect.Signature.from_callable` makes
+subclassing of :class:`~inspect.Signature` easier. (Contributed
+by Yury Selivanov and Eric Snow in :issue:`17373`.)
-* New argument ``follow_wrapped`` for :func:`inspect.signature`.
- (Contributed by Yury Selivanov in :issue:`20691`.)
+:func:`inspect.signature` now accepts a ``follow_wrapped`` optional keyword
+argument, which, when set to ``False``, disables automatic following of
+``__wrapped__`` links. (Contributed by Yury Selivanov in :issue:`20691`.)
-* New :func:`~inspect.iscoroutine`, :func:`~inspect.iscoroutinefunction`
- and :func:`~inspect.isawaitable` functions. (Contributed by
- Yury Selivanov in :issue:`24017`.)
+A set of new functions to inspect
+:term:`coroutine functions <coroutine function>` and
+``coroutine objects`` as been added:
+:func:`~inspect.iscoroutine`, :func:`~inspect.iscoroutinefunction`,
+:func:`~inspect.isawaitable`, :func:`~inspect.getcoroutinelocals`,
+and :func:`~inspect.getcoroutinestate`.
+(Contributed by Yury Selivanov in :issue:`24017` and :issue:`24400`.)
-* New :func:`~inspect.getcoroutinelocals` and :func:`~inspect.getcoroutinestate`
- functions. (Contributed by Yury Selivanov in :issue:`24400`.)
+:func:`~inspect.stack`, :func:`~inspect.trace`, :func:`~inspect.getouterframes`,
+and :func:`~inspect.getinnerframes` now return a list of named tuples.
+(Contributed by Daniel Shahaf in :issue:`16808`.)
-* :func:`~inspect.stack`, :func:`~inspect.trace`, :func:`~inspect.getouterframes`,
- and :func:`~inspect.getinnerframes` now return a list of named tuples.
- (Contributed by Daniel Shahaf in :issue:`16808`.)
io
--
-* New Python implementation of :class:`io.FileIO` to make dependency on
- ``_io`` module optional.
- (Contributed by Serhiy Storchaka in :issue:`21859`.)
+:class:`io.FileIO` has been implemented in Python which makes C implementation
+of :mod:`io` module entirely optional. (Contributed by Serhiy Storchaka
+in :issue:`21859`.)
+
ipaddress
---------
-* :class:`ipaddress.IPv4Network` and :class:`ipaddress.IPv6Network` now
- accept an ``(address, netmask)`` tuple argument, so as to easily construct
- network objects from existing addresses. (Contributed by Peter Moody
- and Antoine Pitrou in :issue:`16531`.)
+:class:`ipaddress.IPv4Network` and :class:`ipaddress.IPv6Network` now
+accept an ``(address, netmask)`` tuple argument, so as to easily construct
+network objects from existing addresses. (Contributed by Peter Moody
+and Antoine Pitrou in :issue:`16531`.)
+
json
----
-* The output of :mod:`json.tool` command line interface is now in the same
- order as the input. Use the :option:`--sort-keys` option to sort the output
- of dictionaries alphabetically by key. (Contributed by Berker Peksag in
- :issue:`21650`.)
+:mod:`json.tool` command line interface now preserves the order of keys in
+JSON objects passed in input. The new :option:`--sort-keys` option can be used
+to sort the keys alphabetically. (Contributed by Berker Peksag
+in :issue:`21650`.)
+
+JSON decoder now raises :exc:`json.JSONDecodeError` instead of
+:exc:`ValueError`. (Contributed by Serhiy Storchaka in :issue:`19361`.)
-* JSON decoder now raises :exc:`json.JSONDecodeError` instead of
- :exc:`ValueError`. (Contributed by Serhiy Storchaka in :issue:`19361`.)
locale
------
- * New :func:`~locale.delocalize` function to convert a string into a
- normalized number string, following the ``LC_NUMERIC`` settings.
- (Contributed by Cédric Krier in :issue:`13918`.)
+A new :func:`~locale.delocalize` function can be used to convert a string into
+a normalized number string, taking the ``LC_NUMERIC`` settings into account.
+(Contributed by Cédric Krier in :issue:`13918`.)
+
logging
-------
-* All logging methods :meth:`~logging.Logger.log`, :meth:`~logging.Logger.exception`,
- :meth:`~logging.Logger.critical`, :meth:`~logging.Logger.debug`, etc,
- now accept exception instances for ``exc_info`` parameter, in addition
- to boolean values and exception tuples.
- (Contributed by Yury Selivanov in :issue:`20537`.)
+All logging methods (:meth:`~logging.Logger.log`,
+:meth:`~logging.Logger.exception`, :meth:`~logging.Logger.critical`,
+:meth:`~logging.Logger.debug`, etc.), now accept exception instances
+in ``exc_info`` parameter, in addition to boolean values and exception
+tuples. (Contributed by Yury Selivanov in :issue:`20537`.)
+
+:class:`~logging.handlers.HTTPHandler` now accepts an optional
+:class:`ssl.SSLContext` instance to configure the SSL settings used
+in an HTTP connection. (Contributed by Alex Gaynor in :issue:`22788`.)
-* :class:`~logging.handlers.HTTPHandler` now accepts optional
- :class:`ssl.SSLContext` instance to configure the SSL settings used
- for HTTP connection.
- (Contributed by Alex Gaynor in :issue:`22788`.)
+:class:`~logging.handlers.QueueListener` now takes a *respect_handler_level*
+keyword argument which, if set to ``True``, will pass messages to handlers
+taking handler levels into account. (Contributed by Vinay Sajip.)
-* :class:`~logging.handlers.QueueListener` now takes a *respect_handler_level*
- keyword argument which, if set to ``True``, will pass messages to handlers
- taking handler levels into account. (Contributed by Vinay Sajip.)
lzma
----
-* New option *max_length* for :meth:`~lzma.LZMADecompressor.decompress`
- to limit the maximum size of decompressed data.
- (Contributed by Martin Panter in :issue:`15955`.)
+:meth:`~lzma.LZMADecompressor.decompress` now accepts an optional *max_length*
+argument to limit the maximum size of decompressed data.
+(Contributed by Martin Panter in :issue:`15955`.)
+
math
----
-* :data:`math.inf` and :data:`math.nan` constants added. (Contributed by Mark
- Dickinson in :issue:`23185`.)
+Two new constants have been added to :mod:`math`: :data:`math.inf`
+and :data:`math.nan`. (Contributed by Mark Dickinson in :issue:`23185`.)
-* New :func:`~math.isclose` function.
- (Contributed by Chris Barker and Tal Einat in :issue:`24270`.)
+A new function :func:`math.isclose` provides a way to test for approximate
+equality. (Contributed by Chris Barker and Tal Einat in :issue:`24270`.)
+
+A new :func:`~math.gcd` function has been added. The :func:`fractions.gcd`
+function is now deprecated. (Contributed by Mark Dickinson and Serhiy
+Storchaka in :issue:`22486`.)
-* New :func:`~math.gcd` function. The :func:`fractions.gcd` function now is
- deprecated.
- (Contributed by Mark Dickinson and Serhiy Storchaka in :issue:`22486`.)
operator
--------
-* :func:`~operator.attrgetter`, :func:`~operator.itemgetter`, and
- :func:`~operator.methodcaller` objects now support pickling.
- (Contributed by Josh Rosenberg and Serhiy Storchaka in :issue:`22955`.)
+:func:`~operator.attrgetter`, :func:`~operator.itemgetter`, and
+:func:`~operator.methodcaller` objects now support pickling.
+(Contributed by Josh Rosenberg and Serhiy Storchaka in :issue:`22955`.)
+
os
--
-* New :func:`os.scandir` function that exposes file information from
- the operating system when listing a directory. :func:`os.scandir`
- returns an iterator of :class:`os.DirEntry` objects corresponding to
- the entries in the directory given by *path*. (Contributed by Ben
- Hoyt with the help of Victor Stinner in :issue:`22524`.)
+The new :func:`os.scandir` returning an iterator of :class:`os.DirEntry`
+objects has been added. If possible, :func:`os.scandir` extracts file
+attributes while scanning a directory, removing the need to perform
+subsequent system calls to determine file type or attributes, which may
+significantly improve performance. (Contributed by Ben Hoyt with the help
+of Victor Stinner in :issue:`22524`.)
+
+On Windows, a new :attr:`~os.stat_result.st_file_attributes` attribute is
+now available. It corresponds to ``dwFileAttributes`` member of the
+``BY_HANDLE_FILE_INFORMATION`` structure returned by
+``GetFileInformationByHandle()``. (Contributed by Ben Hoyt in :issue:`21719`.)
-* :class:`os.stat_result` now has a :attr:`~os.stat_result.st_file_attributes`
- attribute on Windows. (Contributed by Ben Hoyt in :issue:`21719`.)
+:func:`os.urandom` now uses ``getrandom()`` syscall on Linux 3.17 or newer,
+and ``getentropy()`` on OpenBSD 5.6 and newer, removing the need to use
+``/dev/urandom`` and avoiding failures due to potential file descriptor
+exhaustion. (Contributed by Victor Stinner in :issue:`22181`.)
-* :func:`os.urandom`: On Linux 3.17 and newer, the ``getrandom()`` syscall is
- now used when available. On OpenBSD 5.6 and newer, the C ``getentropy()``
- function is now used. These functions avoid the usage of an internal file
- descriptor.
- (Contributed by Victor Stinner in :issue:`22181`.)
+New :func:`os.get_blocking` and :func:`os.set_blocking` functions allow to
+get and set the file descriptor blocking mode (:data:`~os.O_NONBLOCK`.)
+(Contributed by Victor Stinner in :issue:`22054`.)
-* New :func:`os.get_blocking` and :func:`os.set_blocking` functions to
- get and set the blocking mode of file descriptors.
- (Contributed by Victor Stinner in :issue:`22054`.)
+:func:`~os.truncate` and :func:`~os.ftruncate` are now supported on
+Windows. (Contributed by Steve Dower in :issue:`23668`.)
-* :func:`~os.truncate` and :func:`~os.ftruncate` are now supported on
- Windows. (Contributed by Steve Dower in :issue:`23668`.)
os.path
-------
-* New :func:`~os.path.commonpath` function that extracts common path prefix.
- Unlike the :func:`~os.path.commonprefix` function, it always returns a valid
- path. (Contributed by Rafik Draoui and Serhiy Storchaka in :issue:`10395`.)
+There is a new :func:`~os.path.commonpath` function returning the longest
+common sub-path of each passed pathname. Unlike the
+:func:`~os.path.commonprefix` function, it always returns a valid
+path. (Contributed by Rafik Draoui and Serhiy Storchaka in :issue:`10395`.)
+
pathlib
-------
-* New :meth:`~pathlib.Path.samefile` method to check if other path object
- points to the same file. (Contributed by Vajrasky Kok and Antoine Pitrou
- in :issue:`19775`.)
+The new :meth:`~pathlib.Path.samefile` method can be used to check if the
+passed :class:`~pathlib.Path` object, or a string, point to the same file as
+the :class:`~pathlib.Path` on which :meth:`~pathlib.Path.samefile` is called.
+(Contributed by Vajrasky Kok and Antoine Pitrou in :issue:`19775`.)
+
+:meth:`~pathlib.Path.mkdir` how accepts a new optional ``exist_ok`` argument
+to match ``mkdir -p`` and :func:`os.makrdirs` functionality.
+(Contributed by Berker Peksag in :issue:`21539`.)
-* :meth:`~pathlib.Path.mkdir` has a new optional parameter ``exist_ok``
- to mimic ``mkdir -p`` and :func:`os.makrdirs` functionality.
- (Contributed by Berker Peksag in :issue:`21539`.)
+There is a new :meth:`~pathlib.Path.expanduser` method to expand ``~``
+and ``~user`` prefixes. (Contributed by Serhiy Storchaka and Claudiu
+Popa in :issue:`19776`.)
-* New :meth:`~pathlib.Path.expanduser` to expand ``~`` and ``~user``
- constructs.
- (Contributed by Serhiy Storchaka and Claudiu Popa in :issue:`19776`.)
+A new :meth:`~pathlib.Path.home` class method can be used to get an instance
+of :class:`~pathlib.Path` object representing the user’s home directory.
+(Contributed by Victor Salgado and Mayank Tripathi in :issue:`19777`.)
-* New class method :meth:`~pathlib.Path.home` to get an instance of
- :class:`~pathlib.Path` object representing the user’s home directory.
- (Contributed by Victor Salgado and Mayank Tripathi in :issue:`19777`.)
pickle
------
-* Serializing more "lookupable" objects (such as unbound methods or nested
- classes) now are supported with pickle protocols < 4.
- (Contributed by Serhiy Storchaka in :issue:`23611`.)
+Nested objects, such as unbound methods or nested classes, can now be pickled using :ref:`pickle protocols <pickle-protocols>` older than protocol version 4,
+which already supported these cases. (Contributed by Serhiy Storchaka in
+:issue:`23611`.)
+
poplib
------
-* A new command :meth:`~poplib.POP3.utf8` enables :rfc:`6856`
- (internationalized email) support if the POP server supports it. (Contributed
- by Milan OberKirch in :issue:`21804`.)
+A new command :meth:`~poplib.POP3.utf8` enables :rfc:`6856`
+(internationalized email) support, if the POP server supports it.
+(Contributed by Milan OberKirch in :issue:`21804`.)
+
re
--
-* Number of capturing groups in regular expression is no longer limited by 100.
- (Contributed by Serhiy Storchaka in :issue:`22437`.)
+The number of capturing groups in regular expression is no longer limited by
+100. (Contributed by Serhiy Storchaka in :issue:`22437`.)
+
+:func:`re.sub` and :func:`re.subn` now replace unmatched groups with empty
+strings instead of rising an exception. (Contributed by Serhiy Storchaka
+in :issue:`1519638`.)
-* Now unmatched groups are replaced with empty strings in :func:`re.sub`
- and :func:`re.subn`. (Contributed by Serhiy Storchaka in :issue:`1519638`.)
readline
--------
-* New :func:`~readline.append_history_file` function.
- (Contributed by Bruno Cauet in :issue:`22940`.)
+The new :func:`~readline.append_history_file` function can be used to append
+the specified number of trailing elements in history to a given file.
+(Contributed by Bruno Cauet in :issue:`22940`.)
+
shutil
------
-* :func:`~shutil.move` now accepts a *copy_function* argument, allowing,
- for example, :func:`~shutil.copy` to be used instead of the default
- :func:`~shutil.copy2` if there is a need to ignore metadata. (Contributed by
- Claudiu Popa in :issue:`19840`.)
+:func:`~shutil.move` now accepts a *copy_function* argument, allowing,
+for example, :func:`~shutil.copy` to be used instead of the default
+:func:`~shutil.copy2` there is a need to ignore file metadata when moving.
+(Contributed by Claudiu Popa in :issue:`19840`.)
+
+:func:`~shutil.make_archive` now supports *xztar* format.
+(Contributed by Serhiy Storchaka in :issue:`5411`.)
-* :func:`~shutil.make_archive` now supports *xztar* format.
- (Contributed by Serhiy Storchaka in :issue:`5411`.)
signal
------
-* On Windows, :func:`signal.set_wakeup_fd` now also supports socket handles.
- (Contributed by Victor Stinner in :issue:`22018`.)
+On Windows, :func:`signal.set_wakeup_fd` now also supports socket handles.
+(Contributed by Victor Stinner in :issue:`22018`.)
+
+Various ``SIG*`` constants in :mod:`signal` module have been converted into
+:mod:`Enums <enum>`. This allows meaningful names to be printed
+during debugging, instead of integer "magic numbers".
+(Contributed by Giampaolo Rodola' in :issue:`21076`.)
-* Different constants of :mod:`signal` module are now enumeration values using
- the :mod:`enum` module. This allows meaningful names to be printed during
- debugging, instead of integer “magic numbers”. (Contributed by Giampaolo
- Rodola' in :issue:`21076`.)
smtpd
-----
-* Both :class:`~smtpd.SMTPServer` and :class:`smtpd.SMTPChannel` now accept a
- *decode_data* keyword to determine if the DATA portion of the SMTP
- transaction is decoded using the ``utf-8`` codec or is instead provided to
- :meth:`~smtpd.SMTPServer.process_message` as a byte string. The default
- is ``True`` for backward compatibility reasons, but will change to ``False``
- in Python 3.6. If *decode_data* is set to ``False``, the
- :meth:`~smtpd.SMTPServer.process_message` method must be prepared to accept
- keyword arguments. (Contributed by Maciej Szulik in :issue:`19662`.)
-
-* :class:`~smtpd.SMTPServer` now advertises the ``8BITMIME`` extension
- (:rfc:`6152`) if if *decode_data* has been set ``True``. If the client
- specifies ``BODY=8BITMIME`` on the ``MAIL`` command, it is passed to
- :meth:`~smtpd.SMTPServer.process_message` via the ``mail_options`` keyword.
- (Contributed by Milan Oberkirch and R. David Murray in :issue:`21795`.)
-
-* :class:`~smtpd.SMTPServer` now supports the ``SMTPUTF8`` extension
- (:rfc:`6531`: Internationalized Email). If the client specified ``SMTPUTF8
- BODY=8BITMIME`` on the ``MAIL`` command, they are passed to
- :meth:`~smtpd.SMTPServer.process_message` via the ``mail_options`` keyword.
- It is the responsibility of the :meth:`~smtpd.SMTPServer.process_message`
- method to correctly handle the ``SMTPUTF8`` data. (Contributed by Milan
- Oberkirch in :issue:`21725`.)
-
-* It is now possible to provide, directly or via name resolution, IPv6
- addresses in the :class:`~smtpd.SMTPServer` constructor, and have it
- successfully connect. (Contributed by Milan Oberkirch in :issue:`14758`.)
+Both :class:`~smtpd.SMTPServer` and :class:`smtpd.SMTPChannel` now accept a
+*decode_data* keyword argument to determine if the ``DATA`` portion of the SMTP
+transaction is decoded using the ``"utf-8"`` codec or is instead provided to
+:meth:`~smtpd.SMTPServer.process_message` as a byte string. The default
+is ``True`` for backward compatibility reasons, but will change to ``False``
+in Python 3.6. If *decode_data* is set to ``False``, the
+:meth:`~smtpd.SMTPServer.process_message` method must be prepared to accept
+keyword arguments. (Contributed by Maciej Szulik in :issue:`19662`.)
+
+:class:`~smtpd.SMTPServer` now advertises the ``8BITMIME`` extension
+(:rfc:`6152`) if if *decode_data* has been set ``True``. If the client
+specifies ``BODY=8BITMIME`` on the ``MAIL`` command, it is passed to
+:meth:`~smtpd.SMTPServer.process_message` via the ``mail_options`` keyword.
+(Contributed by Milan Oberkirch and R. David Murray in :issue:`21795`.)
+
+:class:`~smtpd.SMTPServer` now supports the ``SMTPUTF8`` extension
+(:rfc:`6531`: Internationalized Email). If the client specified ``SMTPUTF8
+BODY=8BITMIME`` on the ``MAIL`` command, they are passed to
+:meth:`~smtpd.SMTPServer.process_message` via the ``mail_options`` keyword.
+It is the responsibility of the :meth:`~smtpd.SMTPServer.process_message`
+method to correctly handle the ``SMTPUTF8`` data. (Contributed by Milan
+Oberkirch in :issue:`21725`.)
+
+It is now possible to provide, directly or via name resolution, IPv6
+addresses in the :class:`~smtpd.SMTPServer` constructor, and have it
+successfully connect. (Contributed by Milan Oberkirch in :issue:`14758`.)
+
smtplib
-------
-* A new :meth:`~smtplib.SMTP.auth` method provides a convenient way to
- implement custom authentication mechanisms.
- (Contributed by Milan Oberkirch in :issue:`15014`.)
+A new :meth:`~smtplib.SMTP.auth` method provides a convenient way to
+implement custom authentication mechanisms. (Contributed by Milan
+Oberkirch in :issue:`15014`.)
-* Additional debuglevel (2) shows timestamps for debug messages in
- :class:`smtplib.SMTP`. (Contributed by Gavin Chappell and Maciej Szulik in
- :issue:`16914`.)
+Additional debuglevel (2) shows timestamps for debug messages in
+:class:`smtplib.SMTP`. (Contributed by Gavin Chappell and Maciej Szulik in
+:issue:`16914`.)
+
+:mod:`smtplib` now supports :rfc:`6531` (SMTPUTF8) in both the
+:meth:`~smtplib.SMTP.sendmail` and :meth:`~smtplib.SMTP.send_message`
+commands. (Contributed by Milan Oberkirch and R. David Murray in
+:issue:`22027`.)
-* :mod:`smtplib` now supports :rfc:`6531` (SMTPUTF8) in both the
- :meth:`~smtplib.SMTP.sendmail` and :meth:`~smtplib.SMTP.send_message`
- commands. (Contributed by Milan Oberkirch and R. David Murray in
- :issue:`22027`.)
sndhdr
------
-* :func:`~sndhdr.what` and :func:`~sndhdr.whathdr` now return
- :func:`~collections.namedtuple`.
- (Contributed by Claudiu Popa in :issue:`18615`.)
+:func:`~sndhdr.what` and :func:`~sndhdr.whathdr` now return
+:func:`~collections.namedtuple`. (Contributed by Claudiu Popa in
+:issue:`18615`.)
+
ssl
---
-* The :meth:`~ssl.SSLSocket.do_handshake`, :meth:`~ssl.SSLSocket.read`,
- :meth:`~ssl.SSLSocket.shutdown`, and :meth:`~ssl.SSLSocket.write` methods of
- :class:`ssl.SSLSocket` don't reset the socket timeout anymore each time bytes
- are received or sent. The socket timeout is now the maximum total duration of
- the method.
+Memory BIO Support
+~~~~~~~~~~~~~~~~~~
+
+(Contributed by Geert Jansen in :issue:`21965`.)
+
+The new :class:`~ssl.SSLObject` class has been added to provide SSL protocol
+support for cases when the network IO capabilities of :class:`~ssl.SSLSocket`
+are not necessary or inappropriate. :class:`~ssl.SSLObject` represents
+an SSL protocol instance, but does not implement any network IO methods, and
+instead provides a memory buffer interface. The new :class:`~ssl.MemoryBIO`
+class can be used to pass data between Python and an SSL protocol instance.
+
+The memory BIO SSL support is primarily intended to be used in frameworks
+implementing asynchronous IO for which :class:`~ssl.SSLObject` IO readiness
+model ("select/poll") is inappropriate or inefficient.
+
+A new :meth:`~ssl.SSLContext.wrap_bio` method can be used to create a new
+:class:`~ssl.SSLObject` instance.
+
+
+Application-Layer Protocol Negotiation Support
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+(Contributed by Benjamin Peterson in :issue:`20188`.)
+
+Where OpenSSL support is present, :mod:`ssl` module now implements *
+Application-Layer Protocol Negotiation* TLS extension as described
+in :rfc:`7301`.
+The new :meth:`SSLContext.set_alpn_protocols <ssl.SSLContext.set_alpn_protocols>`
+can be used to specify which protocols the socket should advertise during
+the TLS handshake. The new
+:meth:`SSLSocket.selected_alpn_protocol <ssl.SSLSocket.selected_alpn_protocol>`
+returns the protocol that was selected during the TLS handshake. :data:`ssl.HAS_ALPN` flag indicates whether APLN support is present.
+
+
+Other Changes
+~~~~~~~~~~~~~
-* Memory BIO Support: new classes :class:`~ssl.SSLObject`,
- :class:`~ssl.MemoryBIO`, and new
- :meth:`SSLContext.wrap_bio <ssl.SSLContext.wrap_bio>` method.
- (Contributed by Geert Jansen in :issue:`21965`.)
+There is a new :meth:`~ssl.SSLSocket.version` method to query the actual
+protocol version in use. (Contributed by Antoine Pitrou in :issue:`20421`.)
-* New :meth:`~ssl.SSLSocket.version` to query the actual protocol version
- in use. (Contributed by Antoine Pitrou in :issue:`20421`.)
+:class:`~ssl.SSLSocket` now implementes :meth:`~ssl.SSLSocket.sendfile`
+method. (Contributed by Giampaolo Rodola' in :issue:`17552`.)
-* New :meth:`~ssl.SSLObject.shared_ciphers` and
- :meth:`~ssl.SSLSocket.shared_ciphers` methods to fetch the client's
- list of ciphers sent at handshake.
- (Contributed by Benjamin Peterson in :issue:`23186`.)
+:meth:`ssl.SSLSocket.send()` now raises either :exc:`ssl.SSLWantReadError`
+or :exc:`ssl.SSLWantWriteError` on a non-blocking socket if the operation
+would block. Previously, it would return 0. (Contributed by Nikolaus Rath
+in :issue:`20951`.)
+
+The :func:`~ssl.cert_time_to_seconds` function now interprets the input time
+as UTC and not as local time, per :rfc:`5280`. Additionally, the return
+value is always an :class:`int`. (Contributed by Akira Li in :issue:`19940`.)
+
+New :meth:`~ssl.SSLObject.shared_ciphers` and
+:meth:`~ssl.SSLSocket.shared_ciphers` methods return the list of ciphers
+sent by the client during the handshake. (Contributed by Benjamin Peterson
+in :issue:`23186`.)
+
+The :meth:`~ssl.SSLSocket.do_handshake`, :meth:`~ssl.SSLSocket.read`,
+:meth:`~ssl.SSLSocket.shutdown`, and :meth:`~ssl.SSLSocket.write` methods of
+:class:`ssl.SSLSocket` no longer reset the socket timeout every time bytes
+are received or sent. The socket timeout is now the maximum total duration of
+the method. (Contributed by Victor Stinner in :issue:`23853`.)
+
+The :func:`~ssl.match_hostname` function now supports matching of IP addresses.
+(Contributed by Antoine Pitrou in :issue:`23239`.)
-* :func:`~ssl.match_hostname` now supports matching of IP addresses.
- (Contributed by Antoine Pitrou in :issue:`23239`.)
socket
------
-* New :meth:`socket.socket.sendfile` method allows to send a file over a socket
- by using high-performance :func:`os.sendfile` function on UNIX resulting in
- uploads being from 2x to 3x faster than when using plain
- :meth:`socket.socket.send`.
- (Contributed by Giampaolo Rodola' in :issue:`17552`.)
+A new :meth:`socket.socket.sendfile` method allows to send a file over a
+socket by using high-performance :func:`os.sendfile` function on UNIX
+resulting in uploads being from 2x to 3x faster than when using plain
+:meth:`socket.socket.send`. (Contributed by Giampaolo Rodola' in
+:issue:`17552`.)
+
+The :meth:`socket.socket.sendall` method no longer resets the socket timeout
+every time bytes are received or sent. The socket timeout is now the
+maximum total duration to send all data. (Contributed by Victor Stinner in
+:issue:`23853`.)
-* The :meth:`socket.socket.sendall` method don't reset the socket timeout
- anymore each time bytes are received or sent. The socket timeout is now the
- maximum total duration to send all data.
+Functions with timeouts now use a monotonic clock, instead of a system clock.
+(Contributed by Victor Stinner in :issue:`22043`.)
-* Functions with timeouts now use a monotonic clock, instead of a
- system clock. (Contributed by Victor Stinner in :issue:`22043`.)
subprocess
----------
-* The new :func:`subprocess.run` function runs subprocesses and returns a
- :class:`subprocess.CompletedProcess` object. It Provides a more consistent
- API than :func:`~subprocess.call`, :func:`~subprocess.check_call` and
- :func:`~subprocess.check_output`.
+The new :func:`subprocess.run` function has been added and is the recommended
+approach to invoking subprocesses. It runs the specified command and
+and returns a :class:`subprocess.CompletedProcess` object. (Contributed by
+Thomas Kluyver in :issue:`23342`.)
+
sys
---
-* New :func:`~sys.set_coroutine_wrapper` and :func:`~sys.get_coroutine_wrapper`
- functions. (Contributed by Yury Selivanov in :issue:`24017`.)
+A new :func:`~sys.set_coroutine_wrapper` function allows setting a global
+hook that will be called whenever a :ref:`coro object <coro-objects>`
+is created. Essentially, it works like a global coroutine decorator. A
+corresponding :func:`~sys.get_coroutine_wrapper` can be used to obtain
+a currently set wrapper. Both functions are provisional, and are intended
+for debugging purposes only. (Contributed by Yury Selivanov in :issue:`24017`.)
+
+There is a new :func:`~sys.is_finalizing` function to check if the Python
+interpreter is :term:`shutting down <interpreter shutdown>`.
+(Contributed by Antoine Pitrou in :issue:`22696`.)
-* New :func:`~sys.is_finalizing` to check for :term:`interpreter shutdown`.
- (Contributed by Antoine Pitrou in :issue:`22696`.)
sysconfig
---------
-* The user scripts directory on Windows is now versioned.
- (Contributed by Paul Moore in :issue:`23437`.)
+The name of the user scripts directory on Windows now includes the first
+two components of Python version. (Contributed by Paul Moore
+in :issue:`23437`.)
+
tarfile
-------
-* The :func:`tarfile.open` function now supports ``'x'`` (exclusive creation)
- mode. (Contributed by Berker Peksag in :issue:`21717`.)
+The *mode* argument of :func:`tarfile.open` function now accepts ``'x'`` to request exclusive creation. (Contributed by Berker Peksag in :issue:`21717`.)
+
+The :meth:`~tarfile.TarFile.extractall` and :meth:`~tarfile.TarFile.extract`
+methods now take a keyword argument *numeric_only*. If set to ``True``,
+the extracted files and directories will be owned by the numeric uid and gid
+from the tarfile. If set to ``False`` (the default, and the behavior in
+versions prior to 3.5), they will be owned by the named user and group in the
+tarfile. (Contributed by Michael Vogt and Eric Smith in :issue:`23193`.)
-* The :meth:`~tarfile.TarFile.extractall` and :meth:`~tarfile.TarFile.extract`
- methods now take a keyword parameter *numeric_only*. If set to ``True``,
- the extracted files and directories will be owned by the numeric uid and gid
- from the tarfile. If set to ``False`` (the default, and the behavior in
- versions prior to 3.5), they will be owned by the named user and group in the
- tarfile. (Contributed by Michael Vogt and Eric Smith in :issue:`23193`.)
threading
---------
-* :meth:`~threading.Lock.acquire` and :meth:`~threading.RLock.acquire`
- now use a monotonic clock for managing timeouts.
- (Contributed by Victor Stinner in :issue:`22043`.)
+:meth:`~threading.Lock.acquire` and :meth:`~threading.RLock.acquire`
+now use a monotonic clock for timeout management. (Contributed by Victor
+Stinner in :issue:`22043`.)
+
time
----
-* The :func:`time.monotonic` function is now always available. (Contributed by
- Victor Stinner in :issue:`22043`.)
+The :func:`time.monotonic` function is now always available. (Contributed by
+Victor Stinner in :issue:`22043`.)
+
timeit
------
-* New command line option ``-u`` or ``--unit=U`` to specify a time unit for
- the timer output. Supported options are ``usec``, ``msec``, or ``sec``.
- (Contributed by Julian Gindi in :issue:`18983`.)
+New command line option :option:`-u` or :option:`--unit=U` to specify a time
+unit for the timer output. Supported options are ``usec``, ``msec``, or ``sec``.
+(Contributed by Julian Gindi in :issue:`18983`.)
+
tkinter
-------
-* The :mod:`tkinter._fix` module used for setting up the Tcl/Tk environment
- on Windows has been replaced by a private function in the :mod:`_tkinter`
- module which makes no permanent changes to environment variables.
- (Contributed by Zachary Ware in :issue:`20035`.)
+The :mod:`tkinter._fix` module used for setting up the Tcl/Tk environment
+on Windows has been replaced by a private function in the :mod:`_tkinter`
+module which makes no permanent changes to environment variables.
+(Contributed by Zachary Ware in :issue:`20035`.)
+
traceback
---------
-* New :func:`~traceback.walk_stack` and :func:`~traceback.walk_tb`
- functions to conveniently traverse frame and traceback objects.
- (Contributed by Robert Collins in :issue:`17911`.)
+New :func:`~traceback.walk_stack` and :func:`~traceback.walk_tb`
+functions to conveniently traverse frame and traceback objects.
+(Contributed by Robert Collins in :issue:`17911`.)
-* New lightweight classes: :class:`~traceback.TracebackException`,
- :class:`~traceback.StackSummary`, and :class:`traceback.FrameSummary`.
- (Contributed by Robert Collins in :issue:`17911`.)
+New lightweight classes: :class:`~traceback.TracebackException`,
+:class:`~traceback.StackSummary`, and :class:`traceback.FrameSummary`.
+(Contributed by Robert Collins in :issue:`17911`.)
-* :func:`~traceback.print_tb` and :func:`~traceback.print_stack` now support
- negative values for the *limit* argument.
- (Contributed by Dmitry Kazakov in :issue:`22619`.)
+:func:`~traceback.print_tb` and :func:`~traceback.print_stack` now support
+negative values for the *limit* argument.
+(Contributed by Dmitry Kazakov in :issue:`22619`.)
types
-----
-* New :func:`~types.coroutine` function. (Contributed by Yury Selivanov
- in :issue:`24017`.)
+New :func:`~types.coroutine` function. (Contributed by Yury Selivanov
+in :issue:`24017`.)
+
+New :class:`~types.CoroutineType`. (Contributed by Yury Selivanov
+in :issue:`24400`.)
-* New :class:`~types.CoroutineType`. (Contributed by Yury Selivanov
- in :issue:`24400`.)
urllib
------
-* A new :class:`~urllib.request.HTTPPasswordMgrWithPriorAuth` allows HTTP Basic
- Authentication credentials to be managed so as to eliminate unnecessary
- ``401`` response handling, or to unconditionally send credentials
- on the first request in order to communicate with servers that return a
- ``404`` response instead of a ``401`` if the ``Authorization`` header is not
- sent. (Contributed by Matej Cepl in :issue:`19494` and Akshit Khurana in
- :issue:`7159`.)
+A new :class:`~urllib.request.HTTPPasswordMgrWithPriorAuth` allows HTTP Basic
+Authentication credentials to be managed so as to eliminate unnecessary
+``401`` response handling, or to unconditionally send credentials
+on the first request in order to communicate with servers that return a
+``404`` response instead of a ``401`` if the ``Authorization`` header is not
+sent. (Contributed by Matej Cepl in :issue:`19494` and Akshit Khurana in
+:issue:`7159`.)
+
+A new :func:`~urllib.parse.urlencode` parameter *quote_via* provides a way to
+control the encoding of query parts if needed. (Contributed by Samwyse and
+Arnon Yaari in :issue:`13866`.)
-* A new :func:`~urllib.parse.urlencode` parameter *quote_via* provides a way to
- control the encoding of query parts if needed. (Contributed by Samwyse and
- Arnon Yaari in :issue:`13866`.)
+:func:`~urllib.request.urlopen` accepts an :class:`ssl.SSLContext`
+object as a *context* argument, which will be used for the HTTPS
+connection. (Contributed by Alex Gaynor in :issue:`22366`.)
-* :func:`~urllib.request.urlopen` accepts an :class:`ssl.SSLContext`
- object as a *context* argument, which will be used for the HTTPS
- connection. (Contributed by Alex Gaynor in :issue:`22366`.)
unicodedata
-----------
-* The :mod:`unicodedata` module now uses data from `Unicode 8.0.0
- <http://unicode.org/versions/Unicode8.0.0/>`_.
+The :mod:`unicodedata` module now uses data from `Unicode 8.0.0
+<http://unicode.org/versions/Unicode8.0.0/>`_.
+
unittest
--------
-* New command line option ``--locals`` to show local variables in
- tracebacks.
- (Contributed by Robert Collins in :issue:`22936`.)
+New command line option :option:`--locals` to show local variables in
+tracebacks. (Contributed by Robert Collins in :issue:`22936`.)
+
wsgiref
-------
-* *headers* parameter of :class:`wsgiref.headers.Headers` is now optional.
- (Contributed by Pablo Torres Navarrete and SilentGhost in :issue:`5800`.)
+*headers* parameter of :class:`wsgiref.headers.Headers` is now optional.
+(Contributed by Pablo Torres Navarrete and SilentGhost in :issue:`5800`.)
+
xmlrpc
------
-* :class:`xmlrpc.client.ServerProxy` is now a :term:`context manager`.
- (Contributed by Claudiu Popa in :issue:`20627`.)
+:class:`xmlrpc.client.ServerProxy` is now a :term:`context manager`.
+(Contributed by Claudiu Popa in :issue:`20627`.)
+
+:class:`~xmlrpc.client.ServerProxy` constructor now accepts an optional
+:class:`ssl.SSLContext` instance.
+(Contributed by Alex Gaynor in :issue:`22960`.)
-* :class:`~xmlrpc.client.ServerProxy` constructor now accepts an optional
- :class:`ssl.SSLContext` instance.
- (Contributed by Alex Gaynor in :issue:`22960`.)
xml.sax
-------
-* SAX parsers now support a character stream of
- :class:`~xml.sax.xmlreader.InputSource` object.
- (Contributed by Serhiy Storchaka in :issue:`2175`.)
+SAX parsers now support a character stream of
+:class:`~xml.sax.xmlreader.InputSource` object.
+(Contributed by Serhiy Storchaka in :issue:`2175`.)
+
zipfile
-------
-* Added support for writing ZIP files to unseekable streams.
- (Contributed by Serhiy Storchaka in :issue:`23252`.)
+ZIP output can now be written to unseekable streams.
+(Contributed by Serhiy Storchaka in :issue:`23252`.)
-* The :func:`zipfile.ZipFile.open` function now supports ``'x'`` (exclusive
- creation) mode. (Contributed by Serhiy Storchaka in :issue:`21717`.)
+The *mode* argument of :func:`zipfile.ZipFile.open` function now
+accepts ``'x'`` to request exclusive creation.
+(Contributed by Serhiy Storchaka in :issue:`21717`.)
Other module-level changes
==========================
-* Many functions in modules :mod:`mmap`, :mod:`ossaudiodev`, :mod:`socket`,
- :mod:`ssl`, and :mod:`codecs`, now accept writable bytes-like objects.
- (Contributed by Serhiy Storchaka in :issue:`23001`.)
+Many functions in :mod:`mmap`, :mod:`ossaudiodev`, :mod:`socket`,
+:mod:`ssl`, and :mod:`codecs` modules now accept writable bytes-like objects.
+(Contributed by Serhiy Storchaka in :issue:`23001`.)
Optimizations
@@ -1374,6 +1525,7 @@ Changes to Python's build process and to the C API include:
* Windows builds now require Microsoft Visual C++ 14.0, which
is available as part of `Visual Studio 2015 <http://www.visualstudio.com>`_.
+
Deprecated
==========