Skip to content

Commit a8393dc

Browse files
miss-islingtonhugovkAA-Turner
authored
[3.12] gh-109190: What's New in 3.12: Add subheadings to removals for easy linking (GH-109159) (#109273)
gh-109190: What's New in 3.12: Add subheadings to removals for easy linking (GH-109159) (cherry picked from commit 57b6205) Co-authored-by: Hugo van Kemenade <[email protected]> Co-authored-by: Adam Turner <[email protected]>
1 parent 5305cdc commit a8393dc

File tree

1 file changed

+107
-52
lines changed

1 file changed

+107
-52
lines changed

Doc/whatsnew/3.12.rst

+107-52
Original file line numberDiff line numberDiff line change
@@ -1274,13 +1274,19 @@ although there is currently no date scheduled for their removal.
12741274
Removed
12751275
=======
12761276

1277-
* ``asynchat`` and ``asyncore``: These two modules have been removed
1277+
asynchat and asyncore
1278+
---------------------
1279+
1280+
* These two modules have been removed
12781281
according to the schedule in :pep:`594`,
12791282
having been deprecated in Python 3.6.
12801283
Use :mod:`asyncio` instead.
12811284
(Contributed by Nikita Sobolev in :gh:`96580`.)
12821285

1283-
* :mod:`configparser`: Several names deprecated in the :mod:`configparser` way back in 3.2 have
1286+
configparser
1287+
------------
1288+
1289+
* Several names deprecated in the :mod:`configparser` way back in 3.2 have
12841290
been removed per :gh:`89336`:
12851291

12861292
* :class:`configparser.ParsingError` no longer has a ``filename`` attribute
@@ -1290,13 +1296,19 @@ Removed
12901296
* :class:`configparser.ConfigParser` no longer has a ``readfp`` method.
12911297
Use :meth:`~configparser.ConfigParser.read_file` instead.
12921298

1293-
* ``distutils``: Remove the ``distutils`` package. It was deprecated in Python 3.10 by
1299+
distutils
1300+
---------
1301+
1302+
* Remove the :py:mod:`!distutils` package. It was deprecated in Python 3.10 by
12941303
:pep:`632` "Deprecate distutils module". For projects still using
12951304
``distutils`` and cannot be updated to something else, the ``setuptools``
12961305
project can be installed: it still provides ``distutils``.
12971306
(Contributed by Victor Stinner in :gh:`92584`.)
12981307

1299-
* :mod:`ensurepip`: Remove the bundled setuptools wheel from :mod:`ensurepip`,
1308+
ensurepip
1309+
---------
1310+
1311+
* Remove the bundled setuptools wheel from :mod:`ensurepip`,
13001312
and stop installing setuptools in environments created by :mod:`venv`.
13011313

13021314
``pip (>= 22.1)`` does not require setuptools to be installed in the
@@ -1314,27 +1326,42 @@ Removed
13141326

13151327
(Contributed by Pradyun Gedam in :gh:`95299`.)
13161328

1317-
* :mod:`enum`: Remove ``EnumMeta.__getattr__``, which is no longer needed for
1329+
enum
1330+
----
1331+
1332+
* Remove :mod:`enum`'s ``EnumMeta.__getattr__``, which is no longer needed for
13181333
enum attribute access.
13191334
(Contributed by Ethan Furman in :gh:`95083`.)
13201335

1321-
* :mod:`ftplib`: Remove the ``FTP_TLS.ssl_version`` class attribute: use the
1336+
ftplib
1337+
------
1338+
1339+
* Remove :mod:`ftplib`'s ``FTP_TLS.ssl_version`` class attribute: use the
13221340
*context* parameter instead.
13231341
(Contributed by Victor Stinner in :gh:`94172`.)
13241342

