aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/pathlib/_abc.py
diff options
context:
space:
mode:
authorBarney Gale <barney.gale@gmail.com>2024-01-06 20:50:25 +0000
committerGitHub <noreply@github.com>2024-01-06 20:50:25 +0000
commit1e914ad89de707b8a69b03d7b36f5022f4c07c78 (patch)
treedcd3295578b634ff4e8756bec06c6b839fb9d90a /Lib/pathlib/_abc.py
parent2205510e7b32eb4c7bbe1982d7b5dfcbfb85cffe (diff)
downloadcpython-1e914ad89de707b8a69b03d7b36f5022f4c07c78.tar.gz
cpython-1e914ad89de707b8a69b03d7b36f5022f4c07c78.zip
GH-113528: Deoptimise `pathlib._abc.PurePathBase.name` (#113531)
Replace usage of `_from_parsed_parts()` with `with_segments()` in `with_name()`, and take a similar approach in `name` for consistency's sake.
Diffstat (limited to 'Lib/pathlib/_abc.py')
-rw-r--r--Lib/pathlib/_abc.py13
1 files changed, 6 insertions, 7 deletions
diff --git a/Lib/pathlib/_abc.py b/Lib/pathlib/_abc.py
index b1204e88044..1ce37130882 100644
--- a/Lib/pathlib/_abc.py
+++ b/Lib/pathlib/_abc.py
@@ -313,10 +313,10 @@ class PurePathBase:
@property
def name(self):
"""The final path component, if any."""
- tail = self._tail
- if not tail:
+ path_str = str(self)
+ if not path_str or path_str == '.':
return ''
- return tail[-1]
+ return self.pathmod.basename(path_str)
@property
def suffix(self):
@@ -360,11 +360,10 @@ class PurePathBase:
m = self.pathmod
if not name or m.sep in name or (m.altsep and m.altsep in name) or name == '.':
raise ValueError(f"Invalid name {name!r}")
- tail = self._tail.copy()
- if not tail:
+ parent, old_name = m.split(str(self))
+ if not old_name or old_name == '.':
raise ValueError(f"{self!r} has an empty name")
- tail[-1] = name
- return self._from_parsed_parts(self.drive, self.root, tail)
+ return self.with_segments(parent, name)
def with_stem(self, stem):
"""Return a new path with the stem changed."""