mirror of
https://github.com/python/cpython.git
synced 2025-07-19 09:15:34 +00:00
GH-113568: Stop raising deprecation warnings from pathlib ABCs (#113757)
This commit is contained in:
parent
d99d871225
commit
3375dfed40
5 changed files with 46 additions and 24 deletions
|
@ -166,6 +166,33 @@ class PurePath(_abc.PurePathBase):
|
||||||
return NotImplemented
|
return NotImplemented
|
||||||
return self._parts_normcase >= other._parts_normcase
|
return self._parts_normcase >= other._parts_normcase
|
||||||
|
|
||||||
|
def relative_to(self, other, /, *_deprecated, walk_up=False):
|
||||||
|
"""Return the relative path to another path identified by the passed
|
||||||
|
arguments. If the operation is not possible (because this is not
|
||||||
|
related to the other path), raise ValueError.
|
||||||
|
|
||||||
|
The *walk_up* parameter controls whether `..` may be used to resolve
|
||||||
|
the path.
|
||||||
|
"""
|
||||||
|
if _deprecated:
|
||||||
|
msg = ("support for supplying more than one positional argument "
|
||||||
|
"to pathlib.PurePath.relative_to() is deprecated and "
|
||||||
|
"scheduled for removal in Python 3.14")
|
||||||
|
warnings.warn(msg, DeprecationWarning, stacklevel=2)
|
||||||
|
other = self.with_segments(other, *_deprecated)
|
||||||
|
return _abc.PurePathBase.relative_to(self, other, walk_up=walk_up)
|
||||||
|
|
||||||
|
def is_relative_to(self, other, /, *_deprecated):
|
||||||
|
"""Return True if the path is relative to another path or False.
|
||||||
|
"""
|
||||||
|
if _deprecated:
|
||||||
|
msg = ("support for supplying more than one argument to "
|
||||||
|
"pathlib.PurePath.is_relative_to() is deprecated and "
|
||||||
|
"scheduled for removal in Python 3.14")
|
||||||
|
warnings.warn(msg, DeprecationWarning, stacklevel=2)
|
||||||
|
other = self.with_segments(other, *_deprecated)
|
||||||
|
return _abc.PurePathBase.is_relative_to(self, other)
|
||||||
|
|
||||||
def as_uri(self):
|
def as_uri(self):
|
||||||
"""Return the path as a URI."""
|
"""Return the path as a URI."""
|
||||||
if not self.is_absolute():
|
if not self.is_absolute():
|
||||||
|
|
|
@ -2,7 +2,6 @@ import functools
|
||||||
import ntpath
|
import ntpath
|
||||||
import posixpath
|
import posixpath
|
||||||
import sys
|
import sys
|
||||||
import warnings
|
|
||||||
from _collections_abc import Sequence
|
from _collections_abc import Sequence
|
||||||
from errno import ENOENT, ENOTDIR, EBADF, ELOOP, EINVAL
|
from errno import ENOENT, ENOTDIR, EBADF, ELOOP, EINVAL
|
||||||
from itertools import chain
|
from itertools import chain
|
||||||
|
@ -383,7 +382,7 @@ class PurePathBase:
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"Invalid suffix {suffix!r}")
|
raise ValueError(f"Invalid suffix {suffix!r}")
|
||||||
|
|
||||||
def relative_to(self, other, /, *_deprecated, walk_up=False):
|
def relative_to(self, other, *, 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
|
||||||
related to the other path), raise ValueError.
|
related to the other path), raise ValueError.
|
||||||
|
@ -391,13 +390,7 @@ class PurePathBase:
|
||||||
The *walk_up* parameter controls whether `..` may be used to resolve
|
The *walk_up* parameter controls whether `..` may be used to resolve
|
||||||
the path.
|
the path.
|
||||||
"""
|
"""
|
||||||
if _deprecated:
|
if not isinstance(other, PurePathBase):
|
||||||
msg = ("support for supplying more than one positional argument "
|
|
||||||
"to pathlib.PurePath.relative_to() is deprecated and "
|
|
||||||
"scheduled for removal in Python 3.14")
|
|
||||||
warnings.warn(msg, DeprecationWarning, stacklevel=2)
|
|
||||||
other = self.with_segments(other, *_deprecated)
|
|
||||||
elif not isinstance(other, PurePathBase):
|
|
||||||
other = self.with_segments(other)
|
other = self.with_segments(other)
|
||||||
for step, path in enumerate(chain([other], other.parents)):
|
for step, path in enumerate(chain([other], other.parents)):
|
||||||
if path == self or path in self.parents:
|
if path == self or path in self.parents:
|
||||||
|
@ -411,16 +404,10 @@ class PurePathBase:
|
||||||
parts = ['..'] * step + self._tail[len(path._tail):]
|
parts = ['..'] * step + self._tail[len(path._tail):]
|
||||||
return self._from_parsed_parts('', '', parts)
|
return self._from_parsed_parts('', '', parts)
|
||||||
|
|
||||||
def is_relative_to(self, other, /, *_deprecated):
|
def is_relative_to(self, other):
|
||||||
"""Return True if the path is relative to another path or False.
|
"""Return True if the path is relative to another path or False.
|
||||||
"""
|
"""
|
||||||
if _deprecated:
|
if not isinstance(other, PurePathBase):
|
||||||
msg = ("support for supplying more than one argument to "
|
|
||||||
"pathlib.PurePath.is_relative_to() is deprecated and "
|
|
||||||
"scheduled for removal in Python 3.14")
|
|
||||||
warnings.warn(msg, DeprecationWarning, stacklevel=2)
|
|
||||||
other = self.with_segments(other, *_deprecated)
|
|
||||||
elif not isinstance(other, PurePathBase):
|
|
||||||
other = self.with_segments(other)
|
other = self.with_segments(other)
|
||||||
return other == self or other in self.parents
|
return other == self or other in self.parents
|
||||||
|
|
||||||
|
|
|
@ -214,6 +214,19 @@ class PurePathTest(test_pathlib_abc.DummyPurePathTest):
|
||||||
self.assertEqual(q, p)
|
self.assertEqual(q, p)
|
||||||
self.assertEqual(repr(q), r)
|
self.assertEqual(repr(q), r)
|
||||||
|
|
||||||
|
def test_relative_to_several_args(self):
|
||||||
|
P = self.cls
|
||||||
|
p = P('a/b')
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
p.relative_to('a', 'b')
|
||||||
|
p.relative_to('a', 'b', walk_up=True)
|
||||||
|
|
||||||
|
def test_is_relative_to_several_args(self):
|
||||||
|
P = self.cls
|
||||||
|
p = P('a/b')
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
p.is_relative_to('a', 'b')
|
||||||
|
|
||||||
|
|
||||||
class PurePosixPathTest(PurePathTest):
|
class PurePosixPathTest(PurePathTest):
|
||||||
cls = pathlib.PurePosixPath
|
cls = pathlib.PurePosixPath
|
||||||
|
|
|
@ -542,10 +542,6 @@ class DummyPurePathTest(unittest.TestCase):
|
||||||
self.assertEqual(p.relative_to('a/b/c', walk_up=True), P('..'))
|
self.assertEqual(p.relative_to('a/b/c', walk_up=True), P('..'))
|
||||||
self.assertEqual(p.relative_to(P('c'), walk_up=True), P('../a/b'))
|
self.assertEqual(p.relative_to(P('c'), walk_up=True), P('../a/b'))
|
||||||
self.assertEqual(p.relative_to('c', walk_up=True), P('../a/b'))
|
self.assertEqual(p.relative_to('c', walk_up=True), P('../a/b'))
|
||||||
# With several args.
|
|
||||||
with self.assertWarns(DeprecationWarning):
|
|
||||||
p.relative_to('a', 'b')
|
|
||||||
p.relative_to('a', 'b', walk_up=True)
|
|
||||||
# Unrelated paths.
|
# Unrelated paths.
|
||||||
self.assertRaises(ValueError, p.relative_to, P('c'))
|
self.assertRaises(ValueError, p.relative_to, P('c'))
|
||||||
self.assertRaises(ValueError, p.relative_to, P('a/b/c'))
|
self.assertRaises(ValueError, p.relative_to, P('a/b/c'))
|
||||||
|
@ -607,9 +603,6 @@ class DummyPurePathTest(unittest.TestCase):
|
||||||
self.assertTrue(p.is_relative_to('a/'))
|
self.assertTrue(p.is_relative_to('a/'))
|
||||||
self.assertTrue(p.is_relative_to(P('a/b')))
|
self.assertTrue(p.is_relative_to(P('a/b')))
|
||||||
self.assertTrue(p.is_relative_to('a/b'))
|
self.assertTrue(p.is_relative_to('a/b'))
|
||||||
# With several args.
|
|
||||||
with self.assertWarns(DeprecationWarning):
|
|
||||||
p.is_relative_to('a', 'b')
|
|
||||||
# Unrelated paths.
|
# Unrelated paths.
|
||||||
self.assertFalse(p.is_relative_to(P('c')))
|
self.assertFalse(p.is_relative_to(P('c')))
|
||||||
self.assertFalse(p.is_relative_to(P('a/b/c')))
|
self.assertFalse(p.is_relative_to(P('a/b/c')))
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Raise deprecation warnings from :class:`pathlib.PurePath` and not its
|
||||||
|
private base class ``PurePathBase``.
|
Loading…
Add table
Add a link
Reference in a new issue