1325-
* :mod:`gzip`: Remove the ``filename`` attribute of :class:`gzip.GzipFile`,
1343+
gzip
1344+
----
1345+
1346+
* Remove the ``filename`` attribute of :mod:`gzip`'s :class:`gzip.GzipFile`,
13261347
deprecated since Python 2.6, use the :attr:`~gzip.GzipFile.name` attribute
13271348
instead. In write mode, the ``filename`` attribute added ``'.gz'`` file
13281349
extension if it was not present.
13291350
(Contributed by Victor Stinner in :gh:`94196`.)
13301351

1331-
* :mod:`hashlib`: Remove the pure Python implementation of
1352+
hashlib
1353+
-------
1354+
1355+
* Remove the pure Python implementation of :mod:`hashlib`'s
13321356
:func:`hashlib.pbkdf2_hmac()`, deprecated in Python 3.10. Python 3.10 and
13331357
newer requires OpenSSL 1.1.1 (:pep:`644`): this OpenSSL version provides
13341358
a C implementation of :func:`~hashlib.pbkdf2_hmac()` which is faster.
13351359
(Contributed by Victor Stinner in :gh:`94199`.)
13361360

1337-
* :mod:`importlib`: Many previously deprecated cleanups in :mod:`importlib` have now been
1361+
importlib
1362+
---------
1363+
1364+
* Many previously deprecated cleanups in :mod:`importlib` have now been
13381365
completed:
13391366

13401367
* References to, and support for :meth:`!module_repr()` has been removed.
@@ -1350,10 +1377,13 @@ Removed
13501377
* ``importlib.abc.Finder``, ``pkgutil.ImpImporter``, and ``pkgutil.ImpLoader``
13511378
have been removed. (Contributed by Barry Warsaw in :gh:`98040`.)
13521379

1353-
* The :mod:`!imp` module has been removed. (Contributed by Barry Warsaw in
1354-
:gh:`98040`.)
1380+
imp
1381+
---
13551382

1356-
* Replace removed :mod:`!imp` functions with :mod:`importlib` functions:
1383+
* The :mod:`!imp` module has been removed. (Contributed by Barry Warsaw in
1384+
:gh:`98040`.)
1385+
1386+
* Replace removed :mod:`!imp` functions with :mod:`importlib` functions:
13571387

13581388
================================= =======================================
13591389
imp importlib
@@ -1370,7 +1400,7 @@ Removed
13701400
``imp.source_from_cache()`` :func:`importlib.util.source_from_cache`
13711401
================================= =======================================
13721402

1373-
* Replace ``imp.load_source()`` with::
1403+
* Replace ``imp.load_source()`` with::
13741404

13751405
import importlib.util
13761406
import importlib.machinery
@@ -1385,28 +1415,34 @@ Removed
13851415
loader.exec_module(module)
13861416
return module
13871417

1388-
* Removed :mod:`!imp` functions and attributes with no replacements:
1418+
* Removed :mod:`!imp` functions and attributes with no replacements:
1419+
1420+
* undocumented functions:
13891421

1390-
* undocumented functions:
1422+
* ``imp.init_builtin()``
1423+
* ``imp.load_compiled()``
1424+
* ``imp.load_dynamic()``
1425+
* ``imp.load_package()``
13911426

1392-
* ``imp.init_builtin()``
1393-
* ``imp.load_compiled()``
1394-
* ``imp.load_dynamic()``
1395-
* ``imp.load_package()``
1427+
* ``imp.lock_held()``, ``imp.acquire_lock()``, ``imp.release_lock()``:
1428+
the locking scheme has changed in Python 3.3 to per-module locks.
1429+
* ``imp.find_module()`` constants: ``SEARCH_ERROR``, ``PY_SOURCE``,
1430+
``PY_COMPILED``, ``C_EXTENSION``, ``PY_RESOURCE``, ``PKG_DIRECTORY``,
1431+
``C_BUILTIN``, ``PY_FROZEN``, ``PY_CODERESOURCE``, ``IMP_HOOK``.
13961432

