Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
222 commits
Select commit Hold shift + click to select a range
a104f8a
Adapt @hugovk's proof-of-concept CI definition refactor
WillChilds-Klein Jul 14, 2025
3fcbe0d
Preliminary refactor of multissltests.py, TODO migrate to classes
WillChilds-Klein Jul 14, 2025
5d8ec9a
Fix aws-lc/awslc lib name discrepancy
WillChilds-Klein Jul 14, 2025
991c6b2
Migrate AbstractBuilder to abc
WillChilds-Klein Jul 14, 2025
7b51499
Fix imports
WillChilds-Klein Jul 14, 2025
6638127
Complete ABC refactor
WillChilds-Klein Jul 16, 2025
4e0a8ca
Colorize parser
WillChilds-Klein Jul 16, 2025
1a90e0c
Adjust compatibility comment
WillChilds-Klein Jul 16, 2025
1fcb49f
📜🤖 Added by blurb_it.
blurb-it[bot] Jul 16, 2025
dd969fb
Revert "📜🤖 Added by blurb_it."
WillChilds-Klein Jul 16, 2025
1edce1c
Merge branch 'main' into refactor-ssl-tests
WillChilds-Klein Jul 16, 2025
3343120
Include old versions when using default versions
WillChilds-Klein Jul 16, 2025
6536fab
gh-130796: Undeprecate locale.getdefaultlocale() (#143069)
vstinner Dec 23, 2025
f783cc3
Update pre-commit with zizmor and Ruff fixes (#143095)
hugovk Dec 23, 2025
c8b80f5
gh-134584: Add another contributor to whats new 3.15 (GH-143107)
Fidget-Spinner Dec 23, 2025
25c294b
gh-134584: Eliminate redundant refcounting from `_CALL_TYPE_1` (GH-13…
tomasr8 Dec 23, 2025
20aeb3a
GH-143026: Fix assertion error in executor management. (GH-143104)
markshannon Dec 23, 2025
450e836
JIT: don't leak shim memory when shutting down the interpreter (#142984)
diegorusso Dec 23, 2025
c2202a7
gh-109263: Start process from spawn context in multiprocessing no lon…
aisk Dec 23, 2025
cbe0cb7
gh-143100: Add temporary suppression for set_swap_bodies (gh-143114)
colesbury Dec 23, 2025
cc48bf0
gh-134584: Eliminate redundant refcounting from `_BINARY_OP_SUBSCR_TU…
cocolato Dec 23, 2025
50ecd6b
gh-143108: Don't instrument faulthandler.c for TSan (#143109)
colesbury Dec 24, 2025
fc2f0fe
JIT: Move executor to a register (#143072)
diegorusso Dec 24, 2025
9af7a20
gh-136186: Fix flaky tests in test_external_inspection (#143110)
pablogsal Dec 24, 2025
57937a8
gh-142145: Avoid timing measurements in quadratic behavior test (gh-1…
colesbury Dec 24, 2025
4ee6929
gh-143121: Skip test that leak threads under TSan (gh-143125)
colesbury Dec 24, 2025
e8e044e
gh-143100: Fix memcpy data race in setobject.c (gh-143127)
colesbury Dec 24, 2025
d4dc3dd
gh-138122: Replace --interval with --sampling-rate (#143085)
lkollar Dec 24, 2025
1e17ccd
Correctly fold unknown-8bit originating from encoded words. (#142517)
bitdancer Dec 24, 2025
7c44f37
gh-138122: Extend binary profiling format with full source location a…
pablogsal Dec 24, 2025
84b7e69
gh-140717: Add `exc_text` to LogRecord attributes table (GH-140718)
tjkuson Dec 24, 2025
3509fa5
gh-143135: Fix sys.flags.inspect when PYTHONINSPECT=0 (GH-143136)
StanFromIreland Dec 24, 2025
7342890
gh-142517: Fix typo in news item. (#143150)
bitdancer Dec 24, 2025
305aff0
Move News for gh-142560 to Core and Builtins (GH-143154)
cmaloney Dec 24, 2025
594a463
gh-120321: Fix TSan reported races on gi_frame_state (gh-143128)
colesbury Dec 24, 2025
cf6758f
gh-143092: Make CALL_LIST_APPEND and BINARY_OP_INPLACE_ADD_UNICODE no…
Fidget-Spinner Dec 24, 2025
86d9045
gh-143004: Fix possible use-after-free in collections.Counter.update(…
Kaushalt2004 Dec 25, 2025
8d46f96
gh-143103: Added pad parameter to base64.z85encode() (GH-143106)
haukex Dec 25, 2025
579c5b4
gh-143145: Fix possible reference leak in ctypes _build_result() (GH-…
hyongtao-code Dec 25, 2025
8611f74
gh-142975: During GC, mark frozen objects with a merged zero refcount…
ZeroIntensity Dec 25, 2025
b9a4806
gh-143164: Fix incorrect error message for ctypes bitfield overflow (…
hyongtao-code Dec 25, 2025
59ede34
gh-138122: Convert GIL/GC/exception stats from tiles to progress bars…
ivonastojanovic Dec 25, 2025
ea3fd78
gh-142927: Tachyon: Fix contrast ratio in top panel (#142936)
hugovk Dec 25, 2025
888d101
gh-138122: Remove default duration for statistical profiling (#143174)
lkollar Dec 25, 2025
de22e71
Remove redundant pycore_optimizer.h includes (#143184)
hyongtao-code Dec 26, 2025
d3d4cf9
gh-140739: Fix crashes from corrupted remote memory (#143190)
pablogsal Dec 26, 2025
b3f2d80
gh-134584: Eliminate redundant refcounting from `_COMPARE_OP_X` (GH-1…
cocolato Dec 26, 2025
a1c6308
gh-134584: Eliminate redundant refcounting from `IS_OP` (GH-143171)
cocolato Dec 26, 2025
9d92ac1
gh-143040: Exit taychon live mode gracefully and display profiled scr…
mgmacias95 Dec 27, 2025
5436289
gh-140739: Fix missing exception on allocation failure in BinaryWrite…
pablogsal Dec 27, 2025
5d1e78f
gh-143181: Fix 'overriden' -> 'overridden' in c-api/module.rst (#143182)
duane9 Dec 27, 2025
57d5699
Fix typos in docs (#143193)
syan212 Dec 27, 2025
1af21ea
gh-63016: Add flags parameter on mmap.flush (#139553)
aisk Dec 27, 2025
f5e11fa
no-issue: Fix override value in os.rst (gh-123522)
rffontenelle Dec 27, 2025
9976c2b
gh-143195: fix UAF in `{bytearray,memoryview}.hex(sep)` via re-entran…
picnixz Dec 27, 2025
7726119
gh-138122: fix AC warnings in `Modules/_remote_debugging/module.c` (#…
picnixz Dec 27, 2025
00e24b8
gh-142664: fix UAF in `memoryview.__hash__` via re-entrant data's `__…
picnixz Dec 27, 2025
3a728e5
gh-131591: Do not free page caches that weren't allocated (#143205)
pablogsal Dec 27, 2025
84fcdbd
gh-142664: fix `PyObject_Hash` invokation post GH-143217 (#143223)
picnixz Dec 27, 2025
61ee048
gh-142557: fix UAF in `bytearray.__mod__` when object is mutated whil…
picnixz Dec 27, 2025
23abbf1
gh-139922: Link to results in MSVC tail calling in What's New 3.15 (G…
Fidget-Spinner Dec 28, 2025
5225635
gh-143003: Fix possible shared buffer overflow in bytearray.extend() …
serhiy-storchaka Dec 28, 2025
836b281
gh-136186: Fix more flaky tests in test_external_inspection (#143235)
pablogsal Dec 28, 2025
3ccc76f
gh-143228: Fix UAF in perf trampoline during finalization (#143233)
pablogsal Dec 28, 2025
3ca1f2a
gh-143241: Fix infinite loop in `zoneinfo._common.load_data` (#143243)
fatihhcelik Dec 28, 2025
c3bfe5d
gh-63016: fix failing `mmap.flush` tests on FreeBSD (#143230)
aisk Dec 28, 2025
fa9a425
gh-142195: Fixed Popen.communicate indefinite loops (GH-143203)
prithviraj-chaudhuri Dec 28, 2025
0efbad6
gh-142994, gh-142996: document missing async generator and coroutine …
fatelei Dec 28, 2025
c3febba
gh-140870: Full coverage for _pyrepl._module_completer (#143244)
loic-simon Dec 28, 2025
713684d
gh-131798: Remove bounds check when indexing into tuples with a const…
tomasr8 Dec 28, 2025
daa9aa4
gh-143183: Rewind stop tracing to previous target (GH-143187)
Fidget-Spinner Dec 28, 2025
f37f57d
gh-131421: Fix ASDL kw_defaults being `expr*` instead of `expr?*` (GH…
Demonstrandum Dec 29, 2025
6cb245d
gh-143183: Link trace to side exits, rather than stop (GH-143268)
Fidget-Spinner Dec 29, 2025
b6b0e14
gh-143200: fix UAFs in `Element.__{set,get}item__` when the element i…
picnixz Dec 29, 2025
79c03ac
gh-69686: Remove untrue part of `__import__` replacement docs (#143261)
Sachaa-Thanasius Dec 30, 2025
ef834de
gh-128546: Document that getaddrinfo() can return raw data (#128547)
srittau Dec 30, 2025
23ad9c5
gh-142939: difflib.get_close_matches performance (#142940)
dg-pb Dec 30, 2025
0aedf2f
gh-143284: Temporarily install Sphinx<9 to fix Chinese search (#143286)
hugovk Dec 30, 2025
7e3a5a7
gh-130167: Add a What's New entry for changes to ``textwrap.{de,in}de…
AA-Turner Dec 30, 2025
aa8a43d
gh-143237: Fix support of named pipes in the rotating logging handler…
serhiy-storchaka Dec 30, 2025
04899b8
gh-115634: document ProcessPoolExecutor max_tasks_per_child bug (GH-1…
gpshead Dec 30, 2025
469fe33
gh-143121: Avoid thread leak in configure (gh-143122)
colesbury Dec 31, 2025
96ab379
gh-140795: Keep 'err' in local variable in _ssl.c (gh-143275)
colesbury Dec 31, 2025
3c4429f
gh-135852: Remove out of tree pywin32 dependency for NTEventLogHandle…
aisk Dec 31, 2025
c521597
gh-140920: remove incorrect mentions to `concurrent.futures.interpret…
Lakshya-Upadhyaya Dec 31, 2025
7f6c16a
gh-142830: prevent some crashes when mutating `sqlite3` callbacks (#1…
picnixz Jan 1, 2026
2d9f4e3
gh-143048: Remove outdated mention to `curses` in the "Interactive Mo…
johnslavik Jan 1, 2026
422ca07
Amend NEWS entries for PRs GH-139553 and GH-142790 (#143329)
picnixz Jan 1, 2026
1fb8e0e
gh-134584: Eliminate redundant refcounting from _CALL{_BUILTIN_O, _ME…
corona10 Jan 1, 2026
d00d39f
gh-134584: Eliminate redundant refcounting from `_LOAD_ATTR_SLOT` (GH…
Zheaoli Jan 1, 2026
faa2604
gh-134584: Fix _CALL_BUILTIN_O test to reflect real-world usage (GH-…
Fidget-Spinner Jan 1, 2026
5d13335
gh-142927: Auto-open HTML output in browser after generation (#143178)
ivonastojanovic Jan 1, 2026
513ae17
gh-142927: Fix heatmap caller navigation for interior lines (#143180)
pablogsal Jan 1, 2026
e5ad7b7
gh-138122: Integrate live profiler TUI with _colorize theming system …
pablogsal Jan 1, 2026
6b9a6c6
gh-138122: Move local imports to module level in sampling profiler (#…
pablogsal Jan 2, 2026
61fc72a
gh-124951: Optimize base64 encode & decode for an easy 2-3x speedup […
gpshead Jan 2, 2026
9712dc1
gh-143310: fix crash in Tcl object conversion with concurrent mutatio…
picnixz Jan 2, 2026
18f3c59
Update docstrings of `typing.Hashable`, `typing.List`, etc., to refle…
AlexWaygood Jan 2, 2026
315f474
gh-139757: Add _GUARD_NOS_COMPACT_ASCII for compact ascii optimizatio…
corona10 Jan 2, 2026
09ce592
gh-142927: Hide _sync_coordinator frames from profiler output (#143337)
pablogsal Jan 2, 2026
8a2deea
gh-128067: Fix pyrepl overriding printed output without newlines (#13…
JanEricNitschke Jan 2, 2026
61f2ad9
gh-139757: Fix unintended bytecode specialization for non-ascii strin…
corona10 Jan 2, 2026
08a17ed
gh-128067: In test_pyrepl, discover escape sequences from terminfo in…
ambv Jan 2, 2026
864c598
gh-143148: Replace pre-commit with prek in CI (#143149)
juhannc Jan 2, 2026
ef6f92a
gh-139262: Prevent swallowing REPL input on Windows (GH-139263)
chris-eibl Jan 2, 2026
0417dab
gh-138897: Use `_pyrepl.pager` for `_sitebuiltins._Printer` (GH-138898)
StanFromIreland Jan 2, 2026
9825832
no-issue: Fix optimizer_generator.py to print abstract_uop_name prope…
corona10 Jan 2, 2026
f7a03bb
gh-134584: JIT: Remove redundant refcount from STORE_FAST (GH-143336)
Fidget-Spinner Jan 2, 2026
136f6d8
gh-76187: Document the `c` typecode for `multiprocessing.Array`. (#13…
tomasr8 Jan 2, 2026
b538c28
gh-143361: Pass PY_VECTORCALL_ARGUMENTS_OFFSET in _Py_CallBuiltinClas…
a12k Jan 2, 2026
abdbe0b
gh-142615: disallow multiple initializations of `asyncio.Task` and `a…
kumaraditya303 Jan 3, 2026
e7c542d
gh-140648: Make asyncio REPL respect the `-I` flag (isolated mode) (#…
johnslavik Jan 3, 2026
6d05e55
Fix dunder name typo in compiler code comment (#143374)
johnslavik Jan 3, 2026
2c39b9d
gh-136924: Suspend REPL colorizing when in a REPL interactive command…
olgarithms Jan 3, 2026
27434c6
gh-138122: Skip threads on EPERM in blocking mode profiler (GH-143368)
pablogsal Jan 3, 2026
3c56f9e
gh-143001: Add @cpython_only to test_threading.ThreadTests.test_PyThr…
youknowone Jan 3, 2026
12283f6
gh-141504: Factor out tracing and optimization heuristics into a sing…
corona10 Jan 3, 2026
ef3b882
gh-142927: Clarify pstats file output in docs and CLI (#143388)
lkollar Jan 3, 2026
6c53af1
gh-143308: fix UAF when PickleBuffer is concurrently mutated in a cal…
a12k Jan 3, 2026
9609574
gh-143309: fix UAF in `os.execve` when the environment is concurrentl…
picnixz Jan 3, 2026
6116d70
gh-143403: Fix a UAF in `_BINARY_OP_INPLACE_ADD_UNICODE` (GH-143404)
Fidget-Spinner Jan 4, 2026
e6bfe4d
gh-139757: Add BINARY_OP_SUBSCR_USTR_INT (GH-143389)
chris-eibl Jan 4, 2026
c99f766
gh-143309: fix `test_execve_env_concurrent_mutation_with_fspath_posix…
picnixz Jan 4, 2026
68fcb95
gh-143082: Make readline work when sys.stdin is explicitly passed to …
zelosleone Jan 5, 2026
bfac54d
gh-69605: Check for already imported modules in PyREPL module complet…
loic-simon Jan 5, 2026
4f9a8d0
gh-69605: In test_pyrepl.test_already_imported*, invalidate FS import…
ambv Jan 5, 2026
1569275
gh-138205: explicit mention to `mmap.mmap.resize` in "Porting to Pyth…
salty-horse Jan 5, 2026
240a6c3
gh-143434: Fix typo in zstd documentation (#143437)
RitamPal26 Jan 5, 2026
7a572d9
gh-143108: Don't instrument some faulthandler related functions for T…
colesbury Jan 5, 2026
04ace41
gh-143394: filter for turning off automatic margins in test_no_newlin…
chris-eibl Jan 5, 2026
12d363b
gh-134740: Document distribution discovery in importlib.metadata (#13…
emmatyping Jan 6, 2026
d6f77e6
gh-116738: make entering of `contextvars.Context` thread safe (#143074)
kumaraditya303 Jan 6, 2026
4d21297
gh-41779: Allow defining any __slots__ for a class derived from tuple…
serhiy-storchaka Jan 6, 2026
7dae107
gh-143394: On macOS, run main PyREPL tests as "Apple Terminal" as wel…
ambv Jan 6, 2026
efb4e6c
Allow Android to fail CI (GH-143471)
hugovk Jan 6, 2026
dd750b3
gh-143331: Schedule to remove format "N" for Decimal (#143372)
donbarbos Jan 6, 2026
71119a1
gh-129824: Fix data race in _PyBuiltins_AddExceptions with subinterpr…
colesbury Jan 6, 2026
d745b60
gh-143474: Add `os.RWF_ATOMIC` constant (GH-143475)
claydugo Jan 6, 2026
841b748
gh-143424: Fix assertion in _PyMutex_LockTimed (gh-143439)
colesbury Jan 6, 2026
d9c1235
gh-139038: Add macOS performance numbers for the JIT (GH-143479)
Fidget-Spinner Jan 6, 2026
54f1ed0
gh-134584: Eliminate redundant refcounting in TO_BOOL_ALWAYS_TRUE (GH…
reidenong Jan 6, 2026
05406b2
gh-142991: socketmodule: fixed getsockaddrlen() for PF_DIVERT socket …
glebius Jan 6, 2026
faa3dc7
gh-143469: enable `LOAD_ATTR_MODULE` specialization even if `__getatt…
kumaraditya303 Jan 6, 2026
90c44bc
gh-131798: Support generator frames in the JIT optimizer (GH-143340)
Fidget-Spinner Jan 6, 2026
7b0a372
gh-106318: Add examples for str.isprintable() (#140043)
adorilson Jan 6, 2026
8735daf
gh-75572: Forward-port test_xpickle from Python 2 to 3 (GH-22452)
Fidget-Spinner Jan 6, 2026
e79c9b7
gh-142302: Fix mkstemp() documentation: clarify file descriptor inher…
raixyzaditya Jan 6, 2026
74bb3ca
gh-142863: optimize `list` and `set` calls with generator expressions…
kumaraditya303 Jan 6, 2026
51227b6
Doc: Fix missing closing parenthesis in argparse example (#143488)
yuanx749 Jan 6, 2026
ff7d1ce
gh-133315: Document that compat32 should not be used with MIMEPart/Em…
hrimov Jan 6, 2026
df35534
gh-142982: Specialize CALL_FUNCTION_EX (GH-143391)
Fidget-Spinner Jan 6, 2026
98e55d7
gh-132070: Fix PyObject_Realloc thread-safety in free threaded Python…
colesbury Jan 6, 2026
0a5c04a
gh-134584: Eliminate redundant refcounting from `TO_BOOL_STR` (GH-143…
Zheaoli Jan 6, 2026
4fb6a31
gh-106318: Add example for str.index() (#137023)
adorilson Jan 6, 2026
b866a1c
gh-75572: Fix test_xpickle and disable it by default (GH-143503)
serhiy-storchaka Jan 6, 2026
8565ddd
gh-141671: PyMODINIT_FUNC: apply `__declspec(dllexport)` on Windows (…
encukou Jan 7, 2026
a1eedae
gh-94172: delete mention of ssl_version from ftplib doc (#143515)
giampaolo Jan 7, 2026
b3e4a34
gh-138568: Make `help` mode in PyREPL not exit on empty line input (#…
ambv Jan 7, 2026
b2827de
gh-141536: Fix a crash when running test_capi *after* test_code in th…
Yhg1s Jan 7, 2026
51a56a3
gh-106318: Add examples for str.casefold() and str.lower() methods (#…
adorilson Jan 7, 2026
d043949
gh-117657: Remove remaining TSan suppressions (gh-143499)
colesbury Jan 7, 2026
9a3263f
GH-142950: Process format specifiers before colourization in argparse…
savannahostrowski Jan 7, 2026
bfc3d8d
gh-143531: Use macro to check if PEP 523 is hooked (#143532)
DinoV Jan 7, 2026
228d955
Fix a typo in STORE_SLICE docs (#143500)
tomasr8 Jan 7, 2026
f11f5eb
gh-129824: Fix data race on `runtime->gilstate.check_enabled` (gh-143…
colesbury Jan 7, 2026
67d3d03
gh-143089: Fix ParamSpec default examples to use list instead of tupl…
VanshAgarwal24036 Jan 8, 2026
6c9f7b4
gh-143517: Fix an edge case in rewriting stringified starred annotati…
johnslavik Jan 8, 2026
c07e5ec
gh-143553: Add support for parametrized resources in regrtests (GH-14…
serhiy-storchaka Jan 8, 2026
f3e069a
gh-140025: Fix `queue.SimpleQueue.__sizeof__()` to return correct siz…
Aniketsy Jan 8, 2026
efaa56f
gh-143528: Fix test_time.test_thread_time() (#143558)
vstinner Jan 8, 2026
5462002
gh-143513: Clarify changed argument name of `ResourceReader.is_resour…
moreati Jan 8, 2026
49c3b0a
gh-142095: Use thread local frame info in `py-bt` and `py-bt-full` wh…
colesbury Jan 8, 2026
8cf5c4d
gh-142908: Don't use `DK_IS_UNICODE` in interpreter (gh-142909)
colesbury Jan 8, 2026
cea2d24
gh-143445: Optimize deepcopy for 1.04x speedup (#143449)
heikkitoivonen Jan 8, 2026
aeb3403
gh-143421: Move `JitOptContext` from stack allocation to per-thread h…
cocolato Jan 8, 2026
e2f15ae
gh-120321: Make gen.gi_frame.clear() thread-safe (gh-143112)
colesbury Jan 8, 2026
b54a1d2
Add Emscripten test skips for recently added tests. (#143551)
freakboy3742 Jan 8, 2026
dfeefbe
GH-139686: Revert "gh-139686: Make reloading a lazy module no-op (GH-…
brettcannon Jan 8, 2026
68a01f9
GH-43374: Fix urlretrieve reporthook to report actual bytes read (#14…
savannahostrowski Jan 9, 2026
af9f783
gh-106318: Add examples for str.replace() method (GH-143581)
adorilson Jan 9, 2026
fd6d41b
Test: remove unintended unittest.main() in live collector tests (#143…
hyongtao-code Jan 9, 2026
234a15d
gh-141004: Improve `make check-c-api-docs` (GH-143564)
encukou Jan 9, 2026
dcdb23f
gh-143429: Use compile-time NaN encoding detection for test_struct (#…
chenx97 Jan 9, 2026
6d54b6a
gh-143378: Fix use-after-free when BytesIO is concurrently mutated du…
superboy-zjc Jan 9, 2026
39a2bcf
gh-143547: Fix PyErr_FormatUnraisable() fallback (#143557)
vstinner Jan 9, 2026
a9ca49d
gh-72239: Add note distinguishing concurrent.futures.Future from asyn…
aisk Jan 9, 2026
a4086d7
gh-142829: Fix use-after-free in `Context.__eq__` via re-entrant `Con…
Abdoulrasheed Jan 9, 2026
ba10100
gh-143191: Use _PyOS_MIN_STACK_SIZE in _thread.stack_size() (#143601)
vstinner Jan 9, 2026
6d6c7ed
gh-106318: Improve str.removeprefix() and str.removesuffix() docs (#…
adorilson Jan 9, 2026
c696f33
gh-106318: Add examples for str.rfind() method (#143582)
adorilson Jan 9, 2026
61e0366
gh-143460: Skip infinite recusion tests for infinite stack size (#143…
Thyre Jan 9, 2026
b852236
gh-143421: Lazily allocate tracer code and opt buffers (GH-143597)
Fidget-Spinner Jan 9, 2026
66bca38
gh-143006: Fix and optimize mixed comparison of float and int (GH-143…
serhiy-storchaka Jan 9, 2026
499d3a8
gh-136438: Make sure `test_interpreters` pass with all optimization l…
donbarbos Jan 9, 2026
1932127
gh-141004: Document remaining constants from patchlevel.h (GH-143598)
encukou Jan 9, 2026
e0fb278
gh-143421: Allocate all JIT state in one go (GH-143626)
Fidget-Spinner Jan 9, 2026
9525911
gh-142764: Restore REPLACE_OPCODE_IF_EVALUATES_PURE optimization for …
Fidget-Spinner Jan 9, 2026
78e868f
gh-143586: Add Counter comparison tests to enforce missing element se…
heikkitoivonen Jan 10, 2026
e7f5ffa
gh-143641: Make `ready_to_import` always remove tempdir from `sys.pat…
youknowone Jan 10, 2026
e2f0160
gh-143604: Hold strong reference to executor during JIT tracing (GH-1…
Zheaoli Jan 10, 2026
ce6bae9
gh-143377: fix crashes in `_interpreters.capture_exception` (#143418)
picnixz Jan 10, 2026
aa8578d
Doc: remove duplicate GitHub issue reference in "What's New in Python…
emmanuel-stone Jan 10, 2026
718c15f
Add derangements() recipe (gh-143671)
rhettinger Jan 11, 2026
75d73c3
Sync the batched() example with the grouper() example. (gh-143676)
rhettinger Jan 11, 2026
03e6457
Remove outdated comment about `excess_args` warning in `object.__init…
manueljacob Jan 11, 2026
d1282ef
gh-143638: Forbid cuncurrent use of the Pickler and Unpickler objects…
serhiy-storchaka Jan 11, 2026
515ae40
gh-78724: Raise RuntimeError's when calling methods on non-ready Stru…
skirpichev Jan 11, 2026
e22b685
gh-86139: Correct NamedTuple and TypedDict's type in typing.rst (#143…
aisk Jan 11, 2026
23b9377
gh-143420: Clarify sequence behavior for slice indexes (#143422)
skirpichev Jan 11, 2026
9633f95
gh-139038: Update JIT perf figures for 3.14a4 (GH-143705)
Fidget-Spinner Jan 11, 2026
620a5b9
gh-127750: Fix annotations in singledispatchmethod signature tests (G…
johnslavik Jan 11, 2026
265381b
gh-128335: Make slice generic at runtime (#128336)
Gobot1234 Jan 11, 2026
9d13ca9
gh-142972: Document arbitrary ordering in `Path.glob` and `Path.rglob…
johnslavik Jan 11, 2026
548526b
gh-134584: JIT: Remove redundant refcounting for UNARY_{INVERT|NEGATI…
Fidget-Spinner Jan 11, 2026
5f28aa2
gh-143346: Fix calculation of the line width for wrapped Base64 in pl…
serhiy-storchaka Jan 12, 2026
dbd10a6
gh-142881: Fix concurrent and reentrant call of atexit.unregister() (…
serhiy-storchaka Jan 12, 2026
f3759d2
gh-142306: Improve errors for Element.remove() (GH-142308)
serhiy-storchaka Jan 12, 2026
bd83a57
gh-143578: Restore note about patchlevel.h (#143596)
encukou Jan 12, 2026
43c7658
gh-143189: fix insertdict() for non-Unicode key (#143285)
methane Jan 12, 2026
7f50a5f
gh-140806: add docs for `enum.bin` function (#140807)
guoci Jan 12, 2026
82f1154
Merge remote-tracking branch 'upstream/main' into 3.15-refactor-ssl-t…
hugovk Jan 16, 2026
66414c3
Apply suggestions from code review
hugovk Jan 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
134 changes: 41 additions & 93 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -243,78 +243,32 @@ jobs:
free-threading: ${{ matrix.free-threading }}
os: ${{ matrix.os }}

build-ubuntu-ssltests-openssl:
name: 'Ubuntu SSL tests with OpenSSL'
runs-on: ${{ matrix.os }}
build-ubuntu-ssltests:
name: 'Ubuntu SSL tests'
runs-on: ubuntu-24.04
timeout-minutes: 60
needs: build-context
if: needs.build-context.outputs.run-ubuntu == 'true'
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04]
# Keep 1.1.1w in our list despite it being upstream EOL and otherwise
# unsupported as it most resembles other 1.1.1-work-a-like ssl APIs
# supported by important vendors such as AWS-LC.
openssl_ver: [1.1.1w, 3.0.18, 3.2.6, 3.3.5, 3.4.3, 3.5.4]
include:
# Keep 1.1.1w in our list despite it being upstream EOL and otherwise
# unsupported as it most resembles other 1.1.1-work-a-like ssl APIs
# supported by important vendors such as AWS-LC.
- { ssl: openssl, ssl_ver: 1.1.1w }
- { ssl: openssl, ssl_ver: 3.0.18 }
- { ssl: openssl, ssl_ver: 3.2.6 }
- { ssl: openssl, ssl_ver: 3.3.5 }
- { ssl: openssl, ssl_ver: 3.4.3 }
- { ssl: openssl, ssl_ver: 3.5.4 }
- { ssl: awslc, ssl_ver: 1.55.0 }
# See Tools/ssl/make_ssl_data.py for notes on adding a new version
env:
OPENSSL_VER: ${{ matrix.openssl_ver }}
MULTISSL_DIR: ${{ github.workspace }}/multissl
OPENSSL_DIR: ${{ github.workspace }}/multissl/openssl/${{ matrix.openssl_ver }}
LD_LIBRARY_PATH: ${{ github.workspace }}/multissl/openssl/${{ matrix.openssl_ver }}/lib
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Runner image version
run: echo "IMAGE_OS_VERSION=${ImageOS}-${ImageVersion}" >> "$GITHUB_ENV"
- name: Register gcc problem matcher
run: echo "::add-matcher::.github/problem-matchers/gcc.json"
- name: Install dependencies
run: sudo ./.github/workflows/posix-deps-apt.sh
- name: Configure OpenSSL env vars
run: |
echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> "$GITHUB_ENV"
echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}" >> "$GITHUB_ENV"
echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> "$GITHUB_ENV"
- name: 'Restore OpenSSL build'
id: cache-openssl
uses: actions/cache@v4
with:
path: ./multissl/openssl/${{ env.OPENSSL_VER }}
key: ${{ matrix.os }}-multissl-openssl-${{ env.OPENSSL_VER }}
- name: Install OpenSSL
if: steps.cache-openssl.outputs.cache-hit != 'true'
run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --openssl "$OPENSSL_VER" --system Linux
- name: Add ccache to PATH
run: |
echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
- name: Configure CPython
run: ./configure CFLAGS="-fdiagnostics-format=json" --config-cache --enable-slower-safety --with-pydebug --with-openssl="$OPENSSL_DIR"
- name: Build CPython
run: make -j4
- name: Display build info
run: make pythoninfo
- name: SSL tests
run: ./python Lib/test/ssltests.py

build-ubuntu-ssltests-awslc:
name: 'Ubuntu SSL tests with AWS-LC'
runs-on: ${{ matrix.os }}
timeout-minutes: 60
needs: build-context
if: needs.build-context.outputs.run-ubuntu == 'true'
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04]
awslc_ver: [1.55.0]
env:
AWSLC_VER: ${{ matrix.awslc_ver}}
SSL_VER: ${{ matrix.ssl_ver }}
MULTISSL_DIR: ${{ github.workspace }}/multissl
OPENSSL_DIR: ${{ github.workspace }}/multissl/aws-lc/${{ matrix.awslc_ver }}
LD_LIBRARY_PATH: ${{ github.workspace }}/multissl/aws-lc/${{ matrix.awslc_ver }}/lib
SSL_DIR: ${{ github.workspace }}/multissl/${{ matrix.ssl }}/${{ matrix.ssl_ver }}
LD_LIBRARY_PATH: ${{ github.workspace }}/multissl/${{ matrix.ssl }}/${{ matrix.ssl_ver }}/lib
steps:
- uses: actions/checkout@v4
with:
Expand All @@ -328,39 +282,35 @@ jobs:
- name: Configure SSL lib env vars
run: |
echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> "$GITHUB_ENV"
echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/aws-lc/${AWSLC_VER}" >> "$GITHUB_ENV"
echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/aws-lc/${AWSLC_VER}/lib" >> "$GITHUB_ENV"
- name: 'Restore AWS-LC build'
id: cache-aws-lc
echo "SSL_DIR=${GITHUB_WORKSPACE}/multissl/${{ matrix.ssl }}/${SSL_VER}" >> "$GITHUB_ENV"
echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/${{ matrix.ssl }}/${SSL_VER}/lib" >> "$GITHUB_ENV"
- name: 'Restore SSL build'
id: cache-ssl
uses: actions/cache@v4
with:
path: ./multissl/aws-lc/${{ matrix.awslc_ver }}
key: ${{ matrix.os }}-multissl-aws-lc-${{ matrix.awslc_ver }}
- name: Install AWS-LC
if: steps.cache-aws-lc.outputs.cache-hit != 'true'
path: ./multissl/${{ env.SSL }}/${{ env.SSL_VER }}
key: ${{ env.IMAGE_OS_VERSION }}-multissl-${{ env.SSL }}-${{ env.SSL_VER }}
- name: Install SSL
if: steps.cache-ssl.outputs.cache-hit != 'true'
run: |
python3 Tools/ssl/multissltests.py \
--steps=library \
--base-directory "$MULTISSL_DIR" \
--awslc ${{ matrix.awslc_ver }} \
--system Linux
python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --system Linux --ssl ${{ matrix.ssl }} --ssl-versions ${{ matrix.ssl_ver }}
- name: Add ccache to PATH
run: |
echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
- name: Configure CPython
run: |
./configure CFLAGS="-fdiagnostics-format=json" \
--config-cache \
--enable-slower-safety \
--with-pydebug \
--with-openssl="$OPENSSL_DIR" \
--with-builtin-hashlib-hashes=blake2 \
--with-ssl-default-suites=openssl
CMD=(./configure CFLAGS="-fdiagnostics-format=json" --config-cache --enable-slower-safety --with-pydebug --with-openssl="$SSL_DIR")
if [ "${{ matrix.ssl }}" = "openssl" ]; then
"${CMD[@]}"
else
"${CMD[@]}" --with-builtin-hashlib-hashes=blake2 --with-ssl-default-suites=openssl
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we populate a variable called "CONFIGURE_FLAGS" instead and use a switch/case so that we exactly match the SSL libname. It will become easier in the future if we add BoringSSL or LibreSSL tests.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At this point I'd almost suggest using a small Python script to calculate flags. We should avoid complex shell logic in workflow files as much as possible, I don't want to read a bash switch-case in YAML! An if-statement is simpler to understand here for me, though the ${CMD[@]} syntax is arcane.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh yeah, a small Python script is also fine; here what matters to me is to be able to easily add a new library without having 3km long of options. As for ${CMD[@]}, it expands the array's content, so you end up with ./configure [...]. Usually, it's more common to expand the options and hardcode the command rather than expand the entire array containing the command as well.

fi
- name: Build CPython
run: make -j
run: make -j4
- name: Display build info
run: make pythoninfo
- name: Verify python is linked to AWS-LC
if: matrix.ssl == 'aws-lc'
Comment on lines 312 to +313
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should, if possible, do it for OpenSSL as well.

run: ./python -c 'import ssl; print(ssl.OPENSSL_VERSION)' | grep AWS-LC
- name: SSL tests
run: ./python Lib/test/ssltests.py
Expand Down Expand Up @@ -446,7 +396,7 @@ jobs:
key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }}
- name: Install OpenSSL
if: steps.cache-openssl.outputs.cache-hit != 'true'
run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --openssl "$OPENSSL_VER" --system Linux
run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --ssl 'openssl' --ssl-versions "$OPENSSL_VER" --system Linux
- name: Add ccache to PATH
run: |
echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
Expand Down Expand Up @@ -564,7 +514,7 @@ jobs:
key: ${{ matrix.os }}-multissl-openssl-${{ env.OPENSSL_VER }}
- name: Install OpenSSL
if: steps.cache-openssl.outputs.cache-hit != 'true'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With steps.cache-openssl here, we won't be hitting the cache-ssl entry right? maybe it's better to store a cache hit with steps.cache-${{ matrix.ssl }} if it's possible?

run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --openssl "$OPENSSL_VER" --system Linux
run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --ssl 'openssl' --ssl-versions "$OPENSSL_VER" --system Linux
- name: Add ccache to PATH
run: |
echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
Expand Down Expand Up @@ -689,9 +639,7 @@ jobs:
- build-windows-msi
- build-macos
- build-ubuntu
- build-ubuntu-ssltests-awslc
- build-ubuntu-ssltests-openssl
- build-android
- build-ubuntu-ssltests
- build-ios
- build-wasi
- test-hypothesis
Expand All @@ -706,9 +654,9 @@ jobs:
uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe
with:
allowed-failures: >-
build-android,
build-windows-msi,
build-ubuntu-ssltests-awslc,
build-ubuntu-ssltests-openssl,
build-ubuntu-ssltests,
test-hypothesis,
cifuzz,
allowed-skips: >-
Expand All @@ -728,8 +676,8 @@ jobs:
!fromJSON(needs.build-context.outputs.run-ubuntu)
&& '
build-ubuntu,
build-ubuntu-ssltests-awslc,
build-ubuntu-ssltests-openssl,
build-ubuntu-ssltests,
build-wasi,
test-hypothesis,
build-asan,
build-san,
Expand Down
5 changes: 1 addition & 4 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,4 @@ jobs:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- uses: pre-commit/action@v3.0.1
- uses: j178/prek-action@v1
2 changes: 1 addition & 1 deletion .github/workflows/reusable-ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ jobs:
key: ${{ inputs.os }}-multissl-openssl-${{ env.OPENSSL_VER }}
- name: Install OpenSSL
if: steps.cache-openssl.outputs.cache-hit != 'true'
run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --openssl "$OPENSSL_VER" --system Linux
run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --ssl openssl --ssl-versions "$OPENSSL_VER" --system Linux
- name: Add ccache to PATH
run: |
echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
Expand Down
13 changes: 7 additions & 6 deletions .github/workflows/tail-call.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,22 +81,23 @@ jobs:

- name: Native Windows MSVC (release)
if: runner.os == 'Windows' && matrix.architecture != 'ARM64'
shell: cmd
shell: pwsh
run: |
choco install visualstudio2026buildtools --no-progress -y --force --params "--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --locale en-US --passive"
$env:PATH = "C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\MSBuild\Current\bin;$env:PATH"
./PCbuild/build.bat --tail-call-interp -c Release -p ${{ matrix.architecture }} "/p:PlatformToolset=v145"
$env:PlatformToolset = "v145"
./PCbuild/build.bat --tail-call-interp -c Release -p ${{ matrix.architecture }}
./PCbuild/rt.bat -p ${{ matrix.architecture }} -q --multiprocess 0 --timeout 4500 --verbose2 --verbose3

# No tests (yet):
- name: Emulated Windows Clang (release)
if: runner.os == 'Windows' && matrix.architecture == 'ARM64'
shell: cmd
shell: pwsh
run: |
choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }}.1.0
set PlatformToolset=clangcl
set LLVMToolsVersion=${{ matrix.llvm }}.1.0
set LLVMInstallDir=C:\Program Files\LLVM
$env:PlatformToolset = "clangcl"
$env:LLVMToolsVersion = "${{ matrix.llvm }}.1.0"
$env:LLVMInstallDir = "C:\Program Files\LLVM"
./PCbuild/build.bat --tail-call-interp -p ${{ matrix.architecture }}

- name: Native macOS (release)
Expand Down
2 changes: 1 addition & 1 deletion .github/zizmor.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Configuration for the zizmor static analysis tool, run via pre-commit in CI
# Configuration for the zizmor static analysis tool, run via prek in CI
# https://woodruffw.github.io/zizmor/configuration/
rules:
dangerous-triggers:
Expand Down
12 changes: 6 additions & 6 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.13.2
rev: v0.14.10
hooks:
- id: ruff-check
name: Run Ruff (lint) on Apple/
Expand Down Expand Up @@ -52,7 +52,7 @@ repos:
files: ^Tools/wasm/

- repo: https://github.com/psf/black-pre-commit-mirror
rev: 25.9.0
rev: 25.12.0
hooks:
- id: black
name: Run Black on Tools/jit/
Expand Down Expand Up @@ -83,24 +83,24 @@ repos:
files: '^\.github/CODEOWNERS|\.(gram)$'

- repo: https://github.com/python-jsonschema/check-jsonschema
rev: 0.34.0
rev: 0.36.0
hooks:
- id: check-dependabot
- id: check-github-workflows
- id: check-readthedocs

- repo: https://github.com/rhysd/actionlint
rev: v1.7.7
rev: v1.7.9
hooks:
- id: actionlint

- repo: https://github.com/woodruffw/zizmor-pre-commit
rev: v1.14.1
rev: v1.19.0
hooks:
- id: zizmor

- repo: https://github.com/sphinx-contrib/sphinx-lint
rev: v1.0.0
rev: v1.0.2
hooks:
- id: sphinx-lint
args: [--enable=default-role]
Expand Down
23 changes: 23 additions & 0 deletions Doc/c-api/apiabiversion.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,23 @@ See :ref:`stable` for a discussion of API and ABI stability across versions.
This can be ``0xA`` for alpha, ``0xB`` for beta, ``0xC`` for release
candidate or ``0xF`` for final.


.. c:namespace:: NULL
.. c:macro:: PY_RELEASE_LEVEL_ALPHA
:no-typesetting:
.. c:macro:: PY_RELEASE_LEVEL_BETA
:no-typesetting:
.. c:macro:: PY_RELEASE_LEVEL_GAMMA
:no-typesetting:
.. c:macro:: PY_RELEASE_LEVEL_FINAL
:no-typesetting:

For completeness, the values are available as macros:
:c:macro:`!PY_RELEASE_LEVEL_ALPHA` (``0xA``),
:c:macro:`!PY_RELEASE_LEVEL_BETA` (``0xB``),
:c:macro:`!PY_RELEASE_LEVEL_GAMMA` (``0xC``), and
:c:macro:`!PY_RELEASE_LEVEL_FINAL` (``0xF``).

.. c:macro:: PY_RELEASE_SERIAL

The ``2`` in ``3.4.1a2``. Zero for final releases.
Expand All @@ -46,6 +63,12 @@ See :ref:`stable` for a discussion of API and ABI stability across versions.
Use this for numeric comparisons, for example,
``#if PY_VERSION_HEX >= ...``.

.. c:macro:: PY_VERSION

The Python version as a string, for example, ``"3.4.1a2"``.

These macros are defined in :source:`Include/patchlevel.h`.


Run-time version
----------------
Expand Down
9 changes: 6 additions & 3 deletions Doc/c-api/module.rst
Original file line number Diff line number Diff line change
Expand Up @@ -571,7 +571,7 @@ A module's token -- and the *your_token* value to use in the above code -- is:
of that slot;
- For modules created from an ``PyModExport_*``
:ref:`export hook <extension-export-hook>`: the slots array that the export
hook returned (unless overriden with :c:macro:`Py_mod_token`).
hook returned (unless overridden with :c:macro:`Py_mod_token`).

.. c:macro:: Py_mod_token

Expand Down Expand Up @@ -820,15 +820,18 @@ struct:
.. versionadded:: 3.5

.. c:macro:: PYTHON_API_VERSION
PYTHON_API_STRING

The C API version. Defined for backwards compatibility.
The C API version, as an integer (``1013``) and string (``"1013"``), respectively.
Defined for backwards compatibility.

Currently, this constant is not updated in new Python versions, and is not
useful for versioning. This may change in the future.

.. c:macro:: PYTHON_ABI_VERSION
PYTHON_ABI_STRING

Defined as ``3`` for backwards compatibility.
Defined as ``3`` and ``"3"``, respectively, for backwards compatibility.

Currently, this constant is not updated in new Python versions, and is not
useful for versioning. This may change in the future.
Expand Down
2 changes: 2 additions & 0 deletions Doc/deprecations/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ Deprecations

.. include:: pending-removal-in-3.17.rst

.. include:: pending-removal-in-3.18.rst

.. include:: pending-removal-in-3.19.rst

.. include:: pending-removal-in-3.20.rst
Expand Down
10 changes: 0 additions & 10 deletions Doc/deprecations/pending-removal-in-3.15.rst
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,6 @@ Pending removal in Python 3.15

* ``load_module()`` method: use ``exec_module()`` instead.

* :class:`locale`:

* The :func:`~locale.getdefaultlocale` function
has been deprecated since Python 3.11.
Its removal was originally planned for Python 3.13 (:gh:`90817`),
but has been postponed to Python 3.15.
Use :func:`~locale.getlocale`, :func:`~locale.setlocale`,
and :func:`~locale.getencoding` instead.
(Contributed by Hugo van Kemenade in :gh:`111187`.)

* :mod:`pathlib`:

* :meth:`!.PurePath.is_reserved`
Expand Down
Loading