]> git.ipfire.org Git - thirdparty/Python/cpython.git/log
thirdparty/Python/cpython.git
4 weeks agoPython 3.14.0 v3.14.0
Hugo van Kemenade [Tue, 7 Oct 2025 09:34:30 +0000 (12:34 +0300)] 
Python 3.14.0

4 weeks ago[3.14] GH-123299: Announce final release in What's New in Python 3.14 (GH-139631...
Miss Islington (bot) [Tue, 7 Oct 2025 08:56:02 +0000 (10:56 +0200)] 
[3.14] GH-123299: Announce final release in What's New in Python 3.14 (GH-139631) (#139685)

Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
4 weeks ago[3.14] gh-124111: Update macOS installer to use Tcl/Tk 8.6.17. (GH-139682) (#139683)
Miss Islington (bot) [Tue, 7 Oct 2025 05:19:28 +0000 (07:19 +0200)] 
[3.14] gh-124111: Update macOS installer to use Tcl/Tk 8.6.17. (GH-139682) (#139683)

gh-124111: Update macOS installer to use Tcl/Tk 8.6.17. (GH-139682)
(cherry picked from commit 6d804e4efb8ed2ebeb9cef9577945c46c0038178)

Co-authored-by: Ned Deily <nad@python.org>
4 weeks ago[3.14] gh-139573: Update macOS installer to use OpenSSL 3.0.18 (GH-139575) (#139680)
Miss Islington (bot) [Tue, 7 Oct 2025 05:01:57 +0000 (07:01 +0200)] 
[3.14] gh-139573: Update macOS installer to use OpenSSL 3.0.18 (GH-139575) (#139680)

gh-139573: Update macOS installer to use OpenSSL 3.0.18 (GH-139575)
(cherry picked from commit 23410f0a9e2f691c8cd342cfd05cc3ca5f09c242)

Co-authored-by: Zachary Ware <zach@python.org>
4 weeks ago[3.14] Add warnings filter suggestions to PEP 765 entry in What's New (GH-139658...
Miss Islington (bot) [Mon, 6 Oct 2025 21:30:00 +0000 (23:30 +0200)] 
[3.14] Add warnings filter suggestions to PEP 765 entry in What's New (GH-139658) (#139676)

Co-authored-by: Alyssa Coghlan <ncoghlan@gmail.com>
Co-authored-by: Irit Katriel <1055913+iritkatriel@users.noreply.github.com>
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
4 weeks ago[3.14] gh-116488: Mention `dict.get` in the data structures tutorial (GH-139643)...
Miss Islington (bot) [Mon, 6 Oct 2025 16:04:44 +0000 (18:04 +0200)] 
[3.14] gh-116488: Mention `dict.get` in the data structures tutorial (GH-139643) (#139655)

Co-authored-by: Cycloctane <Cycloctane@outlook.com>
4 weeks ago[3.14] gh-139400: Move NEWS item from section "Core and Builtins" to section "Securit...
Sebastian Pipping [Mon, 6 Oct 2025 15:12:43 +0000 (17:12 +0200)] 
[3.14] gh-139400: Move NEWS item from section "Core and Builtins" to section "Security" (GH-139606) (#139663)

4 weeks ago[3.14] gh-137242: Allow Android testbed to take all Python command-line options ...
Miss Islington (bot) [Mon, 6 Oct 2025 12:15:06 +0000 (14:15 +0200)] 
[3.14] gh-137242: Allow Android testbed to take all Python command-line options (GH-138805) (#139637)

Co-authored-by: Malcolm Smith <smith@chaquo.com>
4 weeks ago[3.14] GH-123299: Copyedit 3.14 What's New: Trivia (GH-139618) (#139626)
Miss Islington (bot) [Sun, 5 Oct 2025 20:34:05 +0000 (22:34 +0200)] 
[3.14] GH-123299: Copyedit 3.14 What's New: Trivia (GH-139618) (#139626)

GH-123299: Copyedit 3.14 What's New: Trivia (GH-139618)
(cherry picked from commit 46de475af7225e6ef4c3fd08ee9202115a22de10)

Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
4 weeks ago[3.14] GH-123299: Copyedit 3.14 What's New: New Features (GH-139543) (#139615)
Miss Islington (bot) [Sun, 5 Oct 2025 18:38:28 +0000 (20:38 +0200)] 
[3.14] GH-123299: Copyedit 3.14 What's New: New Features (GH-139543) (#139615)

Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
4 weeks ago[3.14] gh-139400: Make sure that parent parsers outlive their subparsers in `pyexpat...
Miss Islington (bot) [Sun, 5 Oct 2025 16:02:11 +0000 (18:02 +0200)] 
[3.14] gh-139400: Make sure that parent parsers outlive their subparsers in `pyexpat` (GH-139403) (#139606)

Co-authored-by: Sebastian Pipping <sebastian@pipping.org>
4 weeks ago[3.14] gh-138130: Fix return value of libc_ver() on Emscripten (GH-138132) (#138312)
Miss Islington (bot) [Sun, 5 Oct 2025 13:03:49 +0000 (15:03 +0200)] 
[3.14] gh-138130: Fix return value of libc_ver() on Emscripten (GH-138132) (#138312)

Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>
4 weeks ago[3.14] gh-118767: Remove ``bool(NotImplemented)`` from pending-removal document ...
Miss Islington (bot) [Sun, 5 Oct 2025 13:01:35 +0000 (15:01 +0200)] 
[3.14] gh-118767: Remove ``bool(NotImplemented)`` from pending-removal document (GH-139526) (#139599)

Co-authored-by: Jost Migenda <jost.migenda@kcl.ac.uk>
4 weeks ago[3.14] gh-139310: skip `test_aead_aes_gcm` for Linux kernel between 6.16.0 and 6...
Miss Islington (bot) [Sun, 5 Oct 2025 08:53:23 +0000 (10:53 +0200)] 
[3.14] gh-139310: skip `test_aead_aes_gcm` for Linux kernel between 6.16.0 and 6.17.x (GH-139552) (#139594)

gh-139310: skip `test_aead_aes_gcm` for Linux kernel between 6.16.0 and 6.17.x (GH-139552)

Currently, Fedora 42 uses a custom Linux Kernel 6.16.9 that backported an upstream change
from 6.17-rc7 [1,3] but not its subsequent fix [2]. Until the issue is resolved upstream,
we skip the failing test `test_socket.test_aead_aes_gcm` for kernel versions between 6.16
and 6.17.x.

[1] https://github.com/torvalds/linux/commit/1b34cbbf4f011a121ef7b2d7d6e6920a036d5285
[2] https://github.com/torvalds/linux/commit/d0ca0df179c4b21e2a6c4a4fb637aa8fa14575cb.
[3] https://gitlab.com/cki-project/kernel-ark/-/commit/45bcf60fe49b37daab1acee57b27211ad1574042
(cherry picked from commit 41712c4e095b2cc988febfe3887616c2779c6210)

Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
4 weeks ago[3.14] gh-139573: Update OpenSSL version used in iOS builds (GH-139582) (#139589)
Miss Islington (bot) [Sun, 5 Oct 2025 06:09:09 +0000 (08:09 +0200)] 
[3.14] gh-139573: Update OpenSSL version used in iOS builds (GH-139582) (#139589)

gh-139573: Update OpenSSL version used in iOS builds (GH-139582)

Update OpenSSL version used in iOS builds.
(cherry picked from commit 20758f9bb1c3baa35c6cb44d0074ae488ca9f4d9)

Co-authored-by: Russell Keith-Magee <russell@keith-magee.com>
4 weeks ago[3.14] gh-139573: Update Windows builds to use OpenSSL 3.0.18 (GH-139574) (#139586)
Miss Islington (bot) [Sun, 5 Oct 2025 05:00:29 +0000 (07:00 +0200)] 
[3.14] gh-139573: Update Windows builds to use OpenSSL 3.0.18 (GH-139574) (#139586)

gh-139573: Update Windows builds to use OpenSSL 3.0.18 (GH-139574)
(cherry picked from commit 063cef9999d7490e62cb2ad2711634a992c090fb)

Co-authored-by: Zachary Ware <zach@python.org>
4 weeks ago[3.14] gh-139573: Update OpenSSL in CI (GH-139577) (#139583)
Miss Islington (bot) [Sun, 5 Oct 2025 04:50:26 +0000 (06:50 +0200)] 
[3.14] gh-139573: Update OpenSSL in CI (GH-139577) (#139583)

gh-139573: Update OpenSSL in CI (GH-139577)
(cherry picked from commit 98e748b3a0d97bd2c785efc63693f971113b3b63)

Co-authored-by: Zachary Ware <zach@python.org>
4 weeks ago[3.14] gh-139573: Update Android to OpenSSL 3.0.18 (GH-139562) (#139581)
Miss Islington (bot) [Sun, 5 Oct 2025 04:49:36 +0000 (06:49 +0200)] 
[3.14] gh-139573: Update Android to OpenSSL 3.0.18 (GH-139562) (#139581)

gh-139573: Update Android to OpenSSL 3.0.18 (GH-139562)

Update Android to OpenSSL 3.0.18.
(cherry picked from commit 0f0fc5a16368ea45541137cff6b90d63bad5eb26)

Co-authored-by: Malcolm Smith <smith@chaquo.com>
4 weeks ago[3.14] gh-138558: Improve description of ``Interpolation.expression`` (GH-139187...
Miss Islington (bot) [Sun, 5 Oct 2025 04:41:43 +0000 (06:41 +0200)] 
[3.14] gh-138558: Improve description of ``Interpolation.expression`` (GH-139187) (#139579)

gh-138558: Improve description of ``Interpolation.expression`` (GH-139187)
(cherry picked from commit 880c9526f91960b9cba557a18b54e2c32d2f254e)

Co-authored-by: Dave Peck <davepeck@gmail.com>
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
4 weeks ago[3.14] gh-138703: clarify data buffer requirement of `asyncio.StreamWriter.write...
Miss Islington (bot) [Sat, 4 Oct 2025 16:40:21 +0000 (18:40 +0200)] 
[3.14] gh-138703: clarify data buffer requirement of `asyncio.StreamWriter.write` (GH-139564) (#139570)

Co-authored-by: Kumar Aditya <kumaraditya@python.org>
4 weeks ago[3.14] Synced docs and docstring for `sysconfig.get_platform` (GH-135530) (#138976)
Miss Islington (bot) [Sat, 4 Oct 2025 14:55:25 +0000 (16:55 +0200)] 
[3.14] Synced docs and docstring  for `sysconfig.get_platform` (GH-135530) (#138976)

Synced docs and docstring  for `sysconfig.get_platform` (GH-135530)
(cherry picked from commit 01cc53295cca6834de77be79368c25b890bab8fc)

Co-authored-by: ivan <ivandietert@gmail.com>
Co-authored-by: Mikhail Efimov <efimov.mikhail@gmail.com>
Co-authored-by: Ned Deily <nad@python.org>
Co-authored-by: Filipe Laíns 🇵🇸 <lains@riseup.net>
4 weeks ago[3.14] GH-123299: Copyedit 3.14 What's New: New and Improved Modules (GH-139530)...
Miss Islington (bot) [Sat, 4 Oct 2025 13:45:35 +0000 (15:45 +0200)] 
[3.14] GH-123299: Copyedit 3.14 What's New: New and Improved Modules (GH-139530) (#139555)

GH-123299: Copyedit 3.14 What's New: New and Improved Modules (GH-139530)
(cherry picked from commit c33dc154b4d219a696f3fbe8965a38907c371780)

Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
5 weeks ago[3.14] GH-123299: Copyedit 3.14 What's New: Other Language Changes (GH-139425) (...
Miss Islington (bot) [Fri, 3 Oct 2025 20:46:29 +0000 (22:46 +0200)] 
[3.14] GH-123299: Copyedit 3.14 What's New: Other Language Changes (GH-139425) (#139508)

Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
5 weeks ago[3.14] gh-105987: unskip `test_issue105987` from `test_asyncio.test_eager_task_factor...
Miss Islington (bot) [Fri, 3 Oct 2025 20:21:28 +0000 (22:21 +0200)] 
[3.14] gh-105987: unskip `test_issue105987` from `test_asyncio.test_eager_task_factory` (GH-139538) (#139539)

Co-authored-by: Kumar Aditya <kumaraditya@python.org>
5 weeks ago[3.14] Document `Py_AddPendingCall()` change with subinterpreters in 3.12 (GH-139117...
Miss Islington (bot) [Fri, 3 Oct 2025 20:20:35 +0000 (22:20 +0200)] 
[3.14] Document `Py_AddPendingCall()` change with subinterpreters in 3.12 (GH-139117) (#139118)

Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
5 weeks ago[3.14] gh-137638: Use macos-15-intel in GitHub Actions (GH-139154) (#139545)
Miss Islington (bot) [Fri, 3 Oct 2025 20:16:01 +0000 (22:16 +0200)] 
[3.14] gh-137638: Use macos-15-intel in GitHub Actions (GH-139154) (#139545)

Co-authored-by: Jacob Coffee <jacob@z7x.org>
Co-authored-by: 🇺🇦 Sviatoslav Sydorenko (Святослав Сидоренко) <wk.cvs.github@sydorenko.org.ua>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
5 weeks ago[3.14] gh-139495: Fix `hashlib.file_digest()` versionchanged description of `Blocking...
Miss Islington (bot) [Thu, 2 Oct 2025 21:11:58 +0000 (23:11 +0200)] 
[3.14] gh-139495: Fix `hashlib.file_digest()` versionchanged description of `BlockingIOError` (GH-139496) (#139522)

Co-authored-by: Alex Willmer <alex@moreati.org.uk>
5 weeks ago[3.14] gh-139487: add missing imports for standalone doctest `Enum` examples (GH...
Miss Islington (bot) [Thu, 2 Oct 2025 14:37:19 +0000 (16:37 +0200)] 
[3.14] gh-139487: add missing imports for standalone doctest `Enum` examples (GH-139488) (#139493)

gh-139487: add missing imports for standalone doctest `Enum` examples (GH-139488)
(cherry picked from commit f3d7faeafa9618b38980813f22d0a64f7b2bd441)

Co-authored-by: Peter <35064951+ttw225@users.noreply.github.com>
5 weeks ago[3.14] gh-132006: Add support for handling XCPrivacy manifests (GH-139163) (#139410)
Miss Islington (bot) [Wed, 1 Oct 2025 13:50:33 +0000 (15:50 +0200)] 
[3.14] gh-132006: Add support for handling XCPrivacy manifests (GH-139163) (#139410)

Co-authored-by: Russell Keith-Magee <russell@keith-magee.com>
5 weeks ago[3.14] GH-123299: Copyedit 3.14 What's New: Deprecated (GH-139433) (#139457)
Miss Islington (bot) [Wed, 1 Oct 2025 09:29:07 +0000 (11:29 +0200)] 
[3.14] GH-123299: Copyedit 3.14 What's New: Deprecated (GH-139433) (#139457)

Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
5 weeks ago[3.14] Document that `PyInterpreterState_GetDict` returns a borrowed reference (GH...
Miss Islington (bot) [Wed, 1 Oct 2025 05:39:54 +0000 (07:39 +0200)] 
[3.14] Document that `PyInterpreterState_GetDict` returns a borrowed reference (GH-139451) (#139463)

Document that `PyInterpreterState_GetDict` returns a borrowed reference (GH-139451)
(cherry picked from commit 80cdf3ef74f6622899c1c82af1e08492e4ab7a00)

Co-authored-by: Petr Viktorin <encukou@gmail.com>
5 weeks ago[3.14] Remove link to the PDF downloads (GH-139142) (#139426)
Miss Islington (bot) [Mon, 29 Sep 2025 21:12:28 +0000 (23:12 +0200)] 
[3.14] Remove link to the PDF downloads (GH-139142) (#139426)

Remove link to the PDF downloads (GH-139142)
(cherry picked from commit 6b5f15698a436591f7c305c576a2d366c38d9997)

Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
5 weeks ago[3.14] gh-134953: Make the True/False/None check more efficient (GH-138931) (#138939)
Miss Islington (bot) [Mon, 29 Sep 2025 20:11:41 +0000 (22:11 +0200)] 
[3.14] gh-134953: Make the True/False/None check more efficient (GH-138931) (#138939)

5 weeks ago[3.14] GH-123299: Copyedit 3.14 What's New: CPython bytecode changes (GH-139402)...
Miss Islington (bot) [Mon, 29 Sep 2025 15:55:26 +0000 (17:55 +0200)] 
[3.14] GH-123299: Copyedit 3.14 What's New: CPython bytecode changes (GH-139402) (#139420)

Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
5 weeks ago[3.14] gh-139146: Check `calloc()` results in `_testembed.c::test_pre_initialization_...
Miss Islington (bot) [Mon, 29 Sep 2025 12:04:47 +0000 (14:04 +0200)] 
[3.14] gh-139146: Check `calloc()` results in `_testembed.c::test_pre_initialization_sys_options` (GH-139147) (#139413)

Co-authored-by: Denis Sergeev <zeff@altlinux.org>
5 weeks ago[3.14] Make Android streams respect the unbuffered (`-u`) option (GH-138806) (#139108)
Miss Islington (bot) [Mon, 29 Sep 2025 08:16:25 +0000 (10:16 +0200)] 
[3.14] Make Android streams respect the unbuffered (`-u`) option (GH-138806) (#139108)

Co-authored-by: Malcolm Smith <smith@chaquo.com>
5 weeks ago[3.14] gh-136744: Remove unnecessary chmod from pydoc.apropos() test. (GH-136746...
Miss Islington (bot) [Mon, 29 Sep 2025 08:12:31 +0000 (10:12 +0200)] 
[3.14] gh-136744: Remove unnecessary chmod from pydoc.apropos() test. (GH-136746) (#139242)

Co-authored-by: Russell Keith-Magee <russell@keith-magee.com>
Co-authored-by: Zachary Ware <zachary.ware@gmail.com>
5 weeks ago[3.14] gh-138171: Migrate iOS testbed location and add Apple build script (#138176...
Russell Keith-Magee [Mon, 29 Sep 2025 08:11:59 +0000 (16:11 +0800)] 
[3.14] gh-138171: Migrate iOS testbed location and add Apple build script (#138176) (#139204)

Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
5 weeks ago[3.14] gh-135447: Document the ``NOT_TAKEN`` & ``POP_ITER`` bytecode instructions...
Miss Islington (bot) [Sun, 28 Sep 2025 19:02:33 +0000 (21:02 +0200)] 
[3.14] gh-135447: Document the ``NOT_TAKEN`` & ``POP_ITER`` bytecode instructions (GH-135803) (#139399)

Co-authored-by: Yongzi Li <204532581+Yzi-Li@users.noreply.github.com>
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
Co-authored-by: Ken Jin <kenjin4096@gmail.com>
5 weeks ago[3.14] Link to 3.14 GC design docs (#139387)
Shantanu [Sun, 28 Sep 2025 13:47:05 +0000 (06:47 -0700)] 
[3.14] Link to 3.14 GC design docs (#139387)

5 weeks ago[3.14] gh-138633: synchronize documented signatures of SSL objects with runtime ones...
Bénédikt Tran [Sat, 27 Sep 2025 06:12:11 +0000 (08:12 +0200)] 
[3.14] gh-138633: synchronize documented signatures of SSL objects with runtime ones (GH-138639, GH-138648) (#138646)

(cherry picked from commit 3255c0c87057dbb35b3aa236f81d6e11c100fdcc)
(cherry picked from commit 4ef51fa75c17d4f027f2b73ff92be7a8b53eeb4f)

5 weeks ago[3.14] gh-139312: Update bundled libexpat to 2.7.3 (GH-139319) (#139376)
Miss Islington (bot) [Sat, 27 Sep 2025 06:10:07 +0000 (08:10 +0200)] 
[3.14] gh-139312: Update bundled libexpat to 2.7.3 (GH-139319) (#139376)

gh-139312: Update bundled libexpat to 2.7.3 (GH-139319)

(cherry picked from commit 48d0d0dd9733eae4935f2ebd31bef786d8074fc8)

Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
6 weeks ago[3.14] gh-127502: Fix typo in XML security notes (GH-139335) (#139346)
Miss Islington (bot) [Fri, 26 Sep 2025 12:43:00 +0000 (14:43 +0200)] 
[3.14] gh-127502: Fix typo in XML security notes (GH-139335) (#139346)

gh-127502: Fix typo in XML security notes (GH-139335)
(cherry picked from commit 6fa1e552e06063b668e02540ba1c31a4d87bbb17)

Co-authored-by: Sebastian Pipping <sebastian@pipping.org>
6 weeks ago[3.14] gh-139330: Check expat version/checksum in SBOM with refresh.sh
Miss Islington (bot) [Thu, 25 Sep 2025 18:30:14 +0000 (20:30 +0200)] 
[3.14] gh-139330: Check expat version/checksum in SBOM with refresh.sh

gh-139330: Check expat version/checksum in SBOM with refresh.sh

Check expat version/checksum in SBOM with refresh.sh
(cherry picked from commit 89b5571025a5316ea3855c8e595a5f3c3ae11f8f)

Co-authored-by: Seth Michael Larson <seth@python.org>
6 weeks ago[3.14] Fix the reference to unicode specification (#139138) (#139286)
Karolina Surma [Wed, 24 Sep 2025 17:11:20 +0000 (19:11 +0200)] 
[3.14] Fix the reference to unicode specification (#139138) (#139286)

Fix the reference to unicode specification (#139138)

(cherry picked from commit b36dee855dd61f6ac37208866c3c4c21429a587a)

6 weeks ago[3.14] Make sure the ``:keyword:`` role works for ``case`` (GH-138878) (#139200)
Miss Islington (bot) [Mon, 22 Sep 2025 06:13:05 +0000 (08:13 +0200)] 
[3.14] Make sure the ``:keyword:`` role works for ``case`` (GH-138878) (#139200)

Make sure the ``:keyword:`` role works for ``case`` (GH-138878)
(cherry picked from commit 848d926786f19d2db95b352650df2b1702f4af65)

Co-authored-by: sobolevn <mail@sobolevn.me>
6 weeks ago[3.14] gh-138092: Correct the documented signature of ``mmap.flush`` (GH-138671)...
Miss Islington (bot) [Sun, 21 Sep 2025 20:24:10 +0000 (22:24 +0200)] 
[3.14] gh-138092: Correct the documented signature of ``mmap.flush`` (GH-138671) (#139202)

gh-138092: Correct the documented signature of ``mmap.flush`` (GH-138671)
(cherry picked from commit e101f907dc827e3dc0bd3b08e4a0897d4a467430)

Co-authored-by: AN Long <aisk@users.noreply.github.com>
6 weeks ago[3.14] `Doc/library/os.rst`: Remove spurious parenthesis (GH-139205) (#139217)
Miss Islington (bot) [Sun, 21 Sep 2025 19:56:06 +0000 (21:56 +0200)] 
[3.14] `Doc/library/os.rst`: Remove spurious parenthesis (GH-139205) (#139217)

`Doc/library/os.rst`: Remove spurious parenthesis (GH-139205)
(cherry picked from commit 9c3d09b984374292d1d8552f53c98f445f8556dd)

Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
7 weeks ago[3.14] gh-118803: Improve documentation around `ByteString` deprecation (GH-139115...
Miss Islington (bot) [Thu, 18 Sep 2025 17:54:43 +0000 (19:54 +0200)] 
[3.14] gh-118803: Improve documentation around `ByteString` deprecation (GH-139115) (#139136)

gh-118803: Improve documentation around `ByteString` deprecation (GH-139115)
(cherry picked from commit 4305cc3ef35a35f9b2c163ae0ffeea219da5af5d)

Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
7 weeks ago[3.14] gh-137242: Mention Android binary releases in documentation (GH-138305) (...
Miss Islington (bot) [Thu, 18 Sep 2025 14:47:36 +0000 (16:47 +0200)] 
[3.14] gh-137242: Mention Android binary releases in documentation (GH-138305) (#139124)

gh-137242: Mention Android binary releases in documentation (GH-138305)

Adds a mention of binary releases to the Android documentation.

---------

(cherry picked from commit 594bdde9df6841f760cd54aa8cb8035b38f99c3a)

Co-authored-by: Malcolm Smith <smith@chaquo.com>
7 weeks agoPost 3.14.0rc3
Hugo van Kemenade [Thu, 18 Sep 2025 11:49:45 +0000 (12:49 +0100)] 
Post 3.14.0rc3

7 weeks agoPython 3.14.0rc3 v3.14.0rc3
Hugo van Kemenade [Thu, 18 Sep 2025 08:45:29 +0000 (09:45 +0100)] 
Python 3.14.0rc3

7 weeks ago[3.14] GH-139067: Add example for `argparse`'s `append` action (GH-131389) (#139068)
Miss Islington (bot) [Wed, 17 Sep 2025 22:27:53 +0000 (00:27 +0200)] 
[3.14] GH-139067: Add example for `argparse`'s `append` action (GH-131389) (#139068)

GH-139067: Add example for `argparse`'s `append` action (GH-131389)
(cherry picked from commit 101fd33065638c94f413447a7bcff09d54831a4a)

Co-authored-by: Moshe Kaplan <mosheekaplan@gmail.com>
7 weeks ago[3.14] gh-128627: Use __builtin_wasm_test_function_pointer_signature for Emscripten...
Miss Islington (bot) [Wed, 17 Sep 2025 16:21:01 +0000 (18:21 +0200)] 
[3.14] gh-128627: Use __builtin_wasm_test_function_pointer_signature for Emscripten trampoline (GH-137470) (#139039)

gh-128627: Use __builtin_wasm_test_function_pointer_signature for Emscripten trampoline (GH-137470)

With https://github.com/llvm/llvm-project/pull/150201 being merged, there is
now a better way to generate the Emscripten trampoline, instead of including
hand-generated binary WASM content. Requires Emscripten 4.0.12.
(cherry picked from commit 2629ee4eb0e9f66f28772cb4b4cc44ebe6de79ad)

Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>
7 weeks ago[3.14] gh-132558: Improve `argparse` docs on combining `type` and `choices` (GH-13382...
Miss Islington (bot) [Wed, 17 Sep 2025 16:19:33 +0000 (18:19 +0200)] 
[3.14] gh-132558: Improve `argparse` docs on combining `type` and `choices` (GH-133827) (#139057)

gh-132558: Improve `argparse` docs on combining `type` and `choices` (GH-133827)
(cherry picked from commit dd0840bf67e194ab64f340b8a7fbda24cb25e177)

Co-authored-by: Hans Then <hans.then@gmail.com>
Co-authored-by: Savannah Bailey <savannahostrowski@gmail.com>
7 weeks ago[3.14] gh-137988: Fix const description in argparse.add_argument() docs (GH-138315...
Miss Islington (bot) [Wed, 17 Sep 2025 15:51:30 +0000 (17:51 +0200)] 
[3.14] gh-137988: Fix const description in argparse.add_argument() docs (GH-138315) (#139051)

Co-authored-by: PrinceNaroliya <naroliyaprince@gmail.com>
Co-authored-by: Savannah Bailey <savannahostrowski@gmail.com>
7 weeks ago[3.14] gh-99948: Support ctypes.util.find_library in emscripten environment (GH-13851...
Miss Islington (bot) [Wed, 17 Sep 2025 14:24:46 +0000 (16:24 +0200)] 
[3.14] gh-99948: Support ctypes.util.find_library in emscripten environment (GH-138519) (#139022)

Co-authored-by: Gyeongjae Choi <def6488@gmail.com>
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Co-authored-by: Russell Keith-Magee <russell@keith-magee.com>
7 weeks ago[3.14] gh-138896: Fix error installing C runtime on non-updated Windows machines...
Miss Islington (bot) [Wed, 17 Sep 2025 14:22:41 +0000 (16:22 +0200)] 
[3.14] gh-138896: Fix error installing C runtime on non-updated Windows machines (GH-138932) (#139034)

Co-authored-by: adang1345 <adang1345@gmail.com>
7 weeks ago[3.14] GH-123299: Copyedit 3.14 What's New: C API (GH-138987) (#139021)
Miss Islington (bot) [Wed, 17 Sep 2025 14:21:06 +0000 (16:21 +0200)] 
[3.14] GH-123299: Copyedit 3.14 What's New: C API (GH-138987) (#139021)

Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
7 weeks ago[3.14] gh-138514: getpass: restrict `echo_char` to a single ASCII character (GH-13859...
Miss Islington (bot) [Wed, 17 Sep 2025 14:20:45 +0000 (16:20 +0200)] 
[3.14] gh-138514: getpass: restrict `echo_char` to a single ASCII character (GH-138591) (#138988)

Co-authored-by: Benjamin Johnson <benjohnson2040@gmail.com>
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
Co-authored-by: Brian Schubert <brianm.schubert@gmail.com>
7 weeks ago[3.14] gh-139006: Doc: Clarify html.escape function description (GH-139016) (#139036)
Miss Islington (bot) [Wed, 17 Sep 2025 13:58:17 +0000 (15:58 +0200)] 
[3.14] gh-139006: Doc: Clarify html.escape function description (GH-139016) (#139036)

gh-139006: Doc: Clarify html.escape function description (GH-139016)
(cherry picked from commit 81c975bcfc1ac0533f9489a37e501ad5d3bdb4eb)

Doc: Clarify html.escape function description (GH-139006)

Co-authored-by: PrinceNaroliya <naroliyaprince@gmail.com>
7 weeks ago[3.14] gh-138998: Upgrade vendored expat to 2.7.2 (GH-138999) (#139024)
Miss Islington (bot) [Wed, 17 Sep 2025 12:41:02 +0000 (14:41 +0200)] 
[3.14] gh-138998: Upgrade vendored expat to 2.7.2 (GH-138999) (#139024)

Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
7 weeks ago[3.14] gh-137226: Fix get_type_hints() on generic TypedDict with stringified annotati...
Jelle Zijlstra [Wed, 17 Sep 2025 09:22:16 +0000 (02:22 -0700)] 
[3.14] gh-137226: Fix get_type_hints() on generic TypedDict with stringified annotations (GH-138953) (#138989)

7 weeks ago[3.14] gh-138966: Add description for `gi_suspended` attribute (GH-139008) (#139020)
Miss Islington (bot) [Wed, 17 Sep 2025 09:09:15 +0000 (11:09 +0200)] 
[3.14] gh-138966: Add description for `gi_suspended` attribute (GH-139008) (#139020)

Co-authored-by: Donghoon Nam <54799053+codenamenam@users.noreply.github.com>
7 weeks ago[3.14] Revert "gh-118803: Remove `ByteString` from `typing` and `collections.abc...
Miss Islington (bot) [Wed, 17 Sep 2025 08:08:15 +0000 (10:08 +0200)] 
[3.14] Revert "gh-118803: Remove `ByteString` from `typing` and `collections.abc` (GH-118804)" (GH-138990) (#138995)

Revert "gh-118803: Remove `ByteString` from `typing` and `collections.abc` (GH-118804)" (GH-138990)
(cherry picked from commit 530ddd3e06a425b8bb9e8afb657dc7711a5aa2f9)

Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
7 weeks ago[3.14] gh-110936: Reorder string literal definition in Lexical Analysis (GH-138063...
Miss Islington (bot) [Tue, 16 Sep 2025 13:56:17 +0000 (15:56 +0200)] 
[3.14] gh-110936: Reorder string literal definition in Lexical Analysis (GH-138063) (#138373)

Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
7 weeks ago[3.14] gh-54874: Expand unicodedata module documentation (GH-138301) (#138346)
Miss Islington (bot) [Tue, 16 Sep 2025 13:55:59 +0000 (15:55 +0200)] 
[3.14] gh-54874: Expand unicodedata module documentation (GH-138301) (#138346)

Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
Co-authored-by: Alexander Belopolsky <abalkin@users.noreply.github.com>
7 weeks ago[3.14] gh-137985: Correct description of Formatter's datefmt param in logging documen...
Miss Islington (bot) [Tue, 16 Sep 2025 13:55:29 +0000 (15:55 +0200)] 
[3.14] gh-137985: Correct description of Formatter's datefmt param in logging documentation (GH-138530) (#138565)

Co-authored-by: W. H. Wang <mattwang44@gmail.com>
7 weeks ago[3.14] gh-138871: Clarify NameError exception in 'del' (GH-138881) (#138903)
Miss Islington (bot) [Tue, 16 Sep 2025 13:54:37 +0000 (15:54 +0200)] 
[3.14] gh-138871: Clarify NameError exception in 'del' (GH-138881) (#138903)

Co-authored-by: Kian Eliasi <kian.elbo@gmail.com>
7 weeks ago[3.14] gh-135755: Make Py_MAX_SCRIPT_PATH_SIZE private (GH-138350) (#138356)
Miss Islington (bot) [Tue, 16 Sep 2025 12:49:35 +0000 (14:49 +0200)] 
[3.14] gh-135755: Make Py_MAX_SCRIPT_PATH_SIZE private (GH-138350) (#138356)

Co-authored-by: Victor Stinner <vstinner@python.org>
7 weeks ago[3.14] gh-135329: prevent infinite traceback loop on Ctrl-C for strace (GH-138133...
Miss Islington (bot) [Tue, 16 Sep 2025 11:04:49 +0000 (13:04 +0200)] 
[3.14] gh-135329: prevent infinite traceback loop on Ctrl-C  for strace (GH-138133) (#138973)

gh-135329: prevent infinite traceback loop on Ctrl-C  for strace (GH-138133)
(cherry picked from commit b9dbf6acb34fd407d52899a6c154a1c57c9a424b)

Signed-off-by: yihong0618 <zouzou0208@gmail.com>
Co-authored-by: yihong <zouzou0208@gmail.com>
Co-authored-by: dura0ok <slpmcf@gmail.com>
Co-authored-by: graymon <greyschwinger@gmail.com>
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
Co-authored-by: Łukasz Langa <lukasz@langa.pl>
7 weeks ago[3.14] gh-128636: Fix crash in PyREPL when os.environ is overwritten with an invalid...
Miss Islington (bot) [Tue, 16 Sep 2025 09:10:53 +0000 (11:10 +0200)] 
[3.14] gh-128636: Fix crash in PyREPL when os.environ is overwritten with an invalid value for macOS (GH-138089) (#138938)

Co-authored-by: yihong <zouzou0208@gmail.com>
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
7 weeks ago[3.14] gh-134953: Expand theming for `True`/`False`/`None` (GH-135000) (#138928)
Miss Islington (bot) [Mon, 15 Sep 2025 16:02:40 +0000 (18:02 +0200)] 
[3.14] gh-134953: Expand theming for `True`/`False`/`None` (GH-135000) (#138928)

Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
Co-authored-by: Łukasz Langa <lukasz@langa.pl>
7 weeks ago[3.14] gh-138801: re-enable `pyrepl` tests on Windows (GH-138802) (GH-138815)
Miss Islington (bot) [Mon, 15 Sep 2025 14:42:36 +0000 (16:42 +0200)] 
[3.14] gh-138801: re-enable `pyrepl` tests on Windows (GH-138802) (GH-138815)

gh-138801: re-enable `pyrepl` tests on Windows (GH-138802)
(cherry picked from commit 4f3cab96c166031a184a1abf288a4d65df49fe52)

Co-authored-by: Chris Eibl <138194463+chris-eibl@users.noreply.github.com>
7 weeks ago[3.14] gh-138669: Increase test coverage for difflib (GH-138670) (#138817)
Miss Islington (bot) [Sun, 14 Sep 2025 21:20:32 +0000 (23:20 +0200)] 
[3.14] gh-138669: Increase test coverage for difflib (GH-138670) (#138817)

Co-authored-by: Jan-Eric Nitschke <47750513+JanEricNitschke@users.noreply.github.com>
7 weeks ago[3.14] gh-138804: Check type in `shlex.quote` (GH-138809) (#138846)
Miss Islington (bot) [Sat, 13 Sep 2025 18:29:50 +0000 (20:29 +0200)] 
[3.14] gh-138804: Check type in `shlex.quote` (GH-138809) (#138846)

Co-authored-by: Christoph Walcher <christoph-wa@gmx.de>
8 weeks ago[3.14] gh-138479: Ensure that `__typing_subst__` returns a tuple (GH-138482) (#138784)
Miss Islington (bot) [Fri, 12 Sep 2025 13:23:03 +0000 (15:23 +0200)] 
[3.14] gh-138479: Ensure that `__typing_subst__` returns a tuple (GH-138482) (#138784)

Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
8 weeks ago[3.14] gh-71810: Fix corner case (length==0) for int.to_bytes() (GH-138739) (#138782)
Miss Islington (bot) [Fri, 12 Sep 2025 13:22:43 +0000 (15:22 +0200)] 
[3.14] gh-71810: Fix corner case (length==0) for int.to_bytes() (GH-138739) (#138782)

Co-authored-by: Sergey B Kirpichev <skirpichev@gmail.com>
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
8 weeks ago[3.14] gh-116946: fully implement GC protocol for `zlib` objects (GH-138290) (#138327)
Bénédikt Tran [Fri, 12 Sep 2025 13:22:33 +0000 (15:22 +0200)] 
[3.14] gh-116946: fully implement GC protocol for `zlib` objects (GH-138290) (#138327)

8 weeks ago[3.14] Improve permission error messages in pdb and asyncio.tools (GH-134290) (#138826)
Miss Islington (bot) [Fri, 12 Sep 2025 12:20:20 +0000 (14:20 +0200)] 
[3.14] Improve permission error messages in pdb and asyncio.tools (GH-134290) (#138826)

Improve permission error messages in pdb and asyncio.tools (GH-134290)
(cherry picked from commit 419441a6e14aa9e0ebd2484ee8e76d3c544a3c09)

Co-authored-by: ivonastojanovic <80911834+ivonastojanovic@users.noreply.github.com>
8 weeks ago[3.14] gh-138005: Document that CSV `skipinitialspace=True` and `delimiter=' '` requi...
Miss Islington (bot) [Thu, 11 Sep 2025 15:18:25 +0000 (17:18 +0200)] 
[3.14] gh-138005: Document that CSV `skipinitialspace=True` and `delimiter=' '` require quotation for empty fields (GH-138006) (#138798)

Co-authored-by: Maurycy Pawłowski-Wieroński <5383+maurycy@users.noreply.github.com>
8 weeks ago[3.14] gh-138081: fix some dead links in InternalDocs (GH-138082) (#138781)
Miss Islington (bot) [Thu, 11 Sep 2025 09:38:14 +0000 (11:38 +0200)] 
[3.14] gh-138081: fix some dead links in InternalDocs (GH-138082) (#138781)

Co-authored-by: yihong <zouzou0208@gmail.com>
8 weeks ago[3.14] gh-138081: Fix/remove incorrect links in `idlelib/HISTORY.txt` (GH-138091...
Miss Islington (bot) [Thu, 11 Sep 2025 09:27:23 +0000 (11:27 +0200)] 
[3.14] gh-138081: Fix/remove incorrect links in `idlelib/HISTORY.txt` (GH-138091) (#138124)

Co-authored-by: Yongzi Li <204532581+Yzi-Li@users.noreply.github.com>
8 weeks ago[3.14] GH-138562: Remove ``sort()`` from the common sequence methods in the data...
Miss Islington (bot) [Thu, 11 Sep 2025 09:23:53 +0000 (11:23 +0200)] 
[3.14] GH-138562: Remove ``sort()`` from the common sequence methods in the data model (GH-138563) (#138760)

Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
8 weeks ago[3.14] Add impl-detail block for PyLong_FromLong docs (GH-126422) (#138694)
Miss Islington (bot) [Thu, 11 Sep 2025 09:23:36 +0000 (11:23 +0200)] 
[3.14] Add impl-detail block for PyLong_FromLong docs (GH-126422) (#138694)

Co-authored-by: Sergey B Kirpichev <skirpichev@gmail.com>
Co-authored-by: Brian Schubert <brianm.schubert@gmail.com>
8 weeks ago[3.14] gh-138644: Update c-api docs of `PyInterpreterState` about PEP-684 (GH-138651...
Miss Islington (bot) [Thu, 11 Sep 2025 09:23:24 +0000 (11:23 +0200)] 
[3.14] gh-138644: Update c-api docs of `PyInterpreterState` about PEP-684 (GH-138651) (#138657)

Co-authored-by: sobolevn <mail@sobolevn.me>
Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
8 weeks ago[3.14] gh-135676: Reword the Operators & Delimiters section(s) (GH-137713) (#138457)
Miss Islington (bot) [Thu, 11 Sep 2025 09:22:56 +0000 (11:22 +0200)] 
[3.14] gh-135676: Reword the Operators & Delimiters section(s) (GH-137713) (#138457)

Co-authored-by: Petr Viktorin <encukou@gmail.com>
Co-authored-by: Blaise Pabon <blaise@gmail.com>
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
8 weeks ago[3.14] gh-138307: Update the Ellipsis documentation (GH-138306) (#138440)
Miss Islington (bot) [Thu, 11 Sep 2025 09:22:37 +0000 (11:22 +0200)] 
[3.14] gh-138307: Update the Ellipsis documentation (GH-138306) (#138440)

Co-authored-by: Adorilson Bezerra <adorilson@gmail.com>
Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
Co-authored-by: Éric <merwok@netwok.org>
Co-authored-by: Ned Batchelder <ned@nedbatchelder.com>
8 weeks ago[3.14] Docs: Fix typo in `shutil.make_archive` example (GH-138188) (#138195)
Miss Islington (bot) [Thu, 11 Sep 2025 09:20:28 +0000 (11:20 +0200)] 
[3.14] Docs: Fix typo in `shutil.make_archive` example (GH-138188) (#138195)

Co-authored-by: Andreas Pelme <andreas@pelme.se>
8 weeks ago[3.14] gh-133125: Clarify ZipInfo.date_time attribute documentation (GH-136082) ...
Miss Islington (bot) [Thu, 11 Sep 2025 09:19:35 +0000 (11:19 +0200)] 
[3.14] gh-133125: Clarify ZipInfo.date_time attribute documentation (GH-136082) (#138077)

Co-authored-by: Kentaro Jay Takahashi <64148935+KentaroJay@users.noreply.github.com>
Co-authored-by: Emma Smith <emma@emmatyping.dev>
8 weeks ago[3.14] Fix typo in `logging` docs (GH-137981) (#137983)
Miss Islington (bot) [Thu, 11 Sep 2025 09:19:05 +0000 (11:19 +0200)] 
[3.14] Fix typo in `logging` docs (GH-137981) (#137983)

Co-authored-by: Maximilian Linhoff <maximilian.linhoff@cta-observatory.org>
8 weeks ago[3.14] [docs] minor, fix grammar in ssl.SSLContect.sslsocket_class docstring (GH...
Miss Islington (bot) [Thu, 11 Sep 2025 09:18:43 +0000 (11:18 +0200)] 
[3.14] [docs] minor, fix grammar in ssl.SSLContect.sslsocket_class docstring (GH-137935) (#137950)

Co-authored-by: PrinceNaroliya <naroliyaprince@gmail.com>
Co-authored-by: Gregory P. Smith <68491+gpshead@users.noreply.github.com>
8 weeks ago[3.14] gh-131885: Use positional-only markers for the ``decimal`` module (GH-131990...
Miss Islington (bot) [Thu, 11 Sep 2025 09:18:17 +0000 (11:18 +0200)] 
[3.14] gh-131885: Use positional-only markers for the ``decimal`` module (GH-131990) (#137902)

Co-authored-by: Semyon Moroz <donbarbos@proton.me>
8 weeks ago[3.14] gh-131591: fix formatting of remote debugger docs (GH-137225) (#137874)
Miss Islington (bot) [Thu, 11 Sep 2025 09:17:46 +0000 (11:17 +0200)] 
[3.14] gh-131591: fix formatting of remote debugger docs (GH-137225) (#137874)

Co-authored-by: Rafael Fontenelle <rffontenelle@users.noreply.github.com>
8 weeks ago[3.14] Mention the "context manager" keyword in concurrent.futures documentation...
Miss Islington (bot) [Thu, 11 Sep 2025 09:17:25 +0000 (11:17 +0200)] 
[3.14] Mention the "context manager" keyword in concurrent.futures documentation (GH-130976) (#137810)

Co-authored-by: Jakub Stasiak <jakub@stasiak.at>
8 weeks ago[3.14] gh-87281: Improve documentation for locale.setlocale() and locale.getlocale...
Miss Islington (bot) [Thu, 11 Sep 2025 09:16:18 +0000 (11:16 +0200)] 
[3.14] gh-87281: Improve documentation for locale.setlocale() and locale.getlocale() (GH-137313) (#137722)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
8 weeks ago[3.14] gh-136672: Docs: Move Enum functions and add examples (GH-136791) (#137688)
Miss Islington (bot) [Thu, 11 Sep 2025 09:15:55 +0000 (11:15 +0200)] 
[3.14] gh-136672: Docs: Move Enum functions and add examples (GH-136791) (#137688)

Co-authored-by: RafaelWO <38643099+RafaelWO@users.noreply.github.com>
Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
8 weeks ago[3.14] gh-125897: Mark range function parameters as positional only (GH-125945) ...
Miss Islington (bot) [Thu, 11 Sep 2025 09:15:24 +0000 (11:15 +0200)] 
[3.14] gh-125897: Mark range function parameters as positional only (GH-125945) (#137652)

Co-authored-by: Konstantin Baikov <konstantin.baikov@gmail.com>
8 weeks ago[3.14] Fix documentation of hash in PyHash_FuncDef (GH-137595) (#137642)
Miss Islington (bot) [Thu, 11 Sep 2025 09:15:06 +0000 (11:15 +0200)] 
[3.14] Fix documentation of hash in PyHash_FuncDef (GH-137595) (#137642)

Co-authored-by: da-woods <dw-git@d-woods.co.uk>
8 weeks ago[3.14] Replace "ordered arguments" with "positional arguments" in `unittest.mock...
Miss Islington (bot) [Thu, 11 Sep 2025 09:14:45 +0000 (11:14 +0200)] 
[3.14] Replace "ordered arguments" with "positional arguments" in `unittest.mock` documentation (GH-137552) (#137553)

Co-authored-by: Tom Forbes <tom@tomforb.es>