mirror of
https://github.com/python/cpython.git
synced 2025-10-15 11:22:18 +00:00
Issue #19775: Add a samefile() method to pathlib Path objects.
Initial patch by Vajrasky Kok.
This commit is contained in:
parent
38acd4c028
commit
43e3d9409d
4 changed files with 53 additions and 0 deletions
|
@ -884,6 +884,25 @@ call fails (for example because the path doesn't exist):
|
||||||
Remove this directory. The directory must be empty.
|
Remove this directory. The directory must be empty.
|
||||||
|
|
||||||
|
|
||||||
|
.. method:: Path.samefile(other_path)
|
||||||
|
|
||||||
|
Return whether this path points to the same file as *other_path*, which
|
||||||
|
can be either a Path object, or a string. The semantics are similar
|
||||||
|
to :func:`os.path.samefile` and :func:`os.path.samestat`.
|
||||||
|
|
||||||
|
An :exc:`OSError` can be raised if either file cannot be accessed for some
|
||||||
|
reason.
|
||||||
|
|
||||||
|
>>> p = Path('spam')
|
||||||
|
>>> q = Path('eggs')
|
||||||
|
>>> p.samefile(q)
|
||||||
|
False
|
||||||
|
>>> p.samefile('spam')
|
||||||
|
True
|
||||||
|
|
||||||
|
.. versionadded:: 3.5
|
||||||
|
|
||||||
|
|
||||||
.. method:: Path.symlink_to(target, target_is_directory=False)
|
.. method:: Path.symlink_to(target, target_is_directory=False)
|
||||||
|
|
||||||
Make this path a symbolic link to *target*. Under Windows,
|
Make this path a symbolic link to *target*. Under Windows,
|
||||||
|
|
|
@ -961,6 +961,17 @@ class Path(PurePath):
|
||||||
"""
|
"""
|
||||||
return cls(os.getcwd())
|
return cls(os.getcwd())
|
||||||
|
|
||||||
|
def samefile(self, other_path):
|
||||||
|
"""Return whether `other_file` is the same or not as this file.
|
||||||
|
(as returned by os.path.samefile(file, other_file)).
|
||||||
|
"""
|
||||||
|
st = self.stat()
|
||||||
|
try:
|
||||||
|
other_st = other_path.stat()
|
||||||
|
except AttributeError:
|
||||||
|
other_st = os.stat(other_path)
|
||||||
|
return os.path.samestat(st, other_st)
|
||||||
|
|
||||||
def iterdir(self):
|
def iterdir(self):
|
||||||
"""Iterate over the files in this directory. Does not yield any
|
"""Iterate over the files in this directory. Does not yield any
|
||||||
result for the special paths '.' and '..'.
|
result for the special paths '.' and '..'.
|
||||||
|
|
|
@ -1251,6 +1251,26 @@ class _BasePathTest(object):
|
||||||
p = self.cls.cwd()
|
p = self.cls.cwd()
|
||||||
self._test_cwd(p)
|
self._test_cwd(p)
|
||||||
|
|
||||||
|
def test_samefile(self):
|
||||||
|
fileA_path = os.path.join(BASE, 'fileA')
|
||||||
|
fileB_path = os.path.join(BASE, 'dirB', 'fileB')
|
||||||
|
p = self.cls(fileA_path)
|
||||||
|
pp = self.cls(fileA_path)
|
||||||
|
q = self.cls(fileB_path)
|
||||||
|
self.assertTrue(p.samefile(fileA_path))
|
||||||
|
self.assertTrue(p.samefile(pp))
|
||||||
|
self.assertFalse(p.samefile(fileB_path))
|
||||||
|
self.assertFalse(p.samefile(q))
|
||||||
|
# Test the non-existent file case
|
||||||
|
non_existent = os.path.join(BASE, 'foo')
|
||||||
|
r = self.cls(non_existent)
|
||||||
|
self.assertRaises(FileNotFoundError, p.samefile, r)
|
||||||
|
self.assertRaises(FileNotFoundError, p.samefile, non_existent)
|
||||||
|
self.assertRaises(FileNotFoundError, r.samefile, p)
|
||||||
|
self.assertRaises(FileNotFoundError, r.samefile, non_existent)
|
||||||
|
self.assertRaises(FileNotFoundError, r.samefile, r)
|
||||||
|
self.assertRaises(FileNotFoundError, r.samefile, non_existent)
|
||||||
|
|
||||||
def test_empty_path(self):
|
def test_empty_path(self):
|
||||||
# The empty path points to '.'
|
# The empty path points to '.'
|
||||||
p = self.cls('')
|
p = self.cls('')
|
||||||
|
|
|
@ -84,6 +84,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #19775: Add a samefile() method to pathlib Path objects. Initial
|
||||||
|
patch by Vajrasky Kok.
|
||||||
|
|
||||||
- Issue #21398: Fix an unicode error in the pydoc pager when the documentation
|
- Issue #21398: Fix an unicode error in the pydoc pager when the documentation
|
||||||
contains characters not encodable to the stdout encoding.
|
contains characters not encodable to the stdout encoding.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue