Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
51fb575
first d-string implementation
methane Jul 9, 2026
2c00ae3
add test
methane Jul 9, 2026
1bbc69f
add tests
methane Jan 31, 2026
768062d
d-string v2
methane Jul 3, 2026
2cfbc4f
improve test
methane Jul 9, 2026
61cacf8
normalize last blank line too
methane Jul 10, 2026
5dadad9
refactor
methane Jul 10, 2026
85250ee
fix test
methane Jul 12, 2026
c9a6d66
support nested d-string
methane Jul 12, 2026
904a7cc
do not dedent in {}
methane Jul 13, 2026
e3d2161
lint: ignore test_dstring
methane Jul 14, 2026
050a84b
gh-49555: Clarify imaplib modified UTF-7 docs and comments (GH-153485)
serhiy-storchaka Jul 14, 2026
1706d14
gh-71086: Document negative offset support in struct.pack_into() and …
serhiy-storchaka Jul 14, 2026
066811e
gh-153313: Work around string decoding bug in emcc 6.0.2 (gh-153698)
hoodmane Jul 14, 2026
a785898
gh-151907: Avoid creating temporary objects in some list comprehensio…
ZeroIntensity Jul 14, 2026
f160f16
gh-151912: Fix segfault in `type()` with NULL `tp_new` metaclasses (#…
Santhosh-I Jul 14, 2026
d807210
gh-151126: Fix `PyErr_NoMemory` errors in `_ctypes.c` (#152720)
lpyu001 Jul 14, 2026
54976e1
gh-148488: Clarify the company/tag separator in the py -V docs (GH-15…
serhiy-storchaka Jul 14, 2026
ba28946
gh-152433: Allow posixmodule.c to build for Windows UWP (GH-152998)
thexai Jul 14, 2026
b704b64
gh-153695: Fix sqlite3.Row.__hash__ with an unhashable value (#153696)
tonghuaroot Jul 14, 2026
6ae740c
gh-102960: Make frames weak-referenceable (#152838)
ambv Jul 14, 2026
1b3914a
gh-153313: Run Emscripten PyRepl test in CI (#153701)
hoodmane Jul 15, 2026
c5530cc
Remove duplicate button_ok code in idlelib.textview (#153733)
terryjreedy Jul 15, 2026
87411d0
gh-153716: Harden ttk/tkinter GUI tests against display scaling (GH-1…
serhiy-storchaka Jul 15, 2026
1c44402
gh-150952: Fix incorrect sock_sendto docstring (#150953)
deadlovelll Jul 15, 2026
4f3be1b
gh-150452: use PyMutex in socket module (#150453)
KowalskiThomas Jul 15, 2026
9e5caec
update reference docs for d-strings
methane Jul 15, 2026
93beea7
gh-153550: Modernize the older prose sections of the tkinter document…
serhiy-storchaka Jul 15, 2026
681477d
gh-150077: Fix fileobj leak in `tarfile.TarFile.zstopen` on `BaseExce…
lpyu001 Jul 15, 2026
b4662e8
gh-153630: Add `str.remove{prefix,suffix}()` to the `str` method summ…
darida12321 Jul 15, 2026
0cc3c75
Merge branch 'main' into peps/0822-d-string
methane Jul 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/reusable-emscripten.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,3 +77,5 @@ jobs:
run: python3 Platforms/emscripten pythoninfo-host
- name: "Test"
run: python3 Platforms/emscripten run --test
- name: "Test Repl"
run: Platforms/emscripten/browser_test/run_test.sh
1 change: 1 addition & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ repos:
name: Run Ruff (lint) on Lib/test/
args: [--exit-non-zero-on-fix]
files: ^Lib/test/
exclude: ^Lib/test/test_dstring.py
- id: ruff-check
name: Run Ruff (lint) on Platforms/WASI/
args: [--exit-non-zero-on-fix, --config=Platforms/WASI/.ruff.toml]
Expand Down
6 changes: 5 additions & 1 deletion Doc/library/stdtypes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1720,7 +1720,11 @@ category.
| | :meth:`str.strip` | :meth:`bytes.strip` |
| +--------------------+----------------------+----------------------+----------------------------+
| | :meth:`str.lstrip` | :meth:`str.rstrip` | :meth:`bytes.lstrip` | :meth:`bytes.rstrip` |
+--------------------------+--------------------+----------------------+----------------------+----------------------------+
| +--------------------+----------------------+----------------------+----------------------------+
| | :meth:`str.removeprefix` | :meth:`bytes.removeprefix` |
| +-------------------------------------------+---------------------------------------------------+
| | :meth:`str.removesuffix` | :meth:`bytes.removesuffix` |
+--------------------------+-------------------------------------------+---------------------------------------------------+
| Translation and Encoding | :meth:`str.translate` | :meth:`bytes.translate` |
| +-------------------------------------------+---------------------------------------------------+
| | :meth:`str.maketrans` | :meth:`bytes.maketrans` |
Expand Down
2 changes: 2 additions & 0 deletions Doc/library/struct.rst
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ The module defines the following exception and functions:
Pack the values *v1*, *v2*, ... according to the format string *format* and
write the packed bytes into the writable buffer *buffer* starting at
position *offset*. Note that *offset* is a required argument.
A negative *offset* counts from the end of *buffer*.


.. function:: unpack(format, buffer)
Expand All @@ -84,6 +85,7 @@ The module defines the following exception and functions:
string *format*. The result is a tuple even if it contains exactly one
item. The buffer's size in bytes, starting at position *offset*, must be at
least the size required by the format, as reflected by :func:`calcsize`.
A negative *offset* counts from the end of *buffer*.


.. function:: iter_unpack(format, buffer)
Expand Down
19 changes: 10 additions & 9 deletions Doc/library/tkinter.dnd.rst
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,22 @@ a single application, within the same window or between windows. To enable an
object to be dragged, you must create an event binding for it that starts the
drag-and-drop process. Typically, you bind a ButtonPress event to a callback
function that you write (see :ref:`Bindings-and-Events`). The function should
call :func:`dnd_start`, where 'source' is the object to be dragged, and 'event'
call :func:`dnd_start`, where *source* is the object to be dragged, and *event*
is the event that invoked the call (the argument to your callback function).

Selection of a target object occurs as follows:

#. Top-down search of area under mouse for target widget
#. Top-down search of the area under the mouse for a target widget:

* Target widget should have a callable *dnd_accept* attribute
* If *dnd_accept* is not present or returns ``None``, search moves to parent widget
* If no target widget is found, then the target object is ``None``
* the target widget should have a callable *dnd_accept* attribute;
* if *dnd_accept* is not present or returns ``None``,
the search moves to the parent widget;
* if no target widget is found, the target object is ``None``.

2. Call to *<old_target>.dnd_leave(source, event)*
#. Call to *<new_target>.dnd_enter(source, event)*
#. Call to *<target>.dnd_commit(source, event)* to notify of drop
#. Call to *<source>.dnd_end(target, event)* to signal end of drag-and-drop
#. Call to ``<old_target>.dnd_leave(source, event)``.
#. Call to ``<new_target>.dnd_enter(source, event)``.
#. Call to ``<target>.dnd_commit(source, event)`` to notify of the drop.
#. Call to ``<source>.dnd_end(target, event)`` to signal the end of drag-and-drop.


.. class:: DndHandler(source, event)
Expand Down
Loading
Loading