gh-109975: Copyedit "What's New in Python 3.13" (#114401)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
Hugo van Kemenade 2024-01-30 17:12:11 +02:00 committed by GitHub
parent 809eed4805
commit 4287e8608b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 108 additions and 110 deletions

View File

@ -146,14 +146,6 @@ New Modules
Improved Modules
================
ast
---
* :func:`ast.parse` now accepts an optional argument ``optimize``
which is passed on to the :func:`compile` built-in. This makes it
possible to obtain an optimized ``AST``.
(Contributed by Irit Katriel in :gh:`108113`).
array
-----
@ -161,6 +153,14 @@ array
It can be used instead of ``'u'`` type code, which is deprecated.
(Contributed by Inada Naoki in :gh:`80480`.)
ast
---
* :func:`ast.parse` now accepts an optional argument ``optimize``
which is passed on to the :func:`compile` built-in. This makes it
possible to obtain an optimized ``AST``.
(Contributed by Irit Katriel in :gh:`108113`.)
asyncio
-------
@ -180,6 +180,13 @@ copy
any user classes which define the :meth:`!__replace__` method.
(Contributed by Serhiy Storchaka in :gh:`108751`.)
dbm
---
* Add :meth:`dbm.gnu.gdbm.clear` and :meth:`dbm.ndbm.ndbm.clear` methods that remove all items
from the database.
(Contributed by Donghee Na in :gh:`107122`.)
dis
---
@ -189,13 +196,6 @@ dis
the ``show_offsets`` parameter.
(Contributed by Irit Katriel in :gh:`112137`.)
dbm
---
* Add :meth:`dbm.gnu.gdbm.clear` and :meth:`dbm.ndbm.ndbm.clear` methods that remove all items
from the database.
(Contributed by Donghee Na in :gh:`107122`.)
doctest
-------
@ -213,7 +213,7 @@ email
parameter to these two functions: use ``strict=False`` to get the old
behavior, accept malformed inputs.
``getattr(email.utils, 'supports_strict_parsing', False)`` can be use to
check if the *strict* paramater is available.
check if the *strict* parameter is available.
(Contributed by Thomas Dwyer and Victor Stinner for :gh:`102988` to improve
the CVE-2023-27043 fix.)
@ -223,7 +223,7 @@ fractions
* Formatting for objects of type :class:`fractions.Fraction` now supports
the standard format specification mini-language rules for fill, alignment,
sign handling, minimum width and grouping. (Contributed by Mark Dickinson
in :gh:`111320`)
in :gh:`111320`.)
glob
----
@ -297,17 +297,17 @@ os
the new environment variable :envvar:`PYTHON_CPU_COUNT` or the new command-line option
:option:`-X cpu_count <-X>`. This option is useful for users who need to limit
CPU resources of a container system without having to modify the container (application code).
(Contributed by Donghee Na in :gh:`109595`)
(Contributed by Donghee Na in :gh:`109595`.)
* Add support of :func:`os.lchmod` and the *follow_symlinks* argument
in :func:`os.chmod` on Windows.
Note that the default value of *follow_symlinks* in :func:`!os.lchmod` is
``False`` on Windows.
(Contributed by Serhiy Storchaka in :gh:`59616`)
(Contributed by Serhiy Storchaka in :gh:`59616`.)
* Add support of :func:`os.fchmod` and a file descriptor
in :func:`os.chmod` on Windows.
(Contributed by Serhiy Storchaka in :gh:`113191`)
(Contributed by Serhiy Storchaka in :gh:`113191`.)
* :func:`os.posix_spawn` now accepts ``env=None``, which makes the newly spawned
process use the current process environment.
@ -357,7 +357,7 @@ pdb
the new ``exceptions [exc_number]`` command for Pdb. (Contributed by Matthias
Bussonnier in :gh:`106676`.)
* Expressions/Statements whose prefix is a pdb command are now correctly
* Expressions/statements whose prefix is a pdb command are now correctly
identified and executed.
(Contributed by Tian Gao in :gh:`108464`.)
@ -487,34 +487,69 @@ Deprecated
Replace ``ctypes.ARRAY(item_type, size)`` with ``item_type * size``.
(Contributed by Victor Stinner in :gh:`105733`.)
* :mod:`decimal`: Deprecate non-standard format specifier "N" for
:class:`decimal.Decimal`.
It was not documented and only supported in the C implementation.
(Contributed by Serhiy Storchaka in :gh:`89902`.)
* :mod:`dis`: The ``dis.HAVE_ARGUMENT`` separator is deprecated. Check
membership in :data:`~dis.hasarg` instead.
(Contributed by Irit Katriel in :gh:`109319`.)
* :mod:`getopt` and :mod:`optparse` modules: They are now
:term:`soft deprecated`: the :mod:`argparse` should be used for new projects.
:term:`soft deprecated`: the :mod:`argparse` module should be used for new projects.
Previously, the :mod:`optparse` module was already deprecated, its removal
was not scheduled, and no warnings was emitted: so there is no change in
practice.
(Contributed by Victor Stinner in :gh:`106535`.)
* :mod:`gettext`: Emit deprecation warning for non-integer numbers in
:mod:`gettext` functions and methods that consider plural forms even if the
translation was not found.
(Contributed by Serhiy Storchaka in :gh:`88434`.)
* :mod:`http.server`: :class:`http.server.CGIHTTPRequestHandler` now emits a
:exc:`DeprecationWarning` as it will be removed in 3.15. Process based CGI
http servers have been out of favor for a very long time. This code was
:exc:`DeprecationWarning` as it will be removed in 3.15. Process-based CGI
HTTP servers have been out of favor for a very long time. This code was
outdated, unmaintained, and rarely used. It has a high potential for both
security and functionality bugs. This includes removal of the ``--cgi``
flag to the ``python -m http.server`` command line in 3.15.
* :mod:`pathlib`:
:meth:`pathlib.PurePath.is_reserved` is deprecated and scheduled for
removal in Python 3.15. Use :func:`os.path.isreserved` to detect reserved
paths on Windows.
* :meth:`pathlib.PurePath.is_reserved` is deprecated and scheduled for
removal in Python 3.15. Use :func:`os.path.isreserved` to detect reserved
paths on Windows.
* :mod:`pydoc`: Deprecate undocumented :func:`!pydoc.ispackage` function.
(Contributed by Zackery Spytz in :gh:`64020`.)
* :mod:`sqlite3`: Passing more than one positional argument to
:func:`sqlite3.connect` and the :class:`sqlite3.Connection` constructor is
deprecated. The remaining parameters will become keyword-only in Python 3.15.
Deprecate passing name, number of arguments, and the callable as keyword
arguments for the following :class:`sqlite3.Connection` APIs:
* :meth:`~sqlite3.Connection.create_function`
* :meth:`~sqlite3.Connection.create_aggregate`
Deprecate passing the callback callable by keyword for the following
:class:`sqlite3.Connection` APIs:
* :meth:`~sqlite3.Connection.set_authorizer`
* :meth:`~sqlite3.Connection.set_progress_handler`
* :meth:`~sqlite3.Connection.set_trace_callback`
The affected parameters will become positional-only in Python 3.15.
(Contributed by Erlend E. Aasland in :gh:`107948` and :gh:`108278`.)
* :mod:`sys`: :func:`sys._enablelegacywindowsfsencoding` function.
Replace it with :envvar:`PYTHONLEGACYWINDOWSFSENCODING` environment variable.
Replace it with the :envvar:`PYTHONLEGACYWINDOWSFSENCODING` environment variable.
(Contributed by Inada Naoki in :gh:`73427`.)
* :mod:`traceback`:
* The field *exc_type* of :class:`traceback.TracebackException` is
deprecated. Use *exc_type_str* instead.
* :mod:`traceback`: The field *exc_type* of :class:`traceback.TracebackException`
is deprecated. Use *exc_type_str* instead.
* :mod:`typing`:
@ -550,39 +585,6 @@ Deprecated
They will be removed in Python 3.15.
(Contributed by Victor Stinner in :gh:`105096`.)
* Passing more than one positional argument to :func:`sqlite3.connect` and the
:class:`sqlite3.Connection` constructor is deprecated. The remaining
parameters will become keyword-only in Python 3.15.
Deprecate passing name, number of arguments, and the callable as keyword
arguments, for the following :class:`sqlite3.Connection` APIs:
* :meth:`~sqlite3.Connection.create_function`
* :meth:`~sqlite3.Connection.create_aggregate`
Deprecate passing the callback callable by keyword for the following
:class:`sqlite3.Connection` APIs:
* :meth:`~sqlite3.Connection.set_authorizer`
* :meth:`~sqlite3.Connection.set_progress_handler`
* :meth:`~sqlite3.Connection.set_trace_callback`
The affected parameters will become positional-only in Python 3.15.
(Contributed by Erlend E. Aasland in :gh:`107948` and :gh:`108278`.)
* The ``dis.HAVE_ARGUMENT`` separator is deprecated. Check membership
in :data:`~dis.hasarg` instead.
(Contributed by Irit Katriel in :gh:`109319`.)
* Deprecate non-standard format specifier "N" for :class:`decimal.Decimal`.
It was not documented and only supported in the C implementation.
(Contributed by Serhiy Storchaka in :gh:`89902`.)
* Emit deprecation warning for non-integer numbers in :mod:`gettext` functions
and methods that consider plural forms even if the translation was not found.
(Contributed by Serhiy Storchaka in :gh:`88434`.)
* Calling :meth:`frame.clear` on a suspended frame raises :exc:`RuntimeError`
(as has always been the case for an executing frame).
(Contributed by Irit Katriel in :gh:`79932`.)
@ -593,9 +595,6 @@ Deprecated
coroutine.
(Contributed by Irit Katriel in :gh:`81137`.)
* Deprecate undocumented :func:`!pydoc.ispackage` function.
(Contributed by Zackery Spytz in :gh:`64020`.)
Pending Removal in Python 3.14
------------------------------
@ -657,11 +656,11 @@ Pending Removal in Python 3.14
:func:`~multiprocessing.set_start_method` APIs to explicitly specify when
your code *requires* ``'fork'``. See :ref:`multiprocessing-start-methods`.
* :mod:`pathlib`: :meth:`~pathlib.PurePath.is_relative_to`,
* :mod:`pathlib`: :meth:`~pathlib.PurePath.is_relative_to` and
:meth:`~pathlib.PurePath.relative_to`: passing additional arguments is
deprecated.
* :func:`pkgutil.find_loader` and :func:`pkgutil.get_loader`
* :mod:`pkgutil`: :func:`~pkgutil.find_loader` and :func:`~pkgutil.get_loader`
now raise :exc:`DeprecationWarning`;
use :func:`importlib.util.find_spec` instead.
(Contributed by Nikita Sobolev in :gh:`97850`.)
@ -719,10 +718,16 @@ Pending Removal in Python 3.15
(Contributed by Hugo van Kemenade in :gh:`111187`.)
* :mod:`pathlib`:
:meth:`pathlib.PurePath.is_reserved` is deprecated and scheduled for
removal in Python 3.15. Use :func:`os.path.isreserved` to detect reserved
paths on Windows.
* :meth:`pathlib.PurePath.is_reserved` is deprecated and scheduled for
removal in Python 3.15. Use :func:`os.path.isreserved` to detect reserved
paths on Windows.
* :mod:`threading`:
Passing any arguments to :func:`threading.RLock` is now deprecated.
C version allows any numbers of args and kwargs,
but they are just ignored. Python version does not allow any arguments.
All arguments will be removed from :func:`threading.RLock` in Python 3.15.
(Contributed by Nikita Sobolev in :gh:`102029`.)
* :class:`typing.NamedTuple`:
@ -749,12 +754,6 @@ Pending Removal in Python 3.15
They will be removed in Python 3.15.
(Contributed by Victor Stinner in :gh:`105096`.)
* Passing any arguments to :func:`threading.RLock` is now deprecated.
C version allows any numbers of args and kwargs,
but they are just ignored. Python version does not allow any arguments.
All arguments will be removed from :func:`threading.RLock` in Python 3.15.
(Contributed by Nikita Sobolev in :gh:`102029`.)
Pending Removal in Python 3.16
------------------------------
@ -801,6 +800,9 @@ although there is currently no date scheduled for their removal.
:data:`calendar.FEBRUARY`.
(Contributed by Prince Roshan in :gh:`103636`.)
* :attr:`codeobject.co_lnotab`: use the :meth:`codeobject.co_lines` method
instead.
* :mod:`datetime`:
* :meth:`~datetime.datetime.utcnow`:
@ -836,11 +838,13 @@ although there is currently no date scheduled for their removal.
underscore.
(Contributed by Serhiy Storchaka in :gh:`91760`.)
* :mod:`!sre_compile`, :mod:`!sre_constants` and :mod:`!sre_parse` modules.
* :mod:`ssl` options and protocols:
* :class:`ssl.SSLContext` without protocol argument is deprecated.
* :class:`ssl.SSLContext`: :meth:`~ssl.SSLContext.set_npn_protocols` and
:meth:`!~ssl.SSLContext.selected_npn_protocol` are deprecated: use ALPN
:meth:`!selected_npn_protocol` are deprecated: use ALPN
instead.
* ``ssl.OP_NO_SSL*`` options
* ``ssl.OP_NO_TLS*`` options
@ -853,13 +857,6 @@ although there is currently no date scheduled for their removal.
* ``ssl.TLSVersion.TLSv1``
* ``ssl.TLSVersion.TLSv1_1``
* :mod:`!sre_compile`, :mod:`!sre_constants` and :mod:`!sre_parse` modules.
* :attr:`codeobject.co_lnotab`: use the :meth:`codeobject.co_lines` method
instead.
* :class:`typing.Text` (:gh:`92332`).
* :func:`sysconfig.is_python_build` *check_home* parameter is deprecated and
ignored.
@ -874,14 +871,10 @@ although there is currently no date scheduled for their removal.
* :meth:`!threading.currentThread`: use :meth:`threading.current_thread`.
* :meth:`!threading.activeCount`: use :meth:`threading.active_count`.
* :class:`typing.Text` (:gh:`92332`).
* :class:`unittest.IsolatedAsyncioTestCase`: it is deprecated to return a value
that is not None from a test case.
* :mod:`urllib.request`: :class:`~urllib.request.URLopener` and
:class:`~urllib.request.FancyURLopener` style of invoking requests is
deprecated. Use newer :func:`~urllib.request.urlopen` functions and methods.
* :func:`!urllib.parse.to_bytes`.
that is not ``None`` from a test case.
* :mod:`urllib.parse` deprecated functions: :func:`~urllib.parse.urlparse` instead
@ -895,6 +888,11 @@ although there is currently no date scheduled for their removal.
* ``splittype()``
* ``splituser()``
* ``splitvalue()``
* ``to_bytes()``
* :mod:`urllib.request`: :class:`~urllib.request.URLopener` and
:class:`~urllib.request.FancyURLopener` style of invoking requests is
deprecated. Use newer :func:`~urllib.request.urlopen` functions and methods.
* :mod:`wsgiref`: ``SimpleHandler.stdout.write()`` should not do partial
writes.
@ -1190,10 +1188,10 @@ Changes in the Python API
* Functions :c:func:`PyDict_GetItem`, :c:func:`PyDict_GetItemString`,
:c:func:`PyMapping_HasKey`, :c:func:`PyMapping_HasKeyString`,
:c:func:`PyObject_HasAttr`, :c:func:`PyObject_HasAttrString`, and
:c:func:`PySys_GetObject`, which clear all errors occurred during calling
the function, report now them using :func:`sys.unraisablehook`.
You can consider to replace these functions with other functions as
recomended in the documentation.
:c:func:`PySys_GetObject`, which clear all errors which occurred when calling
them, now report them using :func:`sys.unraisablehook`.
You may replace them with other functions as
recommended in the documentation.
(Contributed by Serhiy Storchaka in :gh:`106672`.)
* An :exc:`OSError` is now raised by :func:`getpass.getuser` for any failure to
@ -1202,7 +1200,7 @@ Changes in the Python API
* The :mod:`threading` module now expects the :mod:`!_thread` module to have
an ``_is_main_interpreter`` attribute. It is a function with no
arguments that returns ``True`` if the current interpreter is the
arguments that return ``True`` if the current interpreter is the
main interpreter.
Any library or application that provides a custom ``_thread`` module
@ -1225,7 +1223,7 @@ Build Changes
(Contributed by Erlend Aasland in :gh:`105875`.)
* Python built with :file:`configure` :option:`--with-trace-refs` (tracing
references) is now ABI compatible with Python release build and
references) is now ABI compatible with the Python release build and
:ref:`debug build <debug-build>`.
(Contributed by Victor Stinner in :gh:`108634`.)
@ -1252,7 +1250,7 @@ New Features
(Contributed by Inada Naoki in :gh:`104922`.)
* The *keywords* parameter of :c:func:`PyArg_ParseTupleAndKeywords` and
:c:func:`PyArg_VaParseTupleAndKeywords` has now type :c:expr:`char * const *`
:c:func:`PyArg_VaParseTupleAndKeywords` now has type :c:expr:`char * const *`
in C and :c:expr:`const char * const *` in C++, instead of :c:expr:`char **`.
It makes these functions compatible with arguments of type
:c:expr:`const char * const *`, :c:expr:`const char **` or
@ -1309,14 +1307,14 @@ New Features
always steals a reference to the value.
(Contributed by Serhiy Storchaka in :gh:`86493`.)
* Added :c:func:`PyDict_GetItemRef` and :c:func:`PyDict_GetItemStringRef`
* Add :c:func:`PyDict_GetItemRef` and :c:func:`PyDict_GetItemStringRef`
functions: similar to :c:func:`PyDict_GetItemWithError` but returning a
:term:`strong reference` instead of a :term:`borrowed reference`. Moreover,
these functions return -1 on error and so checking ``PyErr_Occurred()`` is
not needed.
(Contributed by Victor Stinner in :gh:`106004`.)
* Added :c:func:`PyDict_ContainsString` function: same as
* Add :c:func:`PyDict_ContainsString` function: same as
:c:func:`PyDict_Contains`, but *key* is specified as a :c:expr:`const char*`
UTF-8 encoded bytes string, rather than a :c:expr:`PyObject*`.
(Contributed by Victor Stinner in :gh:`108314`.)
@ -1374,7 +1372,7 @@ New Features
(Contributed by Victor Stinner in :gh:`85283`.)
* Add :c:func:`PyErr_FormatUnraisable` function: similar to
:c:func:`PyErr_WriteUnraisable`, but allow to customize the warning mesage.
:c:func:`PyErr_WriteUnraisable`, but allow customizing the warning message.
(Contributed by Serhiy Storchaka in :gh:`108082`.)
* Add :c:func:`PyList_Extend` and :c:func:`PyList_Clear` functions: similar to
@ -1384,7 +1382,7 @@ New Features
* Add :c:func:`PyDict_Pop` and :c:func:`PyDict_PopString` functions: remove a
key from a dictionary and optionally return the removed value. This is
similar to :meth:`dict.pop`, but without the default value and not raising
:exc:`KeyError` if the key missing.
:exc:`KeyError` if the key is missing.
(Contributed by Stefan Behnel and Victor Stinner in :gh:`111262`.)
* Add :c:func:`Py_HashPointer` function to hash a pointer.
@ -1497,7 +1495,7 @@ Removed
-------
* Removed chained :class:`classmethod` descriptors (introduced in
:issue:`19072`). This can no longer be used to wrap other descriptors
:gh:`63272`). This can no longer be used to wrap other descriptors
such as :class:`property`. The core design of this feature was flawed
and caused a number of downstream problems. To "pass-through" a
:class:`classmethod`, consider using the :attr:`!__wrapped__`
@ -1511,14 +1509,14 @@ Removed
add ``cc @vstinner`` to the issue to notify Victor Stinner.
(Contributed by Victor Stinner in :gh:`106320`.)
* Remove functions deprecated in Python 3.9.
* Remove functions deprecated in Python 3.9:
* ``PyEval_CallObject()``, ``PyEval_CallObjectWithKeywords()``: use
:c:func:`PyObject_CallNoArgs` or :c:func:`PyObject_Call` instead.
Warning: :c:func:`PyObject_Call` positional arguments must be a
:class:`tuple` and must not be *NULL*, keyword arguments must be a
:class:`dict` or *NULL*, whereas removed functions checked arguments type
and accepted *NULL* positional and keyword arguments.
:class:`tuple` and must not be ``NULL``, keyword arguments must be a
:class:`dict` or ``NULL``, whereas removed functions checked arguments type
and accepted ``NULL`` positional and keyword arguments.
To replace ``PyEval_CallObjectWithKeywords(func, NULL, kwargs)`` with
:c:func:`PyObject_Call`, pass an empty tuple as positional arguments using
:c:func:`PyTuple_New(0) <PyTuple_New>`.