bpo-30897: Add is_mount() to pathlib.Path (#2669)
* Add in is_mount() call to pathlib.Path similiar to os.path.ismount(path) * Add tests for is_mount()
This commit is contained in:
parent
9eef9e805e
commit
173ff4a58a
|
@ -1329,6 +1329,27 @@ class Path(PurePath):
|
||||||
# (see https://bitbucket.org/pitrou/pathlib/issue/12/)
|
# (see https://bitbucket.org/pitrou/pathlib/issue/12/)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def is_mount(self):
|
||||||
|
"""
|
||||||
|
Check if this path is a POSIX mount point
|
||||||
|
"""
|
||||||
|
# Need to exist and be a dir
|
||||||
|
if not self.exists() or not self.is_dir():
|
||||||
|
return False
|
||||||
|
|
||||||
|
parent = Path(self.parent)
|
||||||
|
try:
|
||||||
|
parent_dev = parent.stat().st_dev
|
||||||
|
except OSError:
|
||||||
|
return False
|
||||||
|
|
||||||
|
dev = self.stat().st_dev
|
||||||
|
if dev != parent_dev:
|
||||||
|
return True
|
||||||
|
ino = self.stat().st_ino
|
||||||
|
parent_ino = parent.stat().st_ino
|
||||||
|
return ino == parent_ino
|
||||||
|
|
||||||
def is_symlink(self):
|
def is_symlink(self):
|
||||||
"""
|
"""
|
||||||
Whether this path is a symbolic link.
|
Whether this path is a symbolic link.
|
||||||
|
@ -1416,3 +1437,6 @@ class WindowsPath(Path, PureWindowsPath):
|
||||||
|
|
||||||
def group(self):
|
def group(self):
|
||||||
raise NotImplementedError("Path.group() is unsupported on this system")
|
raise NotImplementedError("Path.group() is unsupported on this system")
|
||||||
|
|
||||||
|
def is_mount(self):
|
||||||
|
raise NotImplementedError("Path.is_mount() is unsupported on this system")
|
||||||
|
|
|
@ -1880,6 +1880,18 @@ class _BasePathTest(object):
|
||||||
self.assertFalse((P / 'linkB').is_file())
|
self.assertFalse((P / 'linkB').is_file())
|
||||||
self.assertFalse((P/ 'brokenLink').is_file())
|
self.assertFalse((P/ 'brokenLink').is_file())
|
||||||
|
|
||||||
|
@only_posix
|
||||||
|
def test_is_mount(self):
|
||||||
|
P = self.cls(BASE)
|
||||||
|
R = self.cls('/') # TODO: Work out windows
|
||||||
|
self.assertFalse((P / 'fileA').is_mount())
|
||||||
|
self.assertFalse((P / 'dirA').is_mount())
|
||||||
|
self.assertFalse((P / 'non-existing').is_mount())
|
||||||
|
self.assertFalse((P / 'fileA' / 'bah').is_mount())
|
||||||
|
self.assertTrue(R.is_mount())
|
||||||
|
if support.can_symlink():
|
||||||
|
self.assertFalse((P / 'linkA').is_mount())
|
||||||
|
|
||||||
def test_is_symlink(self):
|
def test_is_symlink(self):
|
||||||
P = self.cls(BASE)
|
P = self.cls(BASE)
|
||||||
self.assertFalse((P / 'fileA').is_symlink())
|
self.assertFalse((P / 'fileA').is_symlink())
|
||||||
|
|
Loading…
Reference in New Issue