Skip to content

Commit 1dcc72b

Browse files
authored
Merge branch 'main' into ac_add_vectorcall
2 parents e4d18aa + cb3b4b9 commit 1dcc72b

105 files changed

Lines changed: 149812 additions & 563 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/workflows/build.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -206,16 +206,16 @@ jobs:
206206
strategy:
207207
fail-fast: false
208208
matrix:
209-
# macos-26 is Apple Silicon, macos-15-intel is Intel.
210-
# macos-15-intel only runs tests against the GIL-enabled CPython.
209+
# macos-26 is Apple Silicon, macos-26-intel is Intel.
210+
# macos-26-intel only runs tests against the GIL-enabled CPython.
211211
os:
212212
- macos-26
213-
- macos-15-intel
213+
- macos-26-intel
214214
free-threading:
215215
- false
216216
- true
217217
exclude:
218-
- os: macos-15-intel
218+
- os: macos-26-intel
219219
free-threading: true
220220
uses: ./.github/workflows/reusable-macos.yml
221221
with:

.github/workflows/reusable-macos.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,15 @@ jobs:
5454
--prefix=/opt/python-dev \
5555
--with-openssl="$(brew --prefix openssl@3.5)"
5656
- name: Build CPython
57-
if : ${{ inputs.free-threading || inputs.os != 'macos-15-intel' }}
57+
if : ${{ inputs.free-threading || inputs.os != 'macos-26-intel' }}
5858
run: gmake -j8
5959
- name: Build CPython for compiler warning check
60-
if : ${{ !inputs.free-threading && inputs.os == 'macos-15-intel' }}
60+
if : ${{ !inputs.free-threading && inputs.os == 'macos-26-intel' }}
6161
run: set -o pipefail; gmake -j8 --output-sync 2>&1 | tee compiler_output_macos.txt
6262
- name: Display build info
6363
run: make pythoninfo
6464
- name: Check compiler warnings
65-
if : ${{ !inputs.free-threading && inputs.os == 'macos-15-intel' }}
65+
if : ${{ !inputs.free-threading && inputs.os == 'macos-26-intel' }}
6666
run: >-
6767
python3 Tools/build/check_warnings.py
6868
--compiler-output-file-path=compiler_output_macos.txt

.github/workflows/reusable-windows.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ permissions:
2222

2323
env:
2424
FORCE_COLOR: 1
25-
IncludeUwp: >-
26-
true
2725

2826
jobs:
2927
build:

.github/workflows/stale.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ jobs:
2121
uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0
2222
with:
2323
repo-token: ${{ secrets.GITHUB_TOKEN }}
24-
stale-pr-message: 'This PR is stale because it has been open for 30 days with no activity.'
24+
stale-pr-message: 'This PR is stale because it has been open for 90 days with no activity.'
2525
stale-pr-label: 'stale'
2626
days-before-issue-stale: -1
27-
days-before-pr-stale: 30
27+
days-before-pr-stale: 90
2828
days-before-close: -1
2929
ascending: true
3030
operations-per-run: 120

Doc/c-api/import.rst

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -393,11 +393,6 @@ Importing Modules
393393
394394
Make all imports lazy by default.
395395
396-
.. c:enumerator:: PyImport_LAZY_NONE
397-
398-
Disable lazy imports entirely. Even explicit ``lazy`` statements become
399-
eager imports.
400-
401396
.. versionadded:: 3.15
402397
403398
.. c:function:: PyObject* PyImport_CreateModuleFromInitfunc(PyObject *spec, PyObject* (*initfunc)(void))

Doc/c-api/sentinel.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ Sentinel objects
3131
3232
.. versionadded:: 3.15
3333
34-
.. c:function:: PyObject* PySentinel_New(const char *name, const char *module_name)
34+
.. c:function:: PyObject* PySentinel_New(const char *name, const char *module_name, const char *repr)
3535
3636
Return a new :class:`sentinel` object with :attr:`~sentinel.__name__` set to
3737
*name* and :attr:`~sentinel.__module__` set to *module_name*.
3838
*name* must not be ``NULL``. If *module_name* is ``NULL``, :attr:`~sentinel.__module__`
39-
is set to ``None``.
39+
is set to ``None``. If *repr* is ``NULL``, ``repr()`` returns :attr:`~sentinel.__name__`.
4040
Return ``NULL`` with an exception set on failure.
4141
4242
For pickling to work, *module_name* must be the name of an importable

Doc/data/refcounts.dat

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2040,6 +2040,7 @@ PySeqIter_New:PyObject*:seq:0:
20402040
PySentinel_New:PyObject*::+1:
20412041
PySentinel_New:const char*:name::
20422042
PySentinel_New:const char*:module_name::
2043+
PySentinel_New:const char*:repr::
20432044

