GH-127381: pathlib ABCs: remove PathBase.cwd() and home() (#127427)

These classmethods presume that the user has retained the original
`__init__()` signature, which may not be the case. Also, many virtual
filesystems don't provide current or home directories.
This commit is contained in:
Barney Gale 2024-11-30 18:39:39 +00:00 committed by GitHub
parent 4e0a4cafe8
commit 328187cc4f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 17 additions and 17 deletions

View file

@ -735,27 +735,12 @@ class PathBase(PurePathBase):
# Treat the root directory as the current working directory.
return self.with_segments('/', *self._raw_paths)
@classmethod
def cwd(cls):
"""Return a new path pointing to the current working directory."""
# We call 'absolute()' rather than using 'os.getcwd()' directly to
# enable users to replace the implementation of 'absolute()' in a
# subclass and benefit from the new behaviour here. This works because
# os.path.abspath('.') == os.getcwd().
return cls().absolute()
def expanduser(self):
""" Return a new path with expanded ~ and ~user constructs
(as returned by os.path.expanduser)
"""
raise UnsupportedOperation(self._unsupported_msg('expanduser()'))
@classmethod
def home(cls):
"""Return a new path pointing to expanduser('~').
"""
return cls("~").expanduser()
def readlink(self):
"""
Return the path to which the symbolic link points.

View file

@ -726,6 +726,14 @@ class Path(PathBase, PurePath):
tail.extend(self._tail)
return self._from_parsed_parts(drive, root, tail)
@classmethod
def cwd(cls):
"""Return a new path pointing to the current working directory."""
cwd = os.getcwd()
path = cls(cwd)
path._str = cwd # getcwd() returns a normalized path
return path
def resolve(self, strict=False):
"""
Make the path absolute, resolving all symlinks on the way and also
@ -907,6 +915,15 @@ class Path(PathBase, PurePath):
return self
@classmethod
def home(cls):
"""Return a new path pointing to expanduser('~').
"""
homedir = os.path.expanduser("~")
if homedir == "~":
raise RuntimeError("Could not determine home directory.")
return cls(homedir)
@classmethod
def from_uri(cls, uri):
"""Return a new path from the given 'file' URI."""

View file

@ -1371,9 +1371,7 @@ class PathBaseTest(PurePathBaseTest):
self.assertRaises(e, p.rglob, '*')
self.assertRaises(e, lambda: list(p.walk()))
self.assertRaises(e, p.absolute)
self.assertRaises(e, P.cwd)
self.assertRaises(e, p.expanduser)
self.assertRaises(e, p.home)
self.assertRaises(e, p.readlink)
self.assertRaises(e, p.symlink_to, 'foo')
self.assertRaises(e, p.hardlink_to, 'foo')