diff options
author | Barney Gale <barney.gale@gmail.com> | 2025-01-21 18:35:37 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-21 18:35:37 +0000 |
commit | 01d91500ca5b40bd84ef27fdf1f858a25c602bdb (patch) | |
tree | 9f3b7323b595bdc7dc18484a33a58d6be178eb43 /Python/legacy_tracing.c | |
parent | 3d7c0e5366c941f29350897ee97469f3aa9d6eab (diff) | |
download | cpython-01d91500ca5b40bd84ef27fdf1f858a25c602bdb.tar.gz cpython-01d91500ca5b40bd84ef27fdf1f858a25c602bdb.zip |
GH-128520: Make `pathlib._abc.WritablePath` a sibling of `ReadablePath` (#129014)
In the private pathlib ABCs, support write-only virtual filesystems by
making `WritablePath` inherit directly from `JoinablePath`, rather than
subclassing `ReadablePath`.
There are two complications:
- `ReadablePath.open()` applies to both reading and writing
- `ReadablePath.copy` is secretly an object that supports the *read* side
of copying, whereas `WritablePath.copy` is a different kind of object
supporting the *write* side
We untangle these as follow:
- A new `pathlib._abc.magic_open()` function replaces the `open()` method,
which is dropped from the ABCs but remains in `pathlib.Path`. The
function works like `io.open()`, but additionally accepts objects with
`__open_rb__()` or `__open_wb__()` methods as appropriate for the mode.
These new dunders are made abstract methods of `ReadablePath` and
`WritablePath` respectively. If the pathlib ABCs are made public, we
could consider blessing an "openable" protocol and supporting it in
`io.open()`, removing the need for `pathlib._abc.magic_open()`.
- `ReadablePath.copy` becomes a true method, whereas `WritablePath.copy` is
deleted. A new `ReadablePath._copy_reader` property provides a
`CopyReader` object, and similarly `WritablePath._copy_writer` is a
`CopyWriter` object. Once GH-125413 is resolved, we'll be able to move
the `CopyReader` functionality into `ReadablePath.info` and eliminate
`ReadablePath._copy_reader`.
Diffstat (limited to 'Python/legacy_tracing.c')
0 files changed, 0 insertions, 0 deletions