20442045
PySequence_Check:int:::
20452046
PySequence_Check:PyObject*:o:0:

Doc/library/dataclasses.rst

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ Module contents
418418
:func:`!astuple` raises :exc:`TypeError` if *obj* is not a dataclass
419419
instance.
420420

421-
.. function:: make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False, slots=False, weakref_slot=False, module=None, decorator=dataclass)
421+
.. function:: make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False, slots=False, weakref_slot=False, module=None, qualname=None, decorator=dataclass)
422422

423423
Creates a new dataclass with name *cls_name*, fields as defined
424424
in *fields*, base classes as given in *bases*, and initialized
@@ -434,6 +434,9 @@ Module contents
434434
of the dataclass is set to that value.
435435
By default, it is set to the module name of the caller.
436436

437+
If *qualname* is defined, the :attr:`~type.__qualname__` attribute of the dataclass
438+
is set to that value. By default, it is set to the value passed to *cls_name*.
439+
437440
The *decorator* parameter is a callable that will be used to create the dataclass.
438441
It should take the class object as a first argument and the same keyword arguments
439442
as :deco:`dataclass`. By default, the :deco:`dataclass`
@@ -464,6 +467,8 @@ Module contents
464467

465468
.. versionadded:: 3.14
466469
Added the *decorator* parameter.
470+
.. versionadded:: next
471+
Added the *qualname* parameter.
467472

468473
.. function:: replace(obj, /, **changes)
469474

Doc/library/functions.rst

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1827,15 +1827,21 @@ are always available. They are listed here in alphabetical order.
18271827
:func:`setattr`.
18281828

18291829

1830-
.. class:: sentinel(name, /)
1830+
.. class:: sentinel(name, /, *, repr=None)
18311831

18321832
Return a new unique sentinel object. *name* must be a :class:`str`, and is
1833-
used as the returned object's representation::
1833+
used by default as the returned object's representation::
18341834

18351835
>>> MISSING = sentinel("MISSING")
18361836
>>> MISSING
18371837
MISSING
18381838

1839+
The optional *repr* argument can be used to specify a different representation::
1840+
1841+
>>> MISSING = sentinel("MISSING", repr="<MISSING>")
1842+
>>> MISSING
1843+
<MISSING>
1844+
18391845
Sentinel objects are truthy and compare equal only to themselves. They are
18401846
intended to be compared with the :keyword:`is` operator.
18411847

@@ -1879,7 +1885,7 @@ are always available. They are listed here in alphabetical order.
18791885

18801886
.. attribute:: __module__
18811887

1882-
The name of the module where the sentinel was created.
1888+
The name of the module where the sentinel was created. This attribute is writable.
18831889

18841890
.. versionadded:: 3.15
18851891

Doc/library/importlib.metadata.rst

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,13 @@ You can also get a :ref:`distribution's version number <version>`, list its
105105
current Python environment.
106106

107107

108+
.. exception:: MetadataNotFound
109+
110+
Subclass of :class:`FileNotFoundError` raised when attempting to load metadata
111+
from a distribution folder that is empty or otherwise does not contain a
112+
metadata file.
113+
114+
108115
Functional API
109116
==============
110117

@@ -224,6 +231,9 @@ Distribution metadata
224231
Raises :exc:`PackageNotFoundError` if the named distribution
225232
package is not installed in the current Python environment.
226233

234+
Raises :exc:`MetadataNotFound` if a distribution package is
235+
present but no METADATA file is present.
236+
227237
.. class:: PackageMetadata
228238

229239
A concrete implementation of the
@@ -252,6 +262,12 @@ all the metadata in a JSON-compatible form per :PEP:`566`::
252262
The full set of available metadata is not described here.
253263
See the PyPA `Core metadata specification <https://packaging.python.org/en/latest/specifications/core-metadata/#core-metadata>`_ for additional details.
254264

265+
.. versionchanged:: 3.15
266+
Previously and incidentally, if a METADATA file was missing from a distribution, an
267+
empty ``PackageMetadata`` would be returned, indistinguishable from
268+
an empty METADATA file. Now, a missing METADATA file triggers a
269+
``MetadataNotFound`` exception.
270+
255271
.. versionchanged:: 3.10
256272
The ``Description`` is now included in the metadata when presented
257273
through the payload. Line continuation characters have been removed.
@@ -465,6 +481,9 @@ The same applies for :func:`entry_points` and :func:`files`.
465481
.. attribute:: metadata
466482
:type: PackageMetadata
467483

484+
Raises :exc:`MetadataNotFound` if the METADATA file is not present in
485+
the distribution.
486+
468487
There are all kinds of additional metadata available on :class:`!Distribution`
469488
instances as a :class:`PackageMetadata` instance::
470489

0 commit comments

Comments
 (0)