1397-
* ``imp.lock_held()``, ``imp.acquire_lock()``, ``imp.release_lock()``:
1398-
the locking scheme has changed in Python 3.3 to per-module locks.
1399-
* ``imp.find_module()`` constants: ``SEARCH_ERROR``, ``PY_SOURCE``,
1400-
``PY_COMPILED``, ``C_EXTENSION``, ``PY_RESOURCE``, ``PKG_DIRECTORY``,
1401-
``C_BUILTIN``, ``PY_FROZEN``, ``PY_CODERESOURCE``, ``IMP_HOOK``.
1433+
io
1434+
--
14021435

1403-
* :mod:`io`: Remove ``io.OpenWrapper`` and ``_pyio.OpenWrapper``, deprecated in Python
1436+
* Remove :mod:`io`'s ``io.OpenWrapper`` and ``_pyio.OpenWrapper``, deprecated in Python
14041437
3.10: just use :func:`open` instead. The :func:`open` (:func:`io.open`)
14051438
function is a built-in function. Since Python 3.10, :func:`!_pyio.open` is
14061439
also a static method.
14071440
(Contributed by Victor Stinner in :gh:`94169`.)
14081441

1409-
* :mod:`locale`: Remove the :func:`!locale.format` function, deprecated in Python 3.7:
1442+
locale
1443+
------
1444+
1445+
* Remove :mod:`locale`'s :func:`!locale.format` function, deprecated in Python 3.7:
14101446
use :func:`locale.format_string` instead.
14111447
(Contributed by Victor Stinner in :gh:`94226`.)
14121448

@@ -1418,7 +1454,10 @@ Removed
14181454

14191455
.. _aiosmtpd: https://pypi.org/project/aiosmtpd/
14201456

1421-
* :mod:`sqlite3`: The following undocumented :mod:`sqlite3` features, deprecated in Python
1457+
sqlite3
1458+
-------
1459+
1460+
* The following undocumented :mod:`sqlite3` features, deprecated in Python
14221461
3.10, are now removed:
14231462

14241463
* ``sqlite3.enable_shared_cache()``
@@ -1434,30 +1473,34 @@ Removed
14341473

14351474
(Contributed by Erlend E. Aasland in :gh:`92548`.)
14361475

1437-
* :mod:`ssl`:
1476+
ssl
1477+
---
14381478

1439-
* Remove the :func:`!ssl.RAND_pseudo_bytes` function, deprecated in Python 3.6:
1440-
use :func:`os.urandom` or :func:`ssl.RAND_bytes` instead.
1441-
(Contributed by Victor Stinner in :gh:`94199`.)
1479+
* Remove :mod:`ssl`'s :func:`!ssl.RAND_pseudo_bytes` function, deprecated in Python 3.6:
1480+
use :func:`os.urandom` or :func:`ssl.RAND_bytes` instead.
1481+
(Contributed by Victor Stinner in :gh:`94199`.)
1482+
1483+
* Remove the :func:`!ssl.match_hostname` function.
1484+
It was deprecated in Python 3.7. OpenSSL performs
1485+
hostname matching since Python 3.7, Python no longer uses the
1486+
:func:`!ssl.match_hostname` function.
1487+
(Contributed by Victor Stinner in :gh:`94199`.)
14421488

1443-
* Remove the :func:`!ssl.match_hostname` function.
1444-
It was deprecated in Python 3.7. OpenSSL performs
1445-
hostname matching since Python 3.7, Python no longer uses the
1446-
:func:`!ssl.match_hostname` function.
1447-
(Contributed by Victor Stinner in :gh:`94199`.)
1489+
* Remove the :func:`!ssl.wrap_socket` function, deprecated in Python 3.7:
1490+
instead, create a :class:`ssl.SSLContext` object and call its
1491+
:class:`ssl.SSLContext.wrap_socket` method. Any package that still uses
1492+
:func:`!ssl.wrap_socket` is broken and insecure. The function neither sends a
1493+
SNI TLS extension nor validates server hostname. Code is subject to `CWE-295
1494+
<https://cwe.mitre.org/data/definitions/295.html>`_: Improper Certificate
1495+
Validation.
1496+
(Contributed by Victor Stinner in :gh:`94199`.)
14481497

