-
-
Notifications
You must be signed in to change notification settings - Fork 30.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make pathlib ABCs usable by zipfile.Path #128520
Labels
Comments
barneygale
added
type-feature
A feature request or enhancement
topic-pathlib
and removed
type-feature
A feature request or enhancement
labels
Jan 5, 2025
barneygale
added a commit
to barneygale/cpython
that referenced
this issue
Jan 5, 2025
In the private pathlib ABCs, rename `PurePathBase` to `JoinablePath`, and split `PathBase` into `ReadablePath` and `WritablePath`. This improves the API fit for read-only virtual filesystems. The split of `PathBase` entails a similar split of `CopyWorker` (implements copying) and the test cases in `test_pathlib_abc`. For a couple of reasons, this isn't quite possible yet. In a later patch, we'll make `WritablePath` inherit directly from `JoinablePath` rather than `ReadablePath`.
barneygale
added a commit
to barneygale/cpython
that referenced
this issue
Jan 5, 2025
In the private pathlib ABCs, rename `PurePathBase` to `JoinablePath`, and split `PathBase` into `ReadablePath` and `WritablePath`. This improves the API fit for read-only virtual filesystems. The split of `PathBase` entails a similar split of `CopyWorker` (implements copying) and the test cases in `test_pathlib_abc`. For a couple of reasons, this isn't quite possible yet. In a later patch, we'll make `WritablePath` inherit directly from `JoinablePath` rather than `ReadablePath`.
barneygale
changed the title
Prepare pathlib ABCs for PEP
Make pathlib ABCs usable by zipfile.Path
Jan 5, 2025
picnixz
added
stdlib
Python modules in the Lib dir
type-feature
A feature request or enhancement
and removed
type-feature
A feature request or enhancement
labels
Jan 6, 2025
barneygale
added a commit
that referenced
this issue
Jan 11, 2025
In the private pathlib ABCs, rename `PurePathBase` to `JoinablePath`, and split `PathBase` into `ReadablePath` and `WritablePath`. This improves the API fit for read-only virtual filesystems. The split of `PathBase` entails a similar split of `CopyWorker` (implements copying) and the test cases in `test_pathlib_abc`. In a later patch, we'll make `WritablePath` inherit directly from `JoinablePath` rather than `ReadablePath`. For a couple of reasons, this isn't quite possible yet.
barneygale
added a commit
to barneygale/cpython
that referenced
this issue
Jan 11, 2025
Convert `JoinablePath`, `ReadablePath` and `WritablePath` to real ABCs derived from `abc.ABC`. Make `JoinablePath.parser` abstract, rather than defaulting to `posixpath`. Register `PurePath` and `Path` as virtual subclasses of the ABCs rather than deriving. This avoids a hit to path object instantiation performance.
barneygale
added a commit
to barneygale/cpython
that referenced
this issue
Jan 19, 2025
…blePath` 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. - `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 pythonGH-125413 is resolved, we'll be able to move the `CopyReader` functionality into `ReadablePath.info` and eliminate `ReadablePath._copy_reader`. 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()`.
barneygale
added a commit
to barneygale/cpython
that referenced
this issue
Jan 19, 2025
…blePath` 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 pythonGH-125413 is resolved, we'll be able to move the `CopyReader` functionality into `ReadablePath.info` and eliminate `ReadablePath._copy_reader`.
barneygale
added a commit
to barneygale/cpython
that referenced
this issue
Jan 19, 2025
barneygale
added a commit
that referenced
this issue
Jan 21, 2025
…h` (#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`.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Feature or enhancement
This issue covers the final tasks needed to make the pathlib ABCs worthy of using in
zipfile.Path
(i.e.zipp.Path
).Tasks
PurePathBase
toJoinablePath
, and splitPathBase
intoReadablePath
andWritablePath
WritablePath
a sibling (not subclass) ofReadablePath
pathlib._abc.WritablePath
a sibling ofReadablePath
#129014ReadablePath.info
pathlib.Path.info
attribute #127730Dummy*
classes with simplezipfile.Path
-like implementationWritablePath
copy()
testsReadablePath.info
; removeReadablePath._copy_reader
abc.ABC
fromJoinablePath
, and makeparser
abstractabc.ABC
inpathlib._abc
#128745 [ ]Discussion: https://discuss.python.org/t/make-pathlib-extensible/3428
Linked PRs
abc.ABC
inpathlib._abc
#128745pathlib._abc.WritablePath
a sibling ofReadablePath
#129014The text was updated successfully, but these errors were encountered: