Skip to content

Commit 0262063

Browse files
Merge branch 'main' into unicodetata-bidis
# Conflicts: # Lib/test/test_unicodedata.py # Tools/unicode/makeunicodedata.py
2 parents b665e66 + 6577d87 commit 0262063

73 files changed

Lines changed: 1386 additions & 394 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/CODEOWNERS

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,12 @@ Python/jit.c @brandtbucher @savannahostrowski @diegorusso
292292
Tools/jit/ @brandtbucher @savannahostrowski @diegorusso
293293
InternalDocs/jit.md @brandtbucher @savannahostrowski @diegorusso @AA-Turner
294294

295+
# Lazy imports (PEP 810)
296+
Objects/lazyimportobject.c @twouters @DinoV @pablogsal
297+
Include/internal/pycore_lazyimportobject.h @twouters @DinoV @pablogsal
298+
Lib/test/test_import/test_lazy_imports.py @twouters @DinoV @pablogsal
299+
Lib/test/test_import/data/lazy_imports/ @twouters @DinoV @pablogsal
300+
295301
# Micro-op / μop / Tier 2 Optimiser
296302
Python/optimizer.c @markshannon @Fidget-Spinner
297303
Python/optimizer_analysis.c @markshannon @tomasr8 @Fidget-Spinner @savannahostrowski

.github/workflows/build.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,11 +242,18 @@ jobs:
242242
# BOLT currently crashes during instrumentation on aarch64
243243
- os: ubuntu-24.04-arm
244244
bolt: true
245+
include:
246+
# Enable CPU-intensive tests on ARM (default build only)
247+
- os: ubuntu-24.04-arm
248+
bolt: false
249+
free-threading: false
250+
test-opts: '-u cpu'
245251
uses: ./.github/workflows/reusable-ubuntu.yml
246252
with:
247253
bolt-optimizations: ${{ matrix.bolt }}
248254
free-threading: ${{ matrix.free-threading }}
249255
os: ${{ matrix.os }}
256+
test-opts: ${{ matrix.test-opts || '' }}
250257

251258
build-ubuntu-ssltests-openssl:
252259
name: 'Ubuntu SSL tests with OpenSSL'

.github/workflows/reusable-ubuntu.yml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ on:
1717
description: OS to run the job
1818
required: true
1919
type: string
20+
test-opts:
21+
description: Extra options to pass to the test runner via TESTOPTS
22+
required: false
23+
type: string
24+
default: ''
2025

2126
env:
2227
FORCE_COLOR: 1
@@ -111,4 +116,6 @@ jobs:
111116
run: sudo mount "$CPYTHON_RO_SRCDIR" -oremount,rw
112117
- name: Tests
113118
working-directory: ${{ env.CPYTHON_BUILDDIR }}
114-
run: xvfb-run make ci
119+
run: xvfb-run make ci EXTRATESTOPTS="${TEST_OPTS}"
120+
env:
121+
TEST_OPTS: ${{ inputs.test-opts }}

Android/android.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ def make_build_python(context):
208208
def unpack_deps(host, prefix_dir):
209209
os.chdir(prefix_dir)
210210
deps_url = "https://github.com/beeware/cpython-android-source-deps/releases/download"
211-
for name_ver in ["bzip2-1.0.8-3", "libffi-3.4.4-3", "openssl-3.0.18-0",
211+
for name_ver in ["bzip2-1.0.8-3", "libffi-3.4.4-3", "openssl-3.0.19-1",
212212
"sqlite-3.50.4-0", "xz-5.4.6-1", "zstd-1.5.7-1"]:
213213
filename = f"{name_ver}-{host}.tar.gz"
214214
download(f"{deps_url}/{name_ver}/{filename}")

Apple/__main__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ def unpack_deps(
316316
for name_ver in [
317317
"BZip2-1.0.8-2",
318318
"libFFI-3.4.7-2",
319-
"OpenSSL-3.0.18-1",
319+
"OpenSSL-3.0.19-1",
320320
"XZ-5.6.4-2",
321321
"mpdecimal-4.0.0-2",
322322
"zstd-1.5.7-1",

Doc/c-api/datetime.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ macros.
3030

3131
This is not compatible with subinterpreters.
3232

33+
.. versionchanged:: 3.15
34+
35+
This macro is now thread safe.
36+
3337
.. c:type:: PyDateTime_CAPI
3438
3539
Structure containing the fields for the datetime C API.
@@ -44,6 +48,11 @@ macros.
4448

4549
This variable is only available once :c:macro:`PyDateTime_IMPORT` succeeds.
4650

51+
.. versionchanged:: 3.15
52+
53+
This variable should not be accessed directly as direct access is not thread-safe.
54+
Use :c:func:`PyDateTime_IMPORT` instead.
55+
4756
.. c:type:: PyDateTime_Date
4857
4958
This subtype of :c:type:`PyObject` represents a Python date object.

Doc/c-api/dict.rst

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
.. _dictobjects:
44

5-
Dictionary Objects
5+
Dictionary objects
66
------------------
77

88
.. index:: pair: object; dictionary
@@ -444,7 +444,7 @@ Dictionary Objects
444444
.. versionadded:: 3.12
445445
446446
447-
Dictionary View Objects
447+
Dictionary view objects
448448
^^^^^^^^^^^^^^^^^^^^^^^
449449
450450
.. c:function:: int PyDictViewSet_Check(PyObject *op)
@@ -490,7 +490,58 @@ Dictionary View Objects
490490
always succeeds.
491491
492492
493-
Ordered Dictionaries
493+
Frozen dictionary objects
494+
^^^^^^^^^^^^^^^^^^^^^^^^^
495+
496+
.. versionadded:: next
497+
498+
499+
.. c:var:: PyTypeObject PyFrozenDict_Type
500+
501+
This instance of :c:type:`PyTypeObject` represents the Python frozen
502+
dictionary type.
503+
This is the same object as :class:`frozendict` in the Python layer.
504+
505+
506+
.. c:function:: int PyAnyDict_Check(PyObject *p)
507+
508+
Return true if *p* is a :class:`dict` object, a :class:`frozendict` object,
509+
or an instance of a subtype of the :class:`!dict` or :class:`!frozendict`
510+
type.
511+
This function always succeeds.
512+
513+
514+
.. c:function:: int PyAnyDict_CheckExact(PyObject *p)
515+
516+
Return true if *p* is a :class:`dict` object or a :class:`frozendict` object,
517+
but not an instance of a subtype of the :class:`!dict` or
518+
:class:`!frozendict` type.
519+
This function always succeeds.
520+
521+
522+
.. c:function:: int PyFrozenDict_Check(PyObject *p)
523+
524+
Return true if *p* is a :class:`frozendict` object or an instance of a
525+
subtype of the :class:`!frozendict` type.
526+
This function always succeeds.
527+
528+
529+
.. c:function:: int PyFrozenDict_CheckExact(PyObject *p)
530+
531+
Return true if *p* is a :class:`frozendict` object, but not an instance of a
532+
subtype of the :class:`!frozendict` type.
533+
This function always succeeds.
534+
535+
536+
.. c:function:: PyObject* PyFrozenDict_New(PyObject *iterable)
537+
538+
Return a new :class:`frozendict` from an iterable, or ``NULL`` on failure
539+
with an exception set.
540+
541+
Create an empty dictionary if *iterable* is ``NULL``.
542+
543+
544+
Ordered dictionaries
494545
^^^^^^^^^^^^^^^^^^^^
495546
496547
Python's C API provides interface for :class:`collections.OrderedDict` from C.

Doc/library/datetime.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2534,8 +2534,8 @@ requires, and these work on all supported platforms.
25342534
| ``%d`` | Day of the month as a | 01, 02, ..., 31 | \(9) |
25352535
| | zero-padded decimal number. | | |
25362536
+-----------+--------------------------------+------------------------+-------+
2537-
| ``%D`` | Equivalent to ``%m/%d/%y``. | 11/10/2025 | \(9), |
2538-
| | | | \(0) |
2537+
| ``%D`` | Equivalent to ``%m/%d/%y``. | 11/28/25 | \(9) |
2538+
| | | | |
25392539
+-----------+--------------------------------+------------------------+-------+
25402540
| ``%e`` | The day of the month as a | ␣1, ␣2, ..., 31 | |
25412541
| | space-padded decimal number. | | |
@@ -2676,7 +2676,7 @@ differences between platforms in handling of unsupported format specifiers.
26762676
``%:z`` was added for :meth:`~.datetime.strftime`.
26772677

26782678
.. versionadded:: 3.15
2679-
``%:z`` and ``%F`` were added for :meth:`~.datetime.strptime`.
2679+
``%:z``, ``%F``, and ``%D`` were added for :meth:`~.datetime.strptime`.
26802680

26812681
Technical Detail
26822682
^^^^^^^^^^^^^^^^

Doc/library/mailbox.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,14 @@ Supported mailbox formats are Maildir, mbox, MH, Babyl, and MMDF.
7878
message. Failing to lock the mailbox runs the risk of losing messages or
7979
corrupting the entire mailbox.
8080

81+
The :class:`!Mailbox` class supports the :keyword:`with` statement. When used
82+
as a context manager, :class:`!Mailbox` calls :meth:`lock` when the context is entered,
83+
returns the mailbox object as the context object, and at context end calls :meth:`close`,
84+
thereby releasing the lock.
85+
86+
.. versionchanged:: next
87+
Support for the :keyword:`with` statement was added.
88+
8189
:class:`!Mailbox` instances have the following methods:
8290

8391

0 commit comments

Comments
 (0)