1449-
* Remove the :func:`!ssl.wrap_socket` function, deprecated in Python 3.7:
1450-
instead, create a :class:`ssl.SSLContext` object and call its
1451-
:class:`ssl.SSLContext.wrap_socket` method. Any package that still uses
1452-
:func:`!ssl.wrap_socket` is broken and insecure. The function neither sends a
1453-
SNI TLS extension nor validates server hostname. Code is subject to `CWE-295
1454-
<https://cwe.mitre.org/data/definitions/295.html>`_: Improper Certificate
1455-
Validation.
1456-
(Contributed by Victor Stinner in :gh:`94199`.)
1498+
unittest
1499+
--------
14571500

1458-
* :mod:`unittest`: Removed many old deprecated :mod:`unittest` features:
1501+
* Removed many old deprecated :mod:`unittest` features:
14591502

1460-
- A number of :class:`~unittest.TestCase` method aliases:
1503+
* A number of :class:`~unittest.TestCase` method aliases:
14611504

14621505
============================ =============================== ===============
14631506
Deprecated alias Method Name Deprecated in
@@ -1482,33 +1525,45 @@ Removed
14821525
You can use https://github.com/isidentical/teyit to automatically modernise
14831526
your unit tests.
14841527

1485-
- Undocumented and broken :class:`~unittest.TestCase` method
1528+
* Undocumented and broken :class:`~unittest.TestCase` method
14861529
``assertDictContainsSubset`` (deprecated in Python 3.2).
14871530

1488-
- Undocumented :meth:`TestLoader.loadTestsFromModule
1531+
* Undocumented :meth:`TestLoader.loadTestsFromModule
14891532
<unittest.TestLoader.loadTestsFromModule>` parameter *use_load_tests*
14901533
(deprecated and ignored since Python 3.2).
14911534

1492-
- An alias of the :class:`~unittest.TextTestResult` class:
1535+
* An alias of the :class:`~unittest.TextTestResult` class:
14931536
``_TextTestResult`` (deprecated in Python 3.2).
14941537

14951538
(Contributed by Serhiy Storchaka in :issue:`45162`.)
14961539

1497-
* :mod:`webbrowser`: Remove support for obsolete browsers from :mod:`webbrowser`.
1540+
webbrowser
1541+
----------
1542+
1543+
* Remove support for obsolete browsers from :mod:`webbrowser`.
14981544
Removed browsers include: Grail, Mosaic, Netscape, Galeon, Skipstone,
14991545
Iceape, Firebird, and Firefox versions 35 and below (:gh:`102871`).
15001546

1501-
* :mod:`xml.etree.ElementTree`: Remove the ``ElementTree.Element.copy()`` method of the
1547+
xml.etree.ElementTree
1548+
---------------------
1549+
1550+
* Remove the ``ElementTree.Element.copy()`` method of the
15021551
pure Python implementation, deprecated in Python 3.10, use the
15031552
:func:`copy.copy` function instead. The C implementation of :mod:`xml.etree.ElementTree`
15041553
has no ``copy()`` method, only a ``__copy__()`` method.
15051554
(Contributed by Victor Stinner in :gh:`94383`.)
15061555

1507-
* :mod:`zipimport`: Remove ``find_loader()`` and ``find_module()`` methods,
1556+
zipimport
1557+
---------
1558+
1559+
* Remove :mod:`zipimport`'s ``find_loader()`` and ``find_module()`` methods,
15081560
deprecated in Python 3.10: use the ``find_spec()`` method instead. See
15091561
:pep:`451` for the rationale.
15101562
(Contributed by Victor Stinner in :gh:`94379`.)
15111563

1564+
Others
1565+
------
1566+
15121567
* Removed the ``suspicious`` rule from the documentation Makefile, and
15131568
removed ``Doc/tools/rstlint.py``, both in favor of `sphinx-lint
15141569
<https://github.com/sphinx-contrib/sphinx-lint>`_.

0 commit comments

Comments
 (0)