Skip to content

Commit b581777

Browse files
committed
Merge branch 'main' into dataclass-lazy-inspect
2 parents 1703153 + 837166f commit b581777

65 files changed

Lines changed: 910 additions & 404 deletions

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: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ jobs:
261261
# Keep 1.1.1w in our list despite it being upstream EOL and otherwise
262262
# unsupported as it most resembles other 1.1.1-work-a-like ssl APIs
263263
# supported by important vendors such as AWS-LC.
264-
openssl_ver: [1.1.1w, 3.0.18, 3.3.5, 3.4.3, 3.5.4, 3.6.0]
264+
openssl_ver: [1.1.1w, 3.0.19, 3.3.6, 3.4.4, 3.5.5, 3.6.1]
265265
# See Tools/ssl/make_ssl_data.py for notes on adding a new version
266266
env:
267267
OPENSSL_VER: ${{ matrix.openssl_ver }}
@@ -428,7 +428,7 @@ jobs:
428428
needs: build-context
429429
if: needs.build-context.outputs.run-ubuntu == 'true'
430430
env:
431-
OPENSSL_VER: 3.0.18
431+
OPENSSL_VER: 3.5.5
432432
PYTHONSTRICTEXTENSIONBUILD: 1
433433
steps:
434434
- uses: actions/checkout@v6
@@ -539,7 +539,7 @@ jobs:
539539
matrix:
540540
os: [ubuntu-24.04]
541541
env:
542-
OPENSSL_VER: 3.0.18
542+
OPENSSL_VER: 3.5.5
543543
PYTHONSTRICTEXTENSIONBUILD: 1
544544
ASAN_OPTIONS: detect_leaks=0:allocator_may_return_null=1:handle_segv=0
545545
steps:
@@ -574,7 +574,7 @@ jobs:
574574
run: |
575575
echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
576576
- name: Configure CPython
577-
run: ./configure --config-cache --with-address-sanitizer --without-pymalloc
577+
run: ./configure --config-cache --with-address-sanitizer --without-pymalloc --with-openssl="$OPENSSL_DIR"
578578
- name: Build CPython
579579
run: make -j4
580580
- name: Display build info

.github/workflows/reusable-macos.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jobs:
3535
run: echo "IMAGE_OS_VERSION=${ImageOS}-${ImageVersion}" >> "$GITHUB_ENV"
3636
- name: Install Homebrew dependencies
3737
run: |
38-
brew install pkg-config openssl@3.0 xz gdbm tcl-tk@9 make
38+
brew install pkg-config openssl@3.5 xz gdbm tcl-tk@9 make
3939
# Because alternate versions are not symlinked into place by default:
4040
brew link --overwrite tcl-tk@9
4141
- name: Configure CPython
@@ -50,7 +50,7 @@ jobs:
5050
--enable-safety \
5151
${{ inputs.free-threading && '--disable-gil' || '' }} \
5252
--prefix=/opt/python-dev \
53-
--with-openssl="$(brew --prefix openssl@3.0)"
53+
--with-openssl="$(brew --prefix openssl@3.5)"
5454
- name: Build CPython
5555
if : ${{ inputs.free-threading || inputs.os != 'macos-15-intel' }}
5656
run: gmake -j8

.github/workflows/reusable-ubuntu.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
runs-on: ${{ inputs.os }}
2828
timeout-minutes: 60
2929
env:
30-
OPENSSL_VER: 3.0.18
30+
OPENSSL_VER: 3.5.5
3131
PYTHONSTRICTEXTENSIONBUILD: 1
3232
TERM: linux
3333
steps:

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/howto/enum.rst

Lines changed: 12 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -965,75 +965,16 @@ want one of them to be the value::
965965

966966

