diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2014-05-13 08:50:15 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2014-05-13 08:50:15 (GMT) |
commit | 43e3d9409de92808b2ef5974b6a9f13eda57033f (patch) | |
tree | 1f8d1a1d379fdd3a0c76b5eae57a215df59e2854 /Lib | |
parent | 38acd4c028f72a80079c27d68c8da2efd059a38d (diff) | |
download | cpython-43e3d9409de92808b2ef5974b6a9f13eda57033f.zip cpython-43e3d9409de92808b2ef5974b6a9f13eda57033f.tar.gz cpython-43e3d9409de92808b2ef5974b6a9f13eda57033f.tar.bz2 |
Issue #19775: Add a samefile() method to pathlib Path objects.
Initial patch by Vajrasky Kok.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/pathlib.py | 11 | ||||
-rw-r--r-- | Lib/test/test_pathlib.py | 20 |
2 files changed, 31 insertions, 0 deletions
diff --git a/Lib/pathlib.py b/Lib/pathlib.py index d3d1af8..03c5e6e 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -961,6 +961,17 @@ class Path(PurePath): """ 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): """Iterate over the files in this directory. Does not yield any result for the special paths '.' and '..'. diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py index 6378d8c..fd9cf23 100644 --- a/Lib/test/test_pathlib.py +++ b/Lib/test/test_pathlib.py @@ -1251,6 +1251,26 @@ class _BasePathTest(object): p = self.cls.cwd() 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): # The empty path points to '.' p = self.cls('') |