-
-
Notifications
You must be signed in to change notification settings - Fork 32.5k
GH-128520: pathlib ABCs: improve protocol for 'openable' objects #134101
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
base: main
Are you sure you want to change the base?
Conversation
Rename `pathlib._os.magic_open()` to `vfsopen()`. The new name is a bit less abstract, and it aligns with the `vfspath()` method added in 5dbd27d. Per discussion on discourse[^1], adjust `vfsopen()` so that the following methods may be called: - `__open_reader__()` - `__open_writer__(mode)` - `__open_updater__(mode)` These three methods return readable, writable, and full duplex file objects respectively. In the 'writer' method, *mode* is either 'a', 'w' or 'x'. In the 'updater' method, *mode* is either 'r' or 'w'. Also stop trying built-in `open()` first. I don't know whether this is a good idea or not, so it's best to leave it out for now. In the pathlib ABCs, replace `ReadablePath.__open_rb__()` with `__open_reader__()`, and replace `WritablePath.__open_wb__()` with `__open_writer__()`. [^1]: https://discuss.python.org/t/open-able-objects/90238
Co-authored-by: Petr Viktorin <encukou@gmail.com>
Thanks for the review @encukou, sorry it took me ages to address your feedback. |
if text: | ||
if buffering != -1: | ||
raise ValueError("buffer size can't be customized") | ||
elif text: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do we need elif
here?
Maybe it will be better to check buffering
value before first use of text
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need test on buffering
values?
info = self.info.resolve() | ||
if not info.exists(): | ||
raise FileNotFoundError(errno.ENOENT, "File not found", self) | ||
elif info.is_dir(): | ||
raise IsADirectoryError(errno.EISDIR, "Is a directory", self) | ||
return self.zip_file.open(info.zip_info, 'r') | ||
return self.zip_file.open(info.zip_info) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it better to omit 'r'
?
Rename
pathlib._os.magic_open()
tovfsopen()
. The new name is a bit less abstract, and it aligns with thevfspath()
method added in 5dbd27d.Per discussion on discourse1, adjust
vfsopen()
so that the following methods may be called:__open_reader__()
__open_writer__(mode)
__open_updater__(mode)
These three methods return readable, writable, and full duplex file objects respectively. In the 'writer' method, mode is either 'a', 'w' or 'x'. In the 'updater' method, mode is either 'r' or 'w'.
Also stop trying built-in
open()
first. I don't know whether this is a good idea or not, so it's best to leave it out for now.In the pathlib ABCs, replace
ReadablePath.__open_rb__()
with__open_reader__()
, and replaceWritablePath.__open_wb__()
with__open_writer__()
.Footnotes
https://discuss.python.org/t/open-able-objects/90238 ↩