mirror of
https://github.com/python/cpython.git
synced 2025-07-24 03:35:53 +00:00
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.
This commit is contained in:
parent
2205510e7b
commit
1e914ad89d
2 changed files with 25 additions and 7 deletions
|
@ -166,6 +166,25 @@ class PurePath(_abc.PurePathBase):
|
||||||
return NotImplemented
|
return NotImplemented
|
||||||
return self._parts_normcase >= other._parts_normcase
|
return self._parts_normcase >= other._parts_normcase
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
"""The final path component, if any."""
|
||||||
|
tail = self._tail
|
||||||
|
if not tail:
|
||||||
|
return ''
|
||||||
|
return tail[-1]
|
||||||
|
|
||||||
|
def with_name(self, name):
|
||||||
|
"""Return a new path with the file name changed."""
|
||||||
|
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:
|
||||||
|
raise ValueError(f"{self!r} has an empty name")
|
||||||
|
tail[-1] = name
|
||||||
|
return self._from_parsed_parts(self.drive, self.root, tail)
|
||||||
|
|
||||||
def relative_to(self, other, /, *_deprecated, walk_up=False):
|
def relative_to(self, other, /, *_deprecated, walk_up=False):
|
||||||
"""Return the relative path to another path identified by the passed
|
"""Return the relative path to another path identified by the passed
|
||||||
arguments. If the operation is not possible (because this is not
|
arguments. If the operation is not possible (because this is not
|
||||||
|
|
|
@ -313,10 +313,10 @@ class PurePathBase:
|
||||||
@property
|
@property
|
||||||
def name(self):
|
def name(self):
|
||||||
"""The final path component, if any."""
|
"""The final path component, if any."""
|
||||||
tail = self._tail
|
path_str = str(self)
|
||||||
if not tail:
|
if not path_str or path_str == '.':
|
||||||
return ''
|
return ''
|
||||||
return tail[-1]
|
return self.pathmod.basename(path_str)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def suffix(self):
|
def suffix(self):
|
||||||
|
@ -360,11 +360,10 @@ class PurePathBase:
|
||||||
m = self.pathmod
|
m = self.pathmod
|
||||||
if not name or m.sep in name or (m.altsep and m.altsep in name) or name == '.':
|
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}")
|
raise ValueError(f"Invalid name {name!r}")
|
||||||
tail = self._tail.copy()
|
parent, old_name = m.split(str(self))
|
||||||
if not tail:
|
if not old_name or old_name == '.':
|
||||||
raise ValueError(f"{self!r} has an empty name")
|
raise ValueError(f"{self!r} has an empty name")
|
||||||
tail[-1] = name
|
return self.with_segments(parent, name)
|
||||||
return self._from_parsed_parts(self.drive, self.root, tail)
|
|
||||||
|
|
||||||
def with_stem(self, stem):
|
def with_stem(self, stem):
|
||||||
"""Return a new path with the stem changed."""
|
"""Return a new path with the stem changed."""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue