8000 gh-109190: What's New in 3.12: Add subheadings to removals for easy l… · python/cpython@57b6205 · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 57b6205

Browse files
hugovkAA-Turner
andauthored
gh-109190: What's New in 3.12: Add subheadings to removals for easy linking (#109159)
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
1 parent 517cd82 commit 57b6205

File tree

1 file changed

+107
-52
lines changed

1 file changed

+107
-52
lines changed

Doc/whatsnew/3.12.rst

Lines changed: 107 additions & 52 deletions
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)
0