GH-128520: pathlib ABCs: tweak protocol for virtual path strings (#134104)
Some checks are pending
Tests / Change detection (push) Waiting to run
Tests / Docs (push) Blocked by required conditions
Tests / Windows MSI (push) Blocked by required conditions
Tests / Check if Autoconf files are up to date (push) Blocked by required conditions
Tests / Check if generated files are up to date (push) Blocked by required conditions
Tests / (push) Blocked by required conditions
Tests / Ubuntu SSL tests with OpenSSL (push) Blocked by required conditions
Tests / Ubuntu SSL tests with AWS-LC (push) Blocked by required conditions
Tests / WASI (push) Blocked by required conditions
Tests / Hypothesis tests on Ubuntu (push) Blocked by required conditions
Tests / Address sanitizer (push) Blocked by required conditions
Tests / Sanitizers (push) Blocked by required conditions
Tests / Cross build Linux (push) Blocked by required conditions
Tests / CIFuzz (push) Blocked by required conditions
Tests / All required checks pass (push) Blocked by required conditions
Lint / lint (push) Waiting to run
mypy / Run mypy on Lib/_pyrepl (push) Waiting to run
mypy / Run mypy on Lib/test/libregrtest (push) Waiting to run
mypy / Run mypy on Lib/tomllib (push) Waiting to run
mypy / Run mypy on Tools/build (push) Waiting to run
mypy / Run mypy on Tools/cases_generator (push) Waiting to run
mypy / Run mypy on Tools/clinic (push) Waiting to run
mypy / Run mypy on Tools/jit (push) Waiting to run
mypy / Run mypy on Tools/peg_generator (push) Waiting to run

Adjust `pathlib._os.vfspath()` so that it doesn't try `os.fsdecode()`. I
don't know that supporting `os.PathLike` arguments is a good idea, so
it's best to leave it out for now.
This commit is contained in:
Barney Gale 2025-07-27 12:47:15 +01:00 committed by GitHub
parent 10a925c86d
commit 2bd4ff0700
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 11 additions and 17 deletions

View file

@ -188,9 +188,6 @@ class PurePath:
def __repr__(self):
return "{}({!r})".format(self.__class__.__name__, self.as_posix())
def __fspath__(self):
return str(self)
def __bytes__(self):
"""Return the bytes representation of the path. This is only
recommended to use under Unix."""
@ -259,6 +256,9 @@ class PurePath:
self._tail) or '.'
return self._str
__fspath__ = __str__
__vfspath__ = __str__
@classmethod
def _format_parsed_parts(cls, drv, root, tail):
if drv or root:

View file

@ -210,24 +210,18 @@ def magic_open(path, mode='r', buffering=-1, encoding=None, errors=None,
raise TypeError(f"{cls.__name__} can't be opened with mode {mode!r}")
def vfspath(path):
def vfspath(obj):
"""
Return the string representation of a virtual path object.
"""
cls = type(obj)
try:
return os.fsdecode(path)
except TypeError:
pass
path_type = type(path)
try:
return path_type.__vfspath__(path)
vfspath_method = cls.__vfspath__
except AttributeError:
if hasattr(path_type, '__vfspath__'):
raise
raise TypeError("expected str, bytes, os.PathLike or JoinablePath "
"object, not " + path_type.__name__)
cls_name = cls.__name__
raise TypeError(f"expected JoinablePath object, not {cls_name}") from None
else:
return vfspath_method(obj)
def ensure_distinct_paths(source, target):

View file

@ -334,4 +334,4 @@ class WritableZipPath(_WritablePath):
zinfo.external_attr = stat.S_IFLNK << 16
if target_is_directory:
zinfo.external_attr |= 0x10
self.zip_file.writestr(zinfo, vfspath(target))
self.zip_file.writestr(zinfo, target)