Skip to content

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

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

barneygale
Copy link
Contributor

@barneygale barneygale commented May 16, 2025

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 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 replace WritablePath.__open_wb__() with __open_writer__().

Footnotes

  1. https://discuss.python.org/t/open-able-objects/90238

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
@barneygale barneygale marked this pull request as ready for review May 16, 2025 18:11
@barneygale
Copy link
Contributor Author

Thanks for the review @encukou, sorry it took me ages to address your feedback.

@barneygale barneygale requested a review from encukou July 20, 2025 16:39
barneygale added a commit to barneygale/cpython that referenced this pull request Jul 20, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants