From 0ae6340fd7db9a8c074d650aed77116cda158368 Mon Sep 17 00:00:00 2001 From: scivision Date: Wed, 13 Sep 2023 20:35:12 -0400 Subject: [PATCH] pathlib: add Path.expanduser() Signed-off-by: Michael Hirsch --- python-stdlib/pathlib/pathlib.py | 7 +++++++ python-stdlib/pathlib/tests/test_pathlib.py | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/python-stdlib/pathlib/pathlib.py b/python-stdlib/pathlib/pathlib.py index d01d81d3..68cdfe12 100644 --- a/python-stdlib/pathlib/pathlib.py +++ b/python-stdlib/pathlib/pathlib.py @@ -184,6 +184,13 @@ class Path: index = -len(self.suffix) or None return Path(self._path[:index] + suffix) + def expanduser(self): + if self._path == "~" or self._path.startswith("~" + _SEP): + return Path(os.getenv("HOME") + self._path[1:]) + if self._path[0] == "~": + raise RuntimeError("User home directory expansion not supported.") + return self + @property def stem(self): return self.name.rsplit(".", 1)[0] diff --git a/python-stdlib/pathlib/tests/test_pathlib.py b/python-stdlib/pathlib/tests/test_pathlib.py index c52cd970..24ffa27a 100644 --- a/python-stdlib/pathlib/tests/test_pathlib.py +++ b/python-stdlib/pathlib/tests/test_pathlib.py @@ -322,3 +322,11 @@ class TestPathlib(unittest.TestCase): self.assertTrue(Path("foo/test").with_suffix(".tar") == Path("foo/test.tar")) self.assertTrue(Path("foo/bar.bin").with_suffix(".txt") == Path("foo/bar.txt")) self.assertTrue(Path("bar.txt").with_suffix("") == Path("bar")) + + def test_expanduser(self): + self.assertFalse(str(Path("~").expanduser()) == "~") + self.assertTrue(str(Path("~").expanduser()) == os.getenv("HOME")) + self.assertTrue(str(Path("~/foo").expanduser()) == os.getenv("HOME") + "/foo") + + with self.assertRaises(RuntimeError): + Path("~foo").expanduser()