https://github.com/python/cpython/commit/328187cc4fcdd578db42cf6a16c197c3382157a7
commit: 328187cc4fcdd578db42cf6a16c197c3382157a7
branch: main
author: Barney Gale <[email protected]>
committer: barneygale <[email protected]>
date: 2024-11-30T18:39:39Z
summary:
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.
files:
M Lib/pathlib/_abc.py
M Lib/pathlib/_local.py
M Lib/test/test_pathlib/test_pathlib_abc.py
diff --git a/Lib/pathlib/_abc.py b/Lib/pathlib/_abc.py
index 697f32985ff652..2b314b6c9a16bf 100644
--- a/Lib/pathlib/_abc.py
+++ b/Lib/pathlib/_abc.py
@@ -735,27 +735,12 @@ def absolute(self):
# 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.
diff --git a/Lib/pathlib/_local.py b/Lib/pathlib/_local.py
index 25c1e3f44ea7e8..b5d9dc49f58463 100644
--- a/Lib/pathlib/_local.py
+++ b/Lib/pathlib/_local.py
@@ -726,6 +726,14 @@ def absolute(self):
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 @@ def expanduser(self):
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."""
diff --git a/Lib/test/test_pathlib/test_pathlib_abc.py
b/Lib/test/test_pathlib/test_pathlib_abc.py
index 7ca35e3dc7ee00..af94ac039808f0 100644
--- a/Lib/test/test_pathlib/test_pathlib_abc.py
+++ b/Lib/test/test_pathlib/test_pathlib_abc.py
@@ -1371,9 +1371,7 @@ def test_unsupported_operation(self):
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')
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]