Commit ce917c73 authored by Yury Selivanov's avatar Yury Selivanov

whatsnew/3.5: Editorialization pass on library section

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