8000 Merge branch 'main' into gh-116380 · barneygale/cpython@203e8ef · GitHub
[go: up one dir, main page]

Skip to content

Commit 203e8ef

Browse files
committed
Merge branch 'main' into pythongh-116380
2 parents be4865e + fc8007e commit 203e8ef

File tree

284 files changed

+9192
-5319
lines changed

Some content is hidden

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

284 files changed

+9192
-5319
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -514,8 +514,7 @@ jobs:
514514
strategy:
515515
fail-fast: false
516516
matrix:
517-
# sanitizer: [address, undefined, memory] -- memory skipped temporarily until GH-116886 is solved.
518-
sanitizer: [address, undefined]
517+
sanitizer: [address, undefined, memory]
519518
steps:
520519
- name: Build fuzzers (${{ matrix.sanitizer }})
521520
id: build

.github/workflows/jit.yml

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,11 @@ on:
55
- '**jit**'
66
- 'Python/bytecodes.c'
77
- 'Python/optimizer*.c'
8-
- 'Python/optimizer_bytecodes.c'
98
push:
109
paths:
1110
- '**jit**'
1211
- 'Python/bytecodes.c'
1312
- 'Python/optimizer*.c'
14-
- 'Python/optimizer_bytecodes.c'
1513
workflow_dispatch:
1614

1715
concurrency:
@@ -22,7 +20,7 @@ jobs:
2220
jit:
2321
name: ${{ matrix.target }} (${{ matrix.debug && 'Debug' || 'Release' }})
2422
runs-on: ${{ matrix.runner }}
25-
timeout-minutes: 60
23+
timeout-minutes: 75
2624
strategy:
2725
fail-fast: false
2826
matrix:
@@ -95,7 +93,7 @@ jobs:
9593
run: |
9694
choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }}
9795
./PCbuild/build.bat --experimental-jit ${{ matrix.debug && '-d' || '--pgo' }} -p ${{ matrix.architecture }}
98-
./PCbuild/rt.bat ${{ matrix.debug && '-d' }} -p ${{ matrix.architecture }} -q --exclude ${{ matrix.exclude }} --multiprocess 0 --timeout 3600 --verbose2 --verbose3
96+
./PCbuild/rt.bat ${{ matrix.debug && '-d' }} -p ${{ matrix.architecture }} -q --exclude ${{ matrix.exclude }} --multiprocess 0 --timeout 4500 --verbose2 --verbose3
9997
10098
# No PGO or tests (yet):
10199
- name: Emulated Windows
@@ -111,7 +109,7 @@ jobs:
111109
SDKROOT="$(xcrun --show-sdk-path)" \
112110
./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '--enable-optimizations --with-lto' }}
113111
make all --jobs 4
114-
./python.exe -m test --exclude ${{ matrix.exclude }} --multiprocess 0 --timeout 3600 --verbose2 --verbose3
112+
./python.exe -m test --exclude ${{ matrix.exclude }} --multiprocess 0 --timeout 4500 --verbose2 --verbose3
115113
116114
- name: Native Linux
117115
if: runner.os == 'Linux' && matrix.architecture == 'x86_64'
@@ -120,7 +118,7 @@ jobs:
120118
export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH"
121119
./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '--enable-optimizations --with-lto' }}
122120
make all --jobs 4
123-
./python -m test --exclude ${{ matrix.exclude }} --multiprocess 0 --timeout 3600 --verbose2 --verbose3
121+
./python -m test --exclude ${{ matrix.exclude }} --multiprocess 0 --timeout 4500 --verbose2 --verbose3
124122
125123
- name: Emulated Linux
126124
if: runner.os == 'Linux' && matrix.architecture != 'x86_64'
@@ -140,4 +138,4 @@ jobs:
140138
HOSTRUNNER=qemu-${{ matrix.architecture }} \
141139
./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '--enable-optimizations --with-lto' }} --build=x86_64-linux-gnu --host="$HOST" --with-build-python=../build/bin/python3 --with-pkg-config=no ac_cv_buggy_getaddrinfo=no ac_cv_file__dev_ptc=no ac_cv_file__dev_ptmx=yes
142140
make all --jobs 4
143-
./python -m test --exclude ${{ matrix.exclude }} --multiprocess 0 --timeout 3600 --verbose2 --verbose3
141+
./python -m test --exclude ${{ matrix.exclude }} --multiprocess 0 --timeout 4500 --verbose2 --verbose3

.github/workflows/project-updater.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
- { project: 32, label: sprint }
2424

2525
steps:
26-
- uses: actions/add-to-project@v0.6.0
26+
- uses: actions/add-to-project@v1.0.0
2727
with:
2828
project-url: https://github.com/orgs/python/projects/${{ matrix.project }}
2929
github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}

.pre-commit-config.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
repos:
22
- repo: https://github.com/astral-sh/ruff-pre-commit
3-
rev: v0.2.0
3+
rev: v0.3.4
44
hooks:
55
- id: ruff
66
name: Run Ruff on Lib/test/
@@ -14,6 +14,8 @@ repos:
1414
- repo: https://github.com/pre-commit/pre-commit-hooks
1515
rev: v4.5.0
1616
hooks:
17+
- id: check-case-conflict
18+
- id: check-merge-conflict
1719
- id: check-toml
1820
exclude: ^Lib/test/test_tomllib/
1921
- id: check-yaml

Doc/c-api/bytes.rst

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,10 +191,10 @@ called with a non-bytes parameter.
191191
192192
.. c:function:: int _PyBytes_Resize(PyObject **bytes, Py_ssize_t newsize)
193193
194-
A way to resize a bytes object even though it is "immutable". Only use this
195-
to build up a brand new bytes object; don't use this if the bytes may already
196-
be known in other parts of the code. It is an error to call this function if
197-
the refcount on the input bytes object is not one. Pass the address of an
194+
Resize a bytes object. *newsize* will be the new length of the bytes object.
195+
You can think of it as creating a new bytes object and destroying the old
196+
one, only more efficiently.
197+
Pass the address of an
198198
existing bytes object as an lvalue (it may be written into), and the new size
199199
desired. On success, *\*bytes* holds the resized bytes object and ``0`` is
200200
returned; the address in *\*bytes* may differ from its input value. If the

Doc/data/stable_abi.dat

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Doc/includes/wasm-ios-notavail.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
.. include for modules that don't work on WASM or iOS
2+
3+
.. availability:: not WASI, not iOS.
4+
5+
This module does not work or is not available on WebAssembly platforms, or
6+
on iOS. See :ref:`wasm-availability` for more information on WASM
7+
availability; see :ref:`iOS-availability` for more information on iOS
8+
availability.

Doc/includes/wasm-notavail.rst

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
.. include for modules that don't work on WASM
22
3-
.. availability:: not Emscripten, not WASI.
3+
.. availability:: not WASI.
44

5-
This module does not work or is not available on WebAssembly platforms
6-
``wasm32-emscripten`` and ``wasm32-wasi``. See
5+
This module does not work or is not available on WebAssembly. See
76
:ref:`wasm-availability` for more information.

Doc/library/asyncio-task.rst

Lines changed: 48 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -867,19 +867,50 @@ Waiting Primitives
867867

868868
.. function:: as_completed(aws, *, timeout=None)
869869

870-
Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
871-
iterable concurrently. Return an iterator of coroutines.
872-
Each coroutine returned can be awaited to get the earliest next
873-
result from the iterable of the remaining awaitables.
874-
875-
Raises :exc:`TimeoutError` if the timeout occurs before
876-
all Futures are done.
877-
878-
Example::
879-
880-
for coro in as_completed(aws):
881-
earliest_result = await coro
882-
# ...
870+
Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws* iterable
871+
concurrently. The returned object can be iterated to obtain the results
872+
of the awaitables as they finish.
873+
874+
The object returned by ``as_completed()`` can be iterated as an
875+
:term:`asynchronous iterator` or a plain :term:`iterator`. When asynchronous
876+
iteration is used, the originally-supplied awaitables are yielded if they
877+
are tasks or futures. This makes it easy to correlate previously-scheduled
878+
tasks with their results. Example::
879+
880+
ipv4_connect = create_task(open_connection("127.0.0.1", 80))
881+
ipv6_connect = create_task(open_connection("::1", 80))
882+
tasks = [ipv4_connect, ipv6_connect]
883+
884+
async for earliest_connect in as_completed(tasks):
885+
# earliest_connect is done. The result can be obtained by
886+
# awaiting it or calling earliest_connect.result()
887+
reader, writer = await earliest_connect
888+
889+
if earliest_connect is ipv6_connect:
890+
print("IPv6 connection established.")
891+
else:
892+
print("IPv4 connection established.")
893+
894+
During asynchronous iteration, implicitly-created tasks will be yielded for
895+
supplied awaitables that aren't tasks or futures.
896+
897+
When used as a plain iterator, each iteration yields a new coroutine that
898+
returns the result or raises the exception of the next completed awaitable.
899+
This pattern is compatible with Python versions older than 3.13::
900+
901+
ipv4_connect = create_task(open_connection("127.0.0.1", 80))
902+
ipv6_connect = create_task(open_connection("::1", 80))
903+
tasks = [ipv4_connect, ipv6_connect]
904+
905+
for next_connect in as_completed(tasks):
906+
# next_connect is not one of the original task objects. It must be
907+
# awaited to obtain the result value or raise the exception of the
908+
# awaitable that finishes next.
909+
reader, writer = await next_connect
910+
911+
A :exc:`TimeoutError` is raised if the timeout occurs before all awaitables
912+
are done. This is raised by the ``async for`` loop during asynchronous
913+
iteration or by the coroutines yielded during plain iteration.
883914

884915
.. versionchanged:: 3.10
885916
Removed the *loop* parameter.
@@ -891,6 +922,10 @@ Waiting Primitives
891922
.. versionchanged:: 3.12
892923
Added support for generators yielding tasks.
893924

925+
.. versionchanged:: 3.13
926+
The result can now be used as either an :term:`asynchronous iterator`
927+
or as a plain :term:`iterator` (previously it was only a plain iterator).
928+
894929

895930
Running in Threads
896931
==================

Doc/library/configparser.rst

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,11 @@ may be treated as parts of multiline values or ignored.
274274
By default, a valid section name can be any string that does not contain '\\n'.
275275
To change this, see :attr:`ConfigParser.SECTCRE`.
276276

277+
The first section name may be omitted if the parser is configured to allow an
278+
unnamed top level section with ``allow_unnamed_section=True``. In this case,
279+
the keys/values may be retrieved by :const:`UNNAMED_SECTION` as in
280+
``config[UNNAMED_SECTION]``.
281+
277282
Configuration files may include comments, prefixed by specific
278283
characters (``#`` and ``;`` by default [1]_). Comments may appear on
279284
their own on an otherwise empty line, possibly indented. [1]_
@@ -325,6 +330,27 @@ For example:
325330
# Did I mention we can indent comments, too?
326331
327332
333+
.. _unnamed-sections:
334+
335+
Unnamed Sections
336+
----------------
337+
338+
The name of the first section (or unique) may be omitted and values
339+
retrieved by the :const:`UNNAMED_SECTION` attribute.
340+
341+
.. doctest::
342+
343+
>>> config = """
344+
... option = value
345+
...
346+
... [ Section 2 ]
347+
... another = val
348+
... """
349+
>>> unnamed = configparser.ConfigParser(allow_unnamed_section=True)
350+
>>> unnamed.read_string(config)
351+
>>> unnamed.get(configparser.UNNAMED_SECTION, 'option')
352+
'value'
353+
328354
Interpolation of values
329355
-----------------------
330356

@@ -1216,6 +1242,11 @@ ConfigParser Objects
12161242
names is stripped before :meth:`optionxform` is called.
12171243

12181244

1245+
.. data:: UNNAMED_SECTION
1246+
1247+
A special object representing a section name used to reference the unnamed section (see :ref:`unnamed-sections`).
1248+
1249+
12191250
.. data:: MAX_INTERPOLATION_DEPTH
12201251

12211252
The maximum depth for recursive interpolation for :meth:`~configparser.ConfigParser.get` when the *raw*

0 commit comments

Comments
 (0)
0