967967
Finer Points
968-
^^^^^^^^^^^^
969-
970-
Supported ``__dunder__`` names
971-
""""""""""""""""""""""""""""""
972-
973-
:attr:`~enum.EnumType.__members__` is a read-only ordered mapping of ``member_name``:``member``
974-
items. It is only available on the class.
975-
976-
:meth:`~object.__new__`, if specified, must create and return the enum members; it is
977-
also a very good idea to set the member's :attr:`~Enum._value_` appropriately. Once
978-
all the members are created it is no longer used.
979-
980-
981-
Supported ``_sunder_`` names
982-
""""""""""""""""""""""""""""
968+
------------
983969

984-
- :attr:`~Enum._name_` -- name of the member
985-
- :attr:`~Enum._value_` -- value of the member; can be set in ``__new__``
986-
- :meth:`~Enum._missing_` -- a lookup function used when a value is not found;
987-
may be overridden
988-
- :attr:`~Enum._ignore_` -- a list of names, either as a :class:`list` or a
989-
:class:`str`, that will not be transformed into members, and will be removed
990-
from the final class
991-
- :meth:`~Enum._generate_next_value_` -- used to get an appropriate value for
992-
an enum member; may be overridden
993-
- :meth:`~Enum._add_alias_` -- adds a new name as an alias to an existing
994-
member.
995-
- :meth:`~Enum._add_value_alias_` -- adds a new value as an alias to an
996-
existing member. See `MultiValueEnum`_ for an example.
970+
Supported ``__dunder__`` and ``_sunder_`` names
971+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
997972

998-
.. note::
999-
1000-
For standard :class:`Enum` classes the next value chosen is the highest
1001-
value seen incremented by one.
1002-
1003-
For :class:`Flag` classes the next value chosen will be the next highest
1004-
power-of-two.
1005-
1006-
.. versionchanged:: 3.13
1007-
Prior versions would use the last seen value instead of the highest value.
1008-
1009-
.. versionadded:: 3.6 ``_missing_``, ``_order_``, ``_generate_next_value_``
1010-
.. versionadded:: 3.7 ``_ignore_``
1011-
.. versionadded:: 3.13 ``_add_alias_``, ``_add_value_alias_``
1012-
1013-
To help keep Python 2 / Python 3 code in sync an :attr:`~Enum._order_` attribute can
1014-
be provided. It will be checked against the actual order of the enumeration
1015-
and raise an error if the two do not match::
1016-
1017-
>>> class Color(Enum):
1018-
... _order_ = 'RED GREEN BLUE'
1019-
... RED = 1
1020-
... BLUE = 3
1021-
... GREEN = 2
1022-
...
1023-
Traceback (most recent call last):
1024-
...
1025-
TypeError: member order does not match _order_:
1026-
['RED', 'BLUE', 'GREEN']
1027-
['RED', 'GREEN', 'BLUE']
1028-
1029-
.. note::
1030-
1031-
In Python 2 code the :attr:`~Enum._order_` attribute is necessary as definition
1032-
order is lost before it can be recorded.
973+
The supported ``__dunder__`` and ``_sunder_`` names can be found in the :ref:`Enum API documentation <enum-dunder-sunder>`.
1033974

1034975

1035976
_Private__names
1036-
"""""""""""""""
977+
^^^^^^^^^^^^^^^
1037978

1038979
:ref:`Private names <private-name-mangling>` are not converted to enum members,
1039980
but remain normal attributes.
@@ -1042,7 +983,7 @@ but remain normal attributes.
1042983

1043984

1044985
``Enum`` member type
1045-
""""""""""""""""""""
986+
^^^^^^^^^^^^^^^^^^^^
1046987

1047988
Enum members are instances of their enum class, and are normally accessed as
1048989
``EnumClass.member``. In certain situations, such as writing custom enum
@@ -1055,7 +996,7 @@ recommended.
1055996

1056997

1057998
Creating members that are mixed with other data types
1058-
"""""""""""""""""""""""""""""""""""""""""""""""""""""
999+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10591000

10601001
When subclassing other data types, such as :class:`int` or :class:`str`, with
10611002
an :class:`Enum`, all values after the ``=`` are passed to that data type's
@@ -1069,7 +1010,7 @@ constructor. For example::
10691010

10701011

10711012
Boolean value of ``Enum`` classes and members
1072-
"""""""""""""""""""""""""""""""""""""""""""""
1013+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10731014

10741015
Enum classes that are mixed with non-:class:`Enum` types (such as
10751016
:class:`int`, :class:`str`, etc.) are evaluated according to the mixed-in
@@ -1084,7 +1025,7 @@ Plain :class:`Enum` classes always evaluate as :data:`True`.
10841025

10851026

10861027
``Enum`` classes with methods
1087-
"""""""""""""""""""""""""""""
1028+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10881029

10891030
If you give your enum subclass extra methods, like the `Planet`_
10901031
class below, those methods will show up in a :func:`dir` of the member,
@@ -1097,7 +1038,7 @@ but not of the class::
10971038

10981039

10991040
Combining members of ``Flag``
1100-
"""""""""""""""""""""""""""""
1041+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11011042

11021043
Iterating over a combination of :class:`Flag` members will only return the members that
11031044
are comprised of a single bit::
@@ -1117,7 +1058,7 @@ are comprised of a single bit::
11171058

11181059

11191060
``Flag`` and ``IntFlag`` minutia
1120-
""""""""""""""""""""""""""""""""
1061+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11211062

11221063
Using the following snippet for our examples::
11231064

@@ -1478,6 +1419,7 @@ alias::
14781419
behaviors as well as disallowing aliases. If the only desired change is
14791420
disallowing aliases, the :func:`unique` decorator can be used instead.
14801421

1422+
.. _multi-value-enum:
14811423

14821424
MultiValueEnum
14831425
^^^^^^^^^^^^^^^^^

Doc/library/enum.rst

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,28 @@ Data Types
307307
No longer used, kept for backward compatibility.
308308
(class attribute, removed during class creation).
309309

310+
The :attr:`~Enum._order_` attribute can be provided to help keep Python 2 / Python 3 code in sync.
311+
It will be checked against the actual order of the enumeration and raise an error if the two do not match::
312+
313+
>>> class Color(Enum):
314+
... _order_ = 'RED GREEN BLUE'
315+
... RED = 1
316+
... BLUE = 3
317+
... GREEN = 2
318+
...
319+
Traceback (most recent call last):
320+
...
321+
TypeError: member order does not match _order_:
322+
['RED', 'BLUE', 'GREEN']
323+
['RED', 'GREEN', 'BLUE']
324+
325+
.. note::
326+
327+
In Python 2 code the :attr:`~Enum._order_` attribute is necessary as definition
328+
order is lost before it can be recorded.
329+
330+
.. versionadded:: 3.6
331+
310332
.. attribute:: Enum._ignore_
311333

312334
``_ignore_`` is only used during creation and is removed from the
@@ -316,6 +338,8 @@ Data Types
316338
names will also be removed from the completed enumeration. See
317339
:ref:`TimePeriod <enum-time-period>` for an example.
318340

341+
.. versionadded:: 3.7
342+
319343
.. method:: Enum.__dir__(self)
320344

321345
Returns ``['__class__', '__doc__', '__module__', 'name', 'value']`` and
@@ -346,7 +370,16 @@ Data Types
346370
:last_values: A list of the previous values.
347371

348372
A *staticmethod* that is used to determine the next value returned by
349-
:class:`auto`::
373+
:class:`auto`.
374+
375+
.. note::
376+
For standard :class:`Enum` classes the next value chosen is the highest
377+
value seen incremented by one.
378+
379+
For :class:`Flag` classes the next value chosen will be the next highest
380+
power-of-two.
381+
382+
This method may be overridden, e.g.::
350383

351384
>>> from enum import auto, Enum
352385
>>> class PowersOfThree(Enum):
@@ -359,6 +392,10 @@ Data Types
359392
>>> PowersOfThree.SECOND.value
360393
9
361394

395+
.. versionadded:: 3.6
396+
.. versionchanged:: 3.13
397+
Prior versions would use the last seen value instead of the highest value.
398+
362399
.. method:: Enum.__init__(self, *args, **kwds)
363400

364401
By default, does nothing. If multiple values are given in the member
@@ -397,6 +434,8 @@ Data Types
397434
>>> Build('deBUG')
398435
<Build.DEBUG: 'debug'>
399436

437+
.. versionadded:: 3.6
438+
400439
.. method:: Enum.__new__(cls, *args, **kwds)
401440

402441
By default, doesn't exist. If specified, either in the enum class
@@ -490,7 +529,8 @@ Data Types
490529
>>> Color(42)
491530
<Color.RED: 1>
492531

493-
Raises a :exc:`ValueError` if the value is already linked with a different member.
532+
| Raises a :exc:`ValueError` if the value is already linked with a different member.
533+
| See :ref:`multi-value-enum` for an example.
494534
495535
.. versionadded:: 3.13
496536

@@ -889,14 +929,16 @@ Data Types
889929

890930
---------------
891931

932+
.. _enum-dunder-sunder:
933+
892934
Supported ``__dunder__`` names
893935
""""""""""""""""""""""""""""""
894936

895937
:attr:`~EnumType.__members__` is a read-only ordered mapping of ``member_name``:``member``
896938
items. It is only available on the class.
897939

898940
:meth:`~Enum.__new__`, if specified, must create and return the enum members;
899-
it is also a very good idea to set the member's :attr:`!_value_` appropriately.
941+
it is also a very good idea to set the member's :attr:`~Enum._value_` appropriately.
900942
Once all the members are created it is no longer used.
901943

902944

@@ -912,17 +954,10 @@ Supported ``_sunder_`` names
912954
from the final class
913955
- :attr:`~Enum._order_` -- no longer used, kept for backward
914956
compatibility (class attribute, removed during class creation)
957+
915958
- :meth:`~Enum._generate_next_value_` -- used to get an appropriate value for
916959
an enum member; may be overridden
917960

918-
.. note::
919-
920-
For standard :class:`Enum` classes the next value chosen is the highest
921-
value seen incremented by one.
922-
923-
For :class:`Flag` classes the next value chosen will be the next highest
924-
power-of-two.
925-
926961
- :meth:`~Enum._add_alias_` -- adds a new name as an alias to an existing
927962
member.
928963
- :meth:`~Enum._add_value_alias_` -- adds a new value as an alias to an

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)