Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
e81025e
Post 3.15.0b1
hugovk May 7, 2026
4caee14
[3.15] Forward-port 'check-abi' CI job from 3.14 (GH-149517)
zware May 7, 2026
b311ea8
[3.15] Improve error messages when the WASI SDK can't be found (GH-14…
miss-islington May 7, 2026
5cb915d
[3.15] gh-149481: skip `FOR_ITER` inline specialization for Python `_…
miss-islington May 8, 2026
831dac8
[3.15] gh-146445: Update CODEOWNERS for Android and iOS migration to …
miss-islington May 8, 2026
20e298b
[3.15] docs: Clarify docs for error case of `PyDict_GetItemRef` (GH-1…
miss-islington May 8, 2026
b922b42
[3.15] gh-145176: Update CODEOWNERS for Emscripten migration to Platf…
miss-islington May 8, 2026
f9e5975
[3.15] gh-149459: Fix segfault when `_LOAD_SPECIAL` guard deoptimizes…
miss-islington May 8, 2026
333b7c5
[3.15] Add Diego as author of PEP 831 (GH-149551) (#149561)
miss-islington May 8, 2026
54a187d
[3.15] Skip GNU backtrace test on Arm 32-bit (GH-149493) (#149562)
miss-islington May 8, 2026
0bdbc48
[3.15] Rename fp unwind test module to C stack unwind (GH-149563) (#1…
miss-islington May 8, 2026
bb060b8
[3.15] gh-79638: Test other HTTP error codes besides 403 in test_robo…
miss-islington May 8, 2026
2b1eed4
[3.15] gh-149474: use `Py_fopen` in `Binary{Reader,Writer}` for audit…
miss-islington May 9, 2026
915b6c1
[3.15] gh-149083: Convert `_initial_missing` for pure py `reduce` to …
miss-islington May 9, 2026
dc8c32e
[3.15] gh-149430: Fix edge-cases in `profiling.sampling` outputs (GH-…
miss-islington May 9, 2026
212e996
[3.15] gh-149388: Make asyncio `PipeHandle.close` idempotent (GH-1495…
miss-islington May 9, 2026
f488c7d
[3.15] Fix minor typos in unicode.rst (GH-149587) (#149620)
miss-islington May 9, 2026
6ba3ea4
[3.15] gh-139871: Fix 3.15 bytearray.take_bytes example (GH-149520) (…
miss-islington May 9, 2026
46a54ea
[3.15] gh-148441: Avoid integer overflow in Expat's CharacterDataHand…
miss-islington May 10, 2026
1162834
[3.15] gh-139489: Add is_valid_text to xml.__all__ (GH-149641) (#149652)
miss-islington May 10, 2026
73c80cb
[3.15] gh-149083: use sentinel to fix _functools.reduce() signature (…
miss-islington May 10, 2026
5cf47a2
[3.15] gh-149486: tarfile.data_filter: validate written link target (…
miss-islington May 11, 2026
4277df2
[3.15] gh-146061: Clarify indent=None in json docs (GH-146095) (GH-14…
miss-islington May 11, 2026
592a356
[3.15] gh-149663: fix typo in `unittest` docs (GH-149670) (#149672)
miss-islington May 11, 2026
8fdeb2d
[3.15] gh-144957: Fix lazy imports + module __getattr__ (GH-149624) (…
miss-islington May 11, 2026
b4f2e88
[3.15] gh-112821: Fix rlcompleter failures on objects with descriptor…
miss-islington May 11, 2026
8297d50
[3.15] gh-145235: Make dict watcher API thread-safe for free-threaded…
colesbury May 11, 2026
a8c4208
[3.15] gh-149614 - Restore deepcopiability of argparse.ArgumentParser…
savannahostrowski May 11, 2026
9138bf2
[3.15] gh-148669: Clarify `__reduce__()` module lookup behavior (GH-1…
miss-islington May 12, 2026
45c431a
[3.15] Update mypy to 2.1.0 (GH-149709) (#149711)
miss-islington May 12, 2026
d3b8611
[3.15] gh-149676: Fix hash(frozendict | frozendict) (GH-149675) (#149…
miss-islington May 12, 2026
5f9d0d0
[3.15] Remove myself from CODEOWNERS (GH-149727) (#149732)
miss-islington May 12, 2026
6a66005
[3.15] gh-149694: Fix missing docstring on `asyncio.iscoroutinefuncti…
deadlovelll May 12, 2026
e2e9cea
[3.15] GH-149501: Fix compilation warning in `_YIELD_VALUE` uop (GH-1…
miss-islington May 12, 2026
564902e
[3.15] gh-139808: Add branch protections for aarch64 in asm_trampolin…
miss-islington May 12, 2026
670f982
[3.15] gh-134837: Correct and improve base85 documentation for base64…
miss-islington May 12, 2026
e3fbcc3
[3.15] gh-149496: Fix MacOSTest.test_default regression when BROWSER …
miss-islington May 12, 2026
8b73ce9
[3.15] gh-149718: Aggregate same stack frames in Tachyon in some coll…
miss-islington May 13, 2026
bc20c2b
[3.15] gh-149574: Document that is_typeddict, is_protocol, is_datacla…
miss-islington May 13, 2026
15a597e
[3.15] gh-149642: Fix interaction between exec and lazy_imports=all (…
miss-islington May 13, 2026
4e369c1
[3.15] gh-149701: Fully silence potential `hash -r` error (GH-149702)…
miss-islington May 13, 2026
a5f77a1
[3.15] gh-148829: Add PySentinel_CheckExact() (GH-149725) (#149766)
miss-islington May 13, 2026
37f3deb
[3.15] bpo-45509: Check gzip headers for corrupted fields (GH-29028) …
miss-islington May 13, 2026
1a639b8
[3.15] gh-148821: Add more strict tests for XML encodings (GH-149765)…
miss-islington May 13, 2026
b37e91f
[3.15] Run mypy with four worker processes and uv (GH-149726) (#149773)
miss-islington May 13, 2026
bb7a539
[3.15] gh-149776: Skip UDP Lite tests if it's not supported (GH-14977…
miss-islington May 13, 2026
166c56b
[3.15] gh-148906: fix performance scaling of descriptors on free-thre…
miss-islington May 13, 2026
fb35004
[3.15] gh-128110: Fix rfc2047 whitespace handling in email parser add…
miss-islington May 13, 2026
63a4007
[3.15] gh-149685: Use the _Py prefix for private C macros (GH-149686)…
miss-islington May 13, 2026
b650305
[3.15] gh-140550: Update xxlimited with 3.15 limited API (GH-142827) …
miss-islington May 13, 2026
45fc9ac
[3.15] gh-149504: Fix re-entrancy bug when .pth/.start file invokes s…
warsaw May 13, 2026
dc7cad2
[3.15] gh-149231: tomllib: Limit the number of parts in a key (GH-149…
miss-islington May 13, 2026
894ec10
[3.15] Fix incorrect sentence in stable.rst (GH-149684) (GH-149814)
miss-islington May 13, 2026
b5d508d
[3.15] gh-149698: Update bundled expat to 2.8.1 (GH-149699) (#149812)
miss-islington May 14, 2026
6302a8f
[3.15] gh-148821: Add more tests for invalid XML encodings (GH-149820…
miss-islington May 14, 2026
451f06b
[3.15] Link to existing rules in compound_stmts.rst (GH-149811) (GH-1…
miss-islington May 14, 2026
ff6f921
[3.15] gh-149231: Revert extra NEWS entry (GH-149840)
encukou May 14, 2026
21909e8
[3.15] gh-124111: Update Windows build to use Tcl/Tk 9.0.3 (GH-149842)
miss-islington May 14, 2026
ed27363
[3.15] gh-149144: Use decodeURIComponent() for UTF-8 support in js_ou…
miss-islington May 14, 2026
168a3c8
[3.15] gh-149763: Improve availablity docs in `select.rst` (GH-149764…
miss-islington May 15, 2026
5dadc64
[3.15] gh-87451: Apply CVE-2021-4189 PASV fix to ftplib.ftpcp() (GH-1…
miss-islington May 15, 2026
8d32ae7
[3.15] gh-149707: Fix compiler warning in _ctypes_test on strchr() (#…
vstinner May 15, 2026
cc624f7
[3.15] gh-148675: Use a string for ctypes cparam tag (GH-149778) (#14…
miss-islington May 15, 2026
176d0f5
[3.15] gh-149801: Add IANA registered names and aliases with leading …
miss-islington May 15, 2026
b3819ae
[3.15] gh-149816: Fix race condition in `memoryview` with free-thread…
miss-islington May 15, 2026
a578555
[3.15] gh-138489: Add build-details.json generation to PC/layout (GH-…
miss-islington May 15, 2026
0e2184a
[3.15] gh-149786: Fixes venvlauncher builds on Windows free-threaded …
miss-islington May 15, 2026
6136ad6
[3.15] gh-142349: Add `help("lazy")` support (GH-149886) (#149889)
miss-islington May 15, 2026
ec3aa6a
[3.15] gh-149816: Fix a race condition in `_PyBytes_FromList` with fr…
miss-islington May 16, 2026
bdc44c5
[3.15] gh-149916: Restore the commented out part of test_body_encode …
miss-islington May 17, 2026
42ff9b4
[3.15] gh-149921: Fix reference leaks in _interpchannels and _interpq…
miss-islington May 17, 2026
6e83c55
[3.15] gh-149953: Fix null pointer dereference order in `code_objects…
miss-islington May 18, 2026
34e4005
[3.15] gh-149887: Install python3t.lib for GIL-enabled Windows instal…
miss-islington May 18, 2026
01b07df
[3.15] gh-149816: Fix a RC in `_random.Random.__init__` method (GH-14…
miss-islington May 18, 2026
84ea87c
[3.15] gh-149977: Fix extra output of `-m test test_lazy_import` (GH-…
miss-islington May 18, 2026
16f8ed5
[3.15] gh-95816: Fix TLS version range example in docs (GH-148574) (#…
miss-islington May 18, 2026
c417fca
[3.15] gh-149590: Remove faulthandler_traverse (GH-150023) (#150037)
miss-islington May 18, 2026
66ade28
[3.15] gh-146452: Improve locking granularity in pickle's batch_dict_…
miss-islington May 18, 2026
94c8bac
[3.15] gh-148587: Make sys.lazy_modules match PEP and keep internal l…
DinoV May 19, 2026
0b92f01
[3.15] gh-149816: fix thread safety of deletion of list slice (GH-149…
miss-islington May 19, 2026
d36e080
[3.15] gh-149816: fix `dict.clear()` race on split-table dict with no…
miss-islington May 19, 2026
28f275f
[3.15] gh-86533: Restore os.makedirs() ability to apply *mode* recurs…
miss-islington May 19, 2026
65b2554
[3.15] gh-146581: Update docs for dangerous filenames in ZIP files (G…
miss-islington May 19, 2026
bec4336
[3.15] gh-69619: Clarify whitespace definition in str.strip docs (#15…
miss-islington May 19, 2026
88198ec
fix(150075): adding tarinfo offset info before and after reading the …
grantlouisherman May 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 11 additions & 15 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -156,16 +156,15 @@ Misc/libabigail.abignore @encukou
# ----------------------------------------------------------------------------

# Android
Android/ @mhsmith @freakboy3742
Platforms/Android/ @mhsmith @freakboy3742
Doc/using/android.rst @mhsmith @freakboy3742
Lib/_android_support.py @mhsmith @freakboy3742
Lib/test/test_android.py @mhsmith @freakboy3742

# iOS
Doc/using/ios.rst @freakboy3742
Lib/_ios_support.py @freakboy3742
Apple/ @freakboy3742
iOS/ @freakboy3742
Platforms/Apple/ @freakboy3742

# macOS
Mac/ @python/macos-team
Expand All @@ -176,8 +175,8 @@ Lib/test/test__osx_support.py @python/macos-team
Tools/wasm/README.md @brettcannon @freakboy3742 @emmatyping

# WebAssembly (Emscripten)
Tools/wasm/config.site-wasm32-emscripten @freakboy3742 @emmatyping
Tools/wasm/emscripten @freakboy3742 @emmatyping
Platforms/emscripten @freakboy3742 @emmatyping
Tools/wasm/emscripten @freakboy3742 @emmatyping

# WebAssembly (WASI)
Platforms/WASI @brettcannon @emmatyping @savannahostrowski
Expand Down Expand Up @@ -574,9 +573,9 @@ Lib/shutil.py @giampaolo
Lib/test/test_shutil.py @giampaolo

# Site
Lib/site.py @FFY00
Lib/test/test_site.py @FFY00
Doc/library/site.rst @FFY00
Lib/site.py @FFY00 @warsaw
Lib/test/test_site.py @FFY00 @warsaw
Doc/library/site.rst @FFY00 @warsaw

# string.templatelib
Doc/library/string.templatelib.rst @lysnikolaou @AA-Turner
Expand All @@ -587,10 +586,10 @@ Lib/test/test_string/test_templatelib.py @lysnikolaou @AA-Turner
**/*sysconfig* @FFY00

# SQLite 3
Doc/library/sqlite3.rst @berkerpeksag @erlend-aasland
Lib/sqlite3/ @berkerpeksag @erlend-aasland
Lib/test/test_sqlite3/ @berkerpeksag @erlend-aasland
Modules/_sqlite/ @berkerpeksag @erlend-aasland
Doc/library/sqlite3.rst @erlend-aasland
Lib/sqlite3/ @erlend-aasland
Lib/test/test_sqlite3/ @erlend-aasland
Modules/_sqlite/ @erlend-aasland

# Subprocess
Lib/subprocess.py @gpshead
Expand Down Expand Up @@ -623,9 +622,6 @@ Modules/_typesmodule.c @AA-Turner
Lib/unittest/mock.py @cjw296
Lib/test/test_unittest/testmock/ @cjw296

# Urllib
**/*robotparser* @berkerpeksag

# Venv
**/*venv* @vsajip @FFY00

Expand Down
47 changes: 47 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,53 @@ jobs:
if: fromJSON(needs.build-context.outputs.run-docs)
uses: ./.github/workflows/reusable-docs.yml

check-abi:
name: 'Check if the ABI has changed'
runs-on: ubuntu-22.04 # 24.04 causes spurious errors
needs: build-context
if: needs.build-context.outputs.run-tests == 'true'
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: '3.x'
- name: Install dependencies
run: |
sudo ./.github/workflows/posix-deps-apt.sh
sudo apt-get install -yq --no-install-recommends abigail-tools
- name: Build CPython
env:
CFLAGS: -g3 -O0
run: |
# Build Python with the libpython dynamic library
./configure --enable-shared
make -j4
- name: Check for changes in the ABI
id: check
run: |
if ! make check-abidump; then
echo "Generated ABI file is not up to date."
echo "Please add the release manager of this branch as a reviewer of this PR."
echo ""
echo "The up to date ABI file should be attached to this build as an artifact."
echo ""
echo "To learn more about this check: https://devguide.python.org/getting-started/setup-building/index.html#regenerate-the-abi-dump"
echo ""
exit 1
fi
- name: Generate updated ABI files
if: ${{ failure() && steps.check.conclusion == 'failure' }}
run: |
make regen-abidump
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
name: Publish updated ABI files
if: ${{ failure() && steps.check.conclusion == 'failure' }}
with:
name: abi-data
path: ./Doc/data/*.abi

check-autoconf-regen:
name: 'Check if Autoconf files are up to date'
# Don't use ubuntu-latest but a specific version to make the job
Expand Down
11 changes: 5 additions & 6 deletions .github/workflows/mypy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,11 @@ jobs:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
with:
python-version: "3.15"
allow-prereleases: true
cache: pip
cache-dependency-path: Tools/requirements-dev.txt
- run: pip install -r Tools/requirements-dev.txt
activate-environment: true
cache-dependency-glob: Tools/requirements-dev.txt
- run: uv pip install -r Tools/requirements-dev.txt
- run: python3 Misc/mypy/make_symlinks.py --symlink
- run: mypy --config-file ${{ matrix.target }}/mypy.ini
- run: mypy --num-workers 4 --config-file ${{ matrix.target }}/mypy.ini
4 changes: 0 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,3 @@ Python/frozen_modules/MANIFEST
# People's custom https://docs.anthropic.com/en/docs/claude-code/memory configs.
/.claude/
CLAUDE.local.md

#### main branch only stuff below this line, things to backport go above. ####
# main branch only: ABI files are not checked/maintained.
Doc/data/python*.abi
2 changes: 1 addition & 1 deletion Doc/c-api/dict.rst
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ Dictionary objects
* If the key is present, set *\*result* to a new :term:`strong reference`
to the value and return ``1``.
* If the key is missing, set *\*result* to ``NULL`` and return ``0``.
* On error, raise an exception and return ``-1``.
* On error, raise an exception, set *\*result* to ``NULL`` and return ``-1``.

The first argument can be a :class:`dict` or a :class:`frozendict`.

Expand Down
16 changes: 14 additions & 2 deletions Doc/c-api/sentinel.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,20 @@ Sentinel objects

.. c:function:: int PySentinel_Check(PyObject *o)

Return true if *o* is a :class:`sentinel` object. The :class:`sentinel` type
does not allow subclasses, so this check is exact.
Return true if *o* is a :class:`sentinel` object or a subtype.
The :class:`sentinel` type does not currently allow subclasses,
so this check is exact.
Future Python versions may choose to allow subtyping.
This function always succeeds.

.. versionadded:: 3.15

.. c:function:: int PySentinel_CheckExact(PyObject *o)

Return true if *o* is a :class:`sentinel` object, but not a subtype.
The :class:`sentinel` type does not currently allow subclasses.
Future Python versions may choose to allow subtyping.
This function always succeeds.

.. versionadded:: 3.15

Expand Down
2 changes: 1 addition & 1 deletion Doc/c-api/stable.rst
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ versions of Python.

All functions in Stable ABI are present as functions in Python's shared
library, not solely as macros.
This makes them usable are usable from languages that don't use the C
This makes them usable in languages that don't use the C
preprocessor, including Python's :py:mod:`ctypes`.


Expand Down
6 changes: 3 additions & 3 deletions Doc/c-api/unicode.rst
Original file line number Diff line number Diff line change
Expand Up @@ -762,7 +762,7 @@ APIs:
The string must not have been “used” yet.
See :c:func:`PyUnicode_New` for details.

Return the number of written character, or return ``-1`` and raise an
Return the number of written characters, or return ``-1`` and raise an
exception on error.

.. versionadded:: 3.3
Expand Down Expand Up @@ -1174,7 +1174,7 @@ These are the UTF-8 codec APIs:
.. versionadded:: 3.3

.. versionchanged:: 3.7
The return type is now ``const char *`` rather of ``char *``.
The return type is now ``const char *`` rather than ``char *``.

.. versionchanged:: 3.10
This function is a part of the :ref:`limited API <limited-c-api>`.
Expand All @@ -1196,7 +1196,7 @@ These are the UTF-8 codec APIs:
.. versionadded:: 3.3

.. versionchanged:: 3.7
The return type is now ``const char *`` rather of ``char *``.
The return type is now ``const char *`` rather than ``char *``.


UTF-32 Codecs
Expand Down
Loading