mirror of
https://github.com/python/cpython
synced 2024-10-14 09:01:41 +00:00
GH-114610: Fix pathlib.PurePath.with_stem('')
handling of file extensions (#114612)
Raise `ValueError` if `with_stem('')` is called on a path with a file extension. Paths may only have an empty stem if they also have an empty suffix.
This commit is contained in:
parent
53c5c17e0a
commit
e3dedeae7a
|
@ -313,7 +313,14 @@ def with_name(self, name):
|
||||||
|
|
||||||
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."""
|
||||||
return self.with_name(stem + self.suffix)
|
suffix = self.suffix
|
||||||
|
if not suffix:
|
||||||
|
return self.with_name(stem)
|
||||||
|
elif not stem:
|
||||||
|
# If the suffix is non-empty, we can't make the stem empty.
|
||||||
|
raise ValueError(f"{self!r} has a non-empty suffix")
|
||||||
|
else:
|
||||||
|
return self.with_name(stem + suffix)
|
||||||
|
|
||||||
def with_suffix(self, suffix):
|
def with_suffix(self, suffix):
|
||||||
"""Return a new path with the file suffix changed. If the path
|
"""Return a new path with the file suffix changed. If the path
|
||||||
|
@ -324,6 +331,7 @@ def with_suffix(self, suffix):
|
||||||
if not suffix:
|
if not suffix:
|
||||||
return self.with_name(stem)
|
return self.with_name(stem)
|
||||||
elif not stem:
|
elif not stem:
|
||||||
|
# If the stem is empty, we can't make the suffix non-empty.
|
||||||
raise ValueError(f"{self!r} has an empty name")
|
raise ValueError(f"{self!r} has an empty name")
|
||||||
elif suffix.startswith('.') and len(suffix) > 1:
|
elif suffix.startswith('.') and len(suffix) > 1:
|
||||||
return self.with_name(stem + suffix)
|
return self.with_name(stem + suffix)
|
||||||
|
|
|
@ -957,6 +957,8 @@ def test_with_stem_empty(self):
|
||||||
self.assertEqual(P('/').with_stem('d'), P('/d'))
|
self.assertEqual(P('/').with_stem('d'), P('/d'))
|
||||||
self.assertEqual(P('a/b').with_stem(''), P('a/'))
|
self.assertEqual(P('a/b').with_stem(''), P('a/'))
|
||||||
self.assertEqual(P('a/b').with_stem('.'), P('a/.'))
|
self.assertEqual(P('a/b').with_stem('.'), P('a/.'))
|
||||||
|
self.assertRaises(ValueError, P('foo.gz').with_stem, '')
|
||||||
|
self.assertRaises(ValueError, P('/a/b/foo.gz').with_stem, '')
|
||||||
|
|
||||||
def test_with_stem_seps(self):
|
def test_with_stem_seps(self):
|
||||||
P = self.cls
|
P = self.cls
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
Fix bug where :meth:`pathlib.PurePath.with_stem` converted a non-empty path
|
||||||
|
suffix to a stem when given an empty *stem* argument. It now raises
|
||||||
|
:exc:`ValueError`, just like :meth:`pathlib.PurePath.with_suffix` does when
|
||||||
|
called on a path with an empty stem, given a non-empty *suffix* argument.
|
Loading…
Reference